使用MLflow记录模型时遭遇UnicodeDecodeError错误求助
解决MLflow记录模型时的UnicodeDecodeError(依赖推断阶段)
问题诊断
报错堆栈显示,MLflow在执行依赖推断的子命令时,尝试用UTF-8解码标准错误输出(stderr)失败,字节0xe9通常对应中文或其他非ASCII字符。大概率是你的Python环境路径、系统用户路径包含中文,导致子命令输出的路径信息无法用UTF-8解码。
解决办法
1. 手动指定pip依赖(推荐)
直接在mlflow.sklearn.log_model中通过pip_requirements参数传入明确的依赖列表,跳过MLflow的自动依赖推断逻辑:
# 替换原有的log_model代码 if tracking_url_type_store != "file": mlflow.sklearn.log_model( lr, "model", registered_model_name="ElasticnetWineModel", pip_requirements=["scikit-learn==1.0.2", "cloudpickle==2.1.0"] # 可添加其他项目依赖 ) else: mlflow.sklearn.log_model( lr, "model", pip_requirements=["scikit-learn==1.0.2", "cloudpickle==2.1.0"] )
2. 修改MLflow源码临时修复
找到虚拟环境中的requirements_utils.py文件(路径:D:\_verse\test_mlflow\lib\site-packages\mlflow\utils\requirements_utils.py),修改第208行的解码逻辑:
将原代码:
stderr = stderr.decode("utf-8")
替换为以下任一方式:
- 方式一:使用系统默认编码解码
import locale stderr = stderr.decode(locale.getpreferredencoding())
- 方式二:指定中文编码并忽略错误
stderr = stderr.decode("gbk", errors="replace")
3. 更换无中文路径的Python环境
重新创建一个路径全为英文的虚拟环境(例如D:\venvs\mlflow_env),安装MLflow、scikit-learn等依赖后,在新环境中运行代码,从根源避免路径中的非ASCII字符引发编码问题。
内容的提问来源于stack exchange,提问作者DamienM
相关产品推荐
相关产品推荐

