【问题标题】:How to disable TOKENIZERS_PARALLELISM=(true | false) warning?如何禁用 TOKENIZERS_PARALLELISM=(true | false) 警告?
【发布时间】: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)

如何禁用此警告?

【问题讨论】:

    标签: pytorch huggingface-transformers huggingface-tokenizers


    【解决方案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 上搜索错误时的第一个 stackoverflow 页面。

      根据comment on githubFastTokenizers 似乎是问题所在。 同样根据another comment on gitmemory 你不应该在分叉进程之前使用标记器。(这基本上意味着在迭代你的数据加载器之前)

      所以解决方案是在训练/微调之前不使用 FastTokenizers使用普通的 Tokenizers。

      查看 huggingface 文档,了解您是否真的需要 FastTokenizer。

      【讨论】:

      • 那么此警告消息是否意味着训练/微调没有以并行方式进行?
      • 根据我的经验,是的
      • 不是根据我的经验。我进行了两个实验:(a)一个带有此警告消息(b)另一个没有它。我刚刚从 (a) 中保存了我的数据加载器,并使用 torch.save()torch.load() 简单地加载了它。两个实验大约在同一时间完成(每个 epoch 1 小时,3 epoch)。
      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 2013-01-05
      • 2012-08-03
      • 2011-05-19
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多