Azure ML从Blob容器注册模型报错:TypeError解决方案及替代方法
问题解决与替代实现方法
一、解决当前TypeError错误
报错的核心原因是container_registry并非Model.register()方法的合法参数,直接移除这一行即可解决问题。
修正后的注册代码
from azureml.core import Model from azureml.core import Workspace subscription_id = 'mysub' resource_group = 'my_resource_group' workspace_name = 'my_ws_name' ws = Workspace(subscription_id, resource_group, workspace_name) model_path = 'my_model.joblib' container = 'mycontainer' model_name = 'my_model_v1' model = Model.register( workspace=ws, model_name=model_name, model_path=model_path, description="Test_Model", tags={'area': "emotion detection"}, model_framework=Model.Framework.SCIKITLEARN, model_framework_version='0.24.1', resource_configuration=None, properties=None, sample_input_dataset=None, sample_output_dataset=None, datasets=None, model_url=f'https://mystorage.blob.core.windows.net/{container}/{model_path}' ) print("模型注册完成,Ws对象已创建")
二、确保外部Blob模型注册成功的注意事项
- 若Blob存储为公开可读,上述代码可直接运行;
- 若为私有Blob存储,需生成带权限的SAS URL替换
model_url,或通过Azure ML Datastore注册(更安全):
替代方法:通过Datastore注册私有Blob模型
- 先注册Blob存储为Datastore(仅需执行一次)
from azureml.core import Datastore datastore = Datastore.register_azure_blob_container( workspace=ws, datastore_name="my_blob_datastore", container_name=container, account_name="mystorage", account_key="your_blob_account_key" # 也可使用SAS token )
- 通过Datastore路径注册模型
model = Model.register( workspace=ws, model_name=model_name, model_path=f'datastore://my_blob_datastore/{model_path}', description="Test_Model", tags={'area': "emotion detection"}, model_framework=Model.Framework.SCIKITLEARN, model_framework_version='0.24.1' )
三、后续部署端点步骤(补充)
模型注册成功后,可部署为在线端点:
- 编写评分脚本
score.py
import joblib import json import numpy as np def init(): global model model_path = Model.get_model_path(model_name='my_model_v1') model = joblib.load(model_path) def run(raw_data): data = json.loads(raw_data)['data'] np_data = np.array(data) result = model.predict(np_data) return result.tolist()
- 配置环境并部署
from azureml.core import Environment from azureml.core.model import InferenceConfig from azureml.core.webservice import AciWebservice # 创建运行环境 env = Environment.from_conda_specification(name="sklearn_env", file_path="conda_dependencies.yml") # 推理配置 inference_config = InferenceConfig(entry_script="score.py", environment=env) # ACI部署资源配置 aci_config = AciWebservice.deploy_configuration(cpu_cores=1, memory_gb=1) # 部署端点 service = Model.deploy( workspace=ws, name="emotion-detection-service", models=[model], inference_config=inference_config, deployment_config=aci_config ) service.wait_for_deployment(show_output=True) print(service.scoring_uri)
配套的conda_dependencies.yml文件内容:
name: sklearn_env dependencies: - python=3.8 - scikit-learn=0.24.1 - joblib - numpy
内容的提问来源于stack exchange,提问作者hari_azure
相关产品推荐
相关产品推荐

