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

MLFlow构建Docker镜像时自定义模块导入失败问题求助

解决MLflow构建Docker镜像时自定义模块mymodule找不到的问题

核心问题

你的自定义BypassablePipeline所在的mymodule没有被正确打包到MLflow模型的artifacts中,导致Docker镜像构建时无法安装或定位到该模块。

针对性解决步骤

1. 日志模型时明确指定自定义代码路径

在调用mlflow.sklearn.log_model时,必须通过code_path参数将mymodule的源码目录或文件纳入模型artifacts,MLflow会自动将这些代码复制到镜像环境:

model_info = mlflow.sklearn.log_model(
    model,
    artifact_path='model',
    registered_model_name=model_registry_name,
    signature=model_signature, 
    pip_requirements=my_pip_requirements,
    code_path=["mymodule/"]  # 传入自定义模块的根目录
)
  • 若mymodule包含多个子文件,也可指定具体文件,比如["mymodule/__init__.py", "mymodule/bypass_pipeline.py"]

2. 修正requirements.txt的依赖声明

  • 彻底移除-e .:该开发模式安装仅在本地有效,Docker构建环境无法访问你的本地源码目录
  • 若使用wheel包,确保wheel可被镜像构建环境获取:
    • 私有wheel可和模型一起归档,或上传到私有PyPI仓库,然后在requirements.txt中写mymodule==x.x.x
    • 若已通过code_path传入源码,requirements.txt无需再声明该模块(MLflow会自动处理)

3. 验证模型artifacts的完整性

日志模型后,检查模型目录结构:

  • 查看requirements.txt或conda.yaml,确认依赖列表正确
  • 确认模型目录下存在code文件夹,且其中包含mymodule的所有源码文件

4. 构建镜像时查看详细日志

添加--verbose参数运行构建命令,排查安装过程中的问题:

mlflow models build-docker -m "path_to_model" --enable-mlserver -n "image_name" --env-manager=virtualenv --verbose

通过日志确认mymodule是否被正确复制到镜像中,或依赖是否正常安装

5. Pyfunc包装模型的补充配置

如果使用PythonModel包装,日志Pyfunc模型时同样需要指定code_path,确保自定义模块被包含:

mlflow.pyfunc.log_model(
    artifact_path="pyfunc_model",
    python_model=PyfuncModelWrapper(),
    artifacts={"original_model_path": model_info.model_uri},
    code_path=["mymodule/"],
    pip_requirements=my_pip_requirements
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:18