MLFlow执行mlflow models build-docker无法指定自定义基础镜像问题咨询
自定义Dockerfile实现轻量化镜像的方法
- MLflow 1.25.0及以上版本(官方原生支持自定义)
官方在该版本之后新增了--dockerfile入参,可以直接传入你自行编写的Dockerfile路径,覆盖默认的硬编码模板,命令示例如下:
你也可以搭配mlflow models build-docker -m {model_uri} -n {docker_name} --dockerfile ./custom.Dockerfile--build-arg参数直接修改默认模板的基础镜像参数,不用完全重写Dockerfile就能更换轻量化基础镜像。 - 旧版本MLflow兼容方案
你可以手动导出构建上下文自行修改构建:- 执行一次默认的
mlflow models build-docker命令,从命令输出的日志中找到临时构建目录的路径 - 复制该目录下的所有构建文件到本地工作目录,修改其中自动生成的Dockerfile,替换轻量化基础镜像、删除不必要的依赖安装步骤
- 手动执行
docker build -t {docker_name} .完成镜像构建,改造后镜像体积普遍可以压缩到原有的1/3甚至更小。
- 执行一次默认的
默认使用Java服务的原因
官方默认配置优先保证全模型类型兼容性:内置的Java版MLflow Serving支持MLflow所有格式的模型部署,包括Spark MLlib、JVM版XGBoost、H2O等非Python生态的模型,而本地执行的mlflow serve默认走的python-func模式仅支持Python函数类型的模型,无法兼容其他生态的模型,因此官方选择兼容性更好的方案作为默认配置。
如果你确定你的模型仅为Python类型,可以在自定义Dockerfile中直接去掉所有Java相关依赖安装步骤,将容器启动命令替换为mlflow models serve的相关启动参数,就能实现和本地一致的运行模式,进一步压缩镜像体积。
内容的提问来源于stack exchange,提问作者mpjanus
相关产品推荐
相关产品推荐

