如何在Azure ML作业/管道中直接引用模型目录中的模型(无需注册为自定义模型)
如何在Azure ML作业/管道中直接引用模型目录中的模型(无需注册为自定义模型)
我太懂你现在的处境了——想直接用Azure ML模型注册表(比如那个公共的HuggingFace注册表)里的预训练模型,不想多一步把它注册成自己的自定义模型,结果按之前的方式配置URI还报错了,确实头疼。
先说说你之前踩的坑:用custom_model类型去引用注册表模型完全不对路,这个类型是给咱们自己上传的、非注册表托管的自定义模型用的,注册表的模型属于平台托管的资产,得用对应的类型来指定。
给你两个靠谱的解决方案:
方案一:在管道YAML中正确配置输入类型
你需要把输入类型换成mlflow_model(毕竟HuggingFace注册表的模型大多是MLflow格式打包的),配置格式如下:
ce_model: type: mlflow_model path: azureml://registries/HuggingFace/models/cross-encoder-stsb-roberta-large/versions/7
如果还是遇到问题,也可以试试registry_model类型,这个是专门为注册表资产设计的:
ce_model: type: registry_model path: azureml://registries/HuggingFace/models/cross-encoder-stsb-roberta-large/versions/7
这么改之后,Azure ML就能正确识别这个是注册表中的模型,不会再抛出BlobUri无效的错误了。
方案二:在作业脚本中通过SDK直接加载模型
要是YAML配置还是不顺手,你也可以跳过管道输入声明,直接在代码里用Azure ML SDK拉取注册表模型。示例代码如下:
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential import mlflow.pyfunc # 初始化MLClient,指定目标注册表名称 ml_client = MLClient( credential=DefaultAzureCredential(), registry_name="HuggingFace" ) # 获取指定版本的模型 target_model = ml_client.models.get( name="cross-encoder-stsb-roberta-large", version="7" ) # 加载MLflow格式的模型 loaded_model = mlflow.pyfunc.load_model(target_model.path)
这种方式更灵活,尤其是需要在代码里对模型做额外处理的时候特别好用。
最后提个小提醒:如果是私有注册表的模型,要确保你的作业身份有访问该注册表的权限;公共注册表比如HuggingFace的模型一般是公开可访问的,不用额外配置权限。
备注:内容来源于stack exchange,提问作者Henrique S. Silva
相关产品推荐
相关产品推荐

