无法使用Azure Machine Learning SDK v2部署训练完成的模型
解决Azure ML托管部署中相对导入报错问题
问题本质
Azure ML部署环境里,score.py是作为独立主脚本运行的,不属于任何Python包结构,所以用相对导入(比如from . import config)会触发「尝试相对导入但未知父包」的错误,导致进程启动失败。
可行修复方案
1. 替换成绝对导入
把相对导入语句改成基于项目根目录的绝对路径导入。举个例子:
- 如果原本是
from . import config,直接改成import config - 如果
config.py在子文件夹utils里,就改成import utils.config
2. 手动添加路径到Python搜索列表
要是绝对导入还是不行,在score.py最开头加一段代码,把项目根目录加入Python的搜索路径:
import sys from pathlib import Path # 获取当前脚本所在文件夹路径 current_folder = Path(__file__).parent # 把当前文件夹(或上级,根据你的实际结构调整)加入sys.path sys.path.append(str(current_folder)) # 要是config在上级目录,就换成current_folder.parent # sys.path.append(str(current_folder.parent))
之后再正常导入import config就行。
3. 打包模型时带上所有依赖文件
用MLflow存模型的时候,要把config.py这类依赖文件一起打包进模型 artifact。用code_paths参数指定需要包含的文件或文件夹:
import mlflow mlflow.sklearn.log_model( model=你的训练好的模型, artifact_path="model", code_paths=["config.py", "子文件夹路径/"], # 把所有依赖的脚本都列在这里 registered_model_name="use-case1-model" )
这样部署时,这些文件会和score.py放在同一层级(或指定路径),导入就不会出问题了。
4. 核对部署后的文件结构
部署完成后可以在Azure ML工作室里查看部署的文件目录,确认config.py在score.py能访问到的位置。如果路径不对,调整打包时的code_paths或者score.py里的导入语句。
内容的提问来源于stack exchange,提问作者Rishav Raj
相关产品推荐
相关产品推荐

