Azure ML v2部署模型时如何导入自定义脚本?
Azure ML v2 部署时导入自定义脚本文件的解决方案
我基于心脏病数据集构建了一个包含自定义离群值移除转换器(OutlierRemover)的模型 pipeline。在Azure ML v1中,我把score.py和outlierremover.py等相关文件放在./assets文件夹下,通过以下配置实现导入使用:
inference_config = InferenceConfig( entry_script="score.py", environment=myenv, source_directory='./assets')
但迁移到v2时,官方文档的「创建推理资源」部分没有提及对应方案。v2中对应的CodeConfiguration代码如下:
# configure an inference configuration with a scoring script from azure.ai.ml.entities import CodeConfiguration code_config = CodeConfiguration( code="../model-1/onlinescoring", scoring_script="score.py" )
看起来没有参数可以直接添加outlierremover.py这类额外文件。另外我注意到部署UI里有添加自定义脚本的选项,但Python SDK v2里找不到对应的配置方式,想知道有没有顺畅的解决方法。
解决方法
其实v2的CodeConfiguration中的code参数就是对应v1的source_directory,只要把自定义脚本和score.py放在同一个目录(或子目录),将code指向该目录即可,具体步骤:
- 将
score.py、outlierremover.py及其他依赖文件放在同一文件夹下,比如./inference_code - 配置
CodeConfiguration时指向该文件夹:
from azure.ai.ml.entities import CodeConfiguration code_config = CodeConfiguration( code="./inference_code", scoring_script="score.py" )
- 在
score.py中正常导入自定义模块:
from outlierremover import OutlierRemover
原理是:v2会将code指定目录下的所有文件(包括子目录)打包部署到推理环境,和v1的source_directory行为一致,只是参数命名变更,官方文档未明确说明这一点导致误解。
如果自定义脚本在子目录中,需确保Python能识别模块:
- 在子目录下添加空的
__init__.py文件 - 或者在
score.py中手动添加路径:
import sys sys.path.append("./subdirectory") from outlierremover import OutlierRemover
内容的提问来源于stack exchange,提问作者Freejack
相关产品推荐
相关产品推荐

