使用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
相关产品推荐
相关产品推荐

