我有一个带有 2 个 V100 的虚拟机,我正在使用 Huggingface 的非常好的 Trainer API 来训练类似 gpt2 的模型(相同的架构,更少的层)。我正在使用 pytorch 后端。
我观察到,当我使用完全相同的数据和 TrainingArguments 训练完全相同的模型(6 层,约 82M 参数)时,在单个 GPU 上的训练速度明显快于 2GPU:约 5 小时 vs 约 6.5 小时。
如何调试此类问题以了解导致速度下降的原因?
额外说明:
{
"optim": "adamw_torch",
"evaluation_strategy": "epoch",
"save_strategy": "epoch",
"fp16": true,
"gradient_checkpointing": true,
"per_device_train_batch_size": 16,
"per_device_eval_batch_size": 16,
"dataloader_num_workers": 4,
"dataloader_pin_memory": true,
"gradient_accumulation_steps": 1,
"num_train_epochs": 5
}
Run Code Online (Sandbox Code Playgroud)
的输出nvidia-smi topo -m是:
$ nvidia-smi topo -m
GPU0 GPU1 CPU Affinity NUMA Affinity …Run Code Online (Sandbox Code Playgroud) 问题1)
这个问题的答案表明,对于二元分类问题,我可以使用num_labels1(正或负)或 2(正和负)。有关于哪种设置更好的指南吗?看起来如果我们使用 1 那么概率将使用sigmoid函数计算,如果我们使用 2 那么概率将使用函数计算softmax。
问题2)
在这两种情况下,我的 y 标签是否相同?每个数据点都有 0 或 1 而不是一个热编码?例如,如果我有 2 个数据点,那么 y 将为0,1而不是[0,0],[0,1]
我遇到了非常不平衡的分类问题,其中 1 类仅出现 2% 的次数。在我的训练数据中,我进行了过采样
问题3)
我的数据已输入pandas dataframe,我正在将其转换为 adataset并使用下面的命令创建 y 变量。label如果我打算使用num_labels=1 ,我应该如何投射我的 y 列?
`train_dataset=Dataset.from_pandas(train_df).cast_column("label", ClassLabel(num_classes=2, names=['neg', 'pos'], names_file=None, id=None))`
Run Code Online (Sandbox Code Playgroud) 我想建立一个只需要语言模型的编码器部分的分类模型。我尝试过Bert、Roberta、xlnet,到目前为止我都成功了。
\n我现在只想从 T5 测试编码器部分,到目前为止,我找到了 encT5 https://github.com/monologg/EncT5
\n以及 HuggingFace 的 T5EncoderModel。
\n谁能帮助我了解 T5EncoderModel 是否是我正在寻找的?
\n它在描述中说:裸露的 T5 模型变压器输出编码器\xe2\x80\x99s 原始隐藏状态,顶部没有任何特定的头。
\n这让我有点困惑,特别是 encT5 提到他们实现了编码器部分只是因为它不存在于 HuggingFace 中,这让我更加怀疑。
\n请注意,我是深度学习的初学者,所以请对我放轻松,我知道任何问题对你们大多数人来说都可能很幼稚。
\n谢谢
\ntransformer-model deep-learning encoder-decoder pytorch huggingface-transformers
我正在使用文本列对数据框运行 T5-base-grammar- Correction 进行语法校正
from happytransformer import HappyTextToText
from happytransformer import TTSettings
from tqdm.notebook import tqdm
tqdm.pandas()
happy_tt = HappyTextToText("T5", "./t5-base-grammar-correction")
beam_settings = TTSettings(num_beams=5, min_length=1, max_length=30)
def grammer_pipeline(text):
text = "gec: " + text
result = happy_tt.generate_text(text, args=beam_settings)
return result.text
df['new_text'] = df['original_text'].progress_apply(grammer_pipeline)
Run Code Online (Sandbox Code Playgroud)
Pandas apply 函数虽然运行并提供所需的结果,但运行速度相当慢。
另外,我在执行代码时收到以下警告
/home/.local/lib/python3.6/site-packages/transformers/pipelines/base.py:908: UserWarning: You seem to be using the pipelines sequentially on GPU. In order to maximize efficiency please use a dataset
UserWarning,
Run Code Online (Sandbox Code Playgroud)
我可以访问 GPU。有人可以提供一些指导来加快执行速度并利用 GPU 的全部功能吗
- - - - - …
我一直在尝试微调 HuggingFace 的对话模型:Blendebot。我已经尝试过官方拥抱脸网站上给出的传统方法,该方法要求我们使用 trainer.train() 方法来完成此操作。我还尝试使用 .compile() 方法。我尝试过使用 PyTorch 以及 TensorFlow 对我的数据集进行微调。这两种方法似乎都失败了,并给我们一个错误,指出没有适用于 Blenderbot 模型的编译或训练方法。我还在网上到处查看了 Blenderbot 如何对我的自定义数据进行微调,但没有任何地方正确提到运行时不会抛出错误。我浏览了 Youtube 教程、博客和 StackOverflow 帖子,但没有一个回答这个问题。希望有人能在这里回复并帮助我。我也愿意使用其他 HuggingFace 对话模型进行微调。
谢谢你!:)
具体来说,我正在使用拥抱脸部的模型Davlan/distilbert-base-multilingual-cased-ner-hrl。但是,我无法从结果中提取完整的实体名称。
如果我运行以下代码:
from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import pipeline
tokenizer = AutoTokenizer.from_pretrained("Davlan/distilbert-base-multilingual-cased-ner-hrl")
model = AutoModelForTokenClassification.from_pretrained("Davlan/distilbert-base-multilingual-cased-ner-hrl")
nlp = pipeline("ner", model=model, tokenizer=tokenizer)
example = "My name is Johnathan Smith and I work at Apple"
ner_results = nlp(example, aggregation_strategy="max")
print(ner_results)
Run Code Online (Sandbox Code Playgroud)
然后我得到输出:
[{'entity': 'B-PER', 'score': 0.9998949, 'index': 4, 'word': 'Johna', 'start': 11, 'end': 16}, {'entity': 'I-PER', 'score': 0.999726, 'index': 5, 'word': '##tha', 'start': 16, 'end': 19}, {'entity': 'I-PER', 'score': 0.9997751, 'index': 6, 'word': '##n', 'start': 19, 'end': 20}, {'entity': 'I-PER', …Run Code Online (Sandbox Code Playgroud) 我一直在做一篇关于我的引文分类的论文。我刚刚实现了用于引文分类的 Bert 模型。我有 4 个输出类,我给出一个输入句子,我的模型返回一个输出,告诉引用的类别。现在我的主管给了我另一项任务。
您必须搜索是否可以使用手动功能扩展 BERT 或任何变压器模型。例如,您当前给出一个句子作为唯一输入,后跟其类别。如果你可以给出一个句子和一些其他特征作为输入怎么办?就像我们在其他分类器中所做的那样?
我需要一些关于这个问题的指导。我怎样才能在我的 Bert 模型中添加额外的特征,并且该特征将是分类的而不是数字的。
text-classification bert-language-model huggingface-transformers
我正在遵循TowardsDataScience 的教程,使用 Huggingface Trainer 进行文本分类。为了获得更强大的模型,我想要进行 K 折交叉验证,但我不确定如何使用 Huggingface Trainer 来完成此操作。Trainer 是否有内置功能,或者如何在此处进行交叉验证?
提前致谢!
python cross-validation bert-language-model k-fold huggingface-transformers
按照Huggingface 量化指南,我安装了以下内容:
\npip install transformers accelerate bitsandbytes\nRun Code Online (Sandbox Code Playgroud)\n(它产生了transformers 4.26.0,accelerate 0.16.0,bitsandbytes 0.37.0,这似乎符合guide\xe2\x80\x99s的要求。)
\n然后在 Python 中运行卸载代码的第一行:
\nfrom transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig\nRun Code Online (Sandbox Code Playgroud)\n然而,它导致了以下错误:ImportError: cannot import name \'BitsAndBytesConfig\' from \'transformers\' (/usr/local/lib/python3.10/dist-packages/transformers/__init__.py)。
做事grep BitsAndBytesConfig -r /usr/local/lib/python3.10/dist-packages不会有任何收获。
是否有我可能跳过的步骤,或者我可以解决的版本不一致问题?
\n我正在尝试在 Google Colab 中使用以下代码运行 Hugging Face 模型:
!pip install transformers
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-es")
inputs = tokenizer(text, return_tensors="pt").input_ids
Run Code Online (Sandbox Code Playgroud)
我遇到以下错误:
ValueError: This tokenizer cannot be instantiated. Please make sure you have `sentencepiece` installed in order to use this tokenizer.
Run Code Online (Sandbox Code Playgroud)
我如何解决它?
python valueerror google-colaboratory huggingface-transformers
python ×4
pytorch ×4
gpu ×2
nlp ×2
blenderbot ×1
dataset ×1
k-fold ×1
tensorflow ×1
valueerror ×1