如何禁用 TOKENIZERS_PARALLELISM=(true | false) 警告?
Posted
技术标签:
【中文标题】如何禁用 TOKENIZERS_PARALLELISM=(true | false) 警告?【英文标题】:How to disable TOKENIZERS_PARALLELISM=(true | false) warning? 【发布时间】:2020-10-22 18:05:31 【问题描述】:我使用 pytorch 来训练 huggingface-transformers 模型,但是每个 epoch 总是输出警告:
The current process just got forked. Disabling parallelism to avoid deadlocks... To disable this warning, please explicitly set TOKENIZERS_PARALLELISM=(true | false)
如何禁用此警告?
【问题讨论】:
【参考方案1】:我通过将 huggingface 的 transfomers 库版本从 3.0.0 降级到 2.11.0 并将 tokenizers 库版本从 0.8.0rc4 降级到 0.7.0 解决了这个问题。
这似乎是拥抱脸的标记器库版本“0.8.0rc4”的问题。目前,似乎没有将 TOKENIZERS_PARALLELISM=(true | false) 设置为错误消息的解决方案。
参考:https://github.com/ThilinaRajapakse/simpletransformers/issues/515
【讨论】:
【参考方案2】:设置环境变量为字符串"false"
由
TOKENIZERS_PARALLELISM=false
在你的外壳中
或通过:
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"
在 Python 脚本中
【讨论】:
为我工作。不过,值得一看的是 this answer,它指出使用快速标记器可能是造成这种情况的原因,您可能需要警惕使用它们的任何后果。【参考方案3】:我将在此处留下此评论,以帮助任何想知道是否有可能保持并行性并在培训期间节省宝贵时间的人。也因为它是直接在 Google 上搜索错误时的第一个 *** 页面。
根据comment on github,FastTokenizers 似乎是问题所在。 同样根据another comment on gitmemory 你不应该在分叉进程之前使用标记器。(这基本上意味着在迭代你的数据加载器之前)
所以解决方案是在训练/微调之前不使用 FastTokenizers或使用普通的 Tokenizers。
查看 huggingface 文档,了解您是否真的需要 FastTokenizer。
【讨论】:
那么此警告消息是否意味着训练/微调没有以并行方式进行? 根据我的经验,是的 不是根据我的经验。我进行了两个实验:(a)一个带有此警告消息(b)另一个没有它。我刚刚从 (a) 中保存了我的数据加载器,并使用torch.save()
和 torch.load()
简单地加载了它。两个实验大约在同一时间完成(每个 epoch 1 小时,3 epoch)。以上是关于如何禁用 TOKENIZERS_PARALLELISM=(true | false) 警告?的主要内容,如果未能解决你的问题,请参考以下文章