在具有大型数据集的 GPU 上高效使用 Hugging Face 转换器管道

问题描述 投票:0回答:1

我对 Python 比较陌生,在使用 Hugging Face Transformers 对相对较大的数据集进行情感分析时面临一些性能问题。我创建了一个包含 6000 行西班牙语文本数据的 DataFrame,并将情感分析管道应用于每行文本。这是我的代码的简化版本:

import pandas as pd
import torch
from tqdm import tqdm
from transformers import pipeline


data = {
    'TD': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'text': [
        # ... (your text data here)
    ]
}

df_model = pd.DataFrame(data)

device = 0 if torch.cuda.is_available() else -1
py_sentimiento = pipeline("sentiment-analysis", model="finiteautomata/beto-sentiment-analysis", tokenizer="finiteautomata/beto-sentiment-analysis", device=device, truncation=True)

tqdm.pandas()
df_model['py_sentimiento'] = df_model['text'].progress_apply(py_sentimiento)
df_model['py_sentimiento'] = df_model['py_sentimiento'].apply(lambda x: x[0]['label'])

但是,我遇到了一条警告消息,建议我应该使用数据集进行更有效的处理。警告信息如下:

"You seem to be using the pipelines sequentially on GPU. In order to maximize efficiency please use a dataset."

我有两个问题:

此警告是什么意思,为什么我应该使用数据集来提高效率?

如何修改代码来批处理数据并使用并行计算来更好地利用我的 GPU 资源,哪些代码、函数或库应该与拥抱脸部变换器一起使用?

我渴望学习和优化我的代码。

python gpu huggingface-transformers huggingface-datasets
1个回答
0
投票

这个警告是什么意思,为什么我应该使用数据集 效率?

这意味着您可以通过将数据包装在

Dataset
对象中来提高效率:

from datasets import Dataset
data = {
    'TD': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'text': [
        # ... (your text data here)
    ]
}
dataset = Dataset.from_dict(data)

如果您想了解收到此警告的原因,可以查看此文件:https://github.com/huggingface/transformers/blob/main/src/transformers/pipelines/base.py# L1100。 这个想法是它检测到您调用管道超过 10 次。与使用

Dataset
对象作为输入相比,它会导致计算效率低下,因为管道基类的
__call__
函数是针对每个单个输入示例进行评估的。

如果您使用迭代器,例如,一个

Dataset
对象,那么所有示例都会立即处理,并且您可以批处理预处理和推理过程:

from transformers.pipelines.pt_utils import KeyDataset
classifier = pipeline("sentiment-analysis",
                      model="finiteautomata/beto-sentiment-analysis",
                      device=device,
                      truncation=True,
                      batch_size=4)
for out in classifier(KeyDataset(dataset, "text")):
    print(out)

如何修改代码来批量处理数据并使用并行计算 为了更好地利用我的 GPU 资源,什么代码或函数或 库应该与拥抱脸部变压器一起使用吗?

在上述解决方案中,您可以调整

batch_size
以适合您的可用 GPU 内存并加快推理速度。 另一种选择是利用
Accelerate
进行分布式推理: https://huggingface.co/docs/accelerate/usage_guides/distributed_inference

© www.soinside.com 2019 - 2024. All rights reserved.