You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gradio与MLflow时偶现Tokenizer并行性错误求助

问题:Gradio脚本运行时出现tokenizers并行警告的原因分析

我编写了一个Gradio脚本,运行时偶尔会出现如下警告:

huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:
    - Avoid using `tokenizers` before the fork if possible
    - Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)

奇怪的是,与网上查到的情况不同,我本地并未使用tokenizers、LLM、HuggingFace模型,也未手动进行进程fork操作。我的脚本仅通过Gradio的下拉框、按钮、数据框等组件,点击后向运行LLaVA模型API的远程机器发送请求并接收结果。错误恰好出现在执行以下MLflow日志代码时、最终打印语句之前:

with mlflow.start_run() as run:
    mlflow.log_param("some_param",something)
    # ... some more param metrics and artifacts logging
    print(
                f"Logged data to MLFlow with run ID: {run.info.run_id} in experiment: {experiment_name}"
            )

请问可能是什么原因导致的?

可能的原因分析

  • MLflow间接引入tokenizers依赖:你虽然没有直接使用HuggingFace的tokenizers,但MLflow的部分组件(比如模型追踪、日志相关的扩展)可能间接依赖了该库。当MLflow执行日志记录操作时,底层会初始化tokenizers相关模块,触发并行配置逻辑。

  • Gradio隐性触发进程fork:Gradio默认会采用多进程/队列机制处理用户请求(比如启用queue()时),当你的MLflow日志代码在Gradio的回调函数中执行时,Gradio可能已经隐性fork了进程。此时MLflow间接初始化的tokenizers模块已启用并行,两者冲突触发警告。

  • 依赖链的隐性触发:即使你调用的是远程LLaVA API,本地请求处理或MLflow的某些依赖可能和tokenizers存在间接依赖关系,在执行过程中触发了该模块的初始化。

验证与解决建议

  • 检查依赖关系:用pipdeptree mlflow查看MLflow的依赖树,确认是否间接包含tokenizers。
  • 显式禁用并行警告:在脚本开头添加代码import os; os.environ["TOKENIZERS_PARALLELISM"] = "false",直接抑制该警告。
  • 调整Gradio运行模式:尝试启动Gradio时使用launch(enable_queue=False),禁用多进程队列机制,观察警告是否消失。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:30:56