Azure ML管道Python步骤中MLClient使用及文件夹模型注册问题
为什么MLClient无法复用MLflow的凭据?
MLflow在Azure ML管道环境中是深度集成的,它会自动绑定当前计算目标的系统分配托管身份来访问模型注册表,无需手动配置凭据;而MLClient的DefaultAzureCredential默认凭据链在管道环境中,不会自动优先使用托管身份,需要显式指定或调整凭据链优先级,同时还要确保计算目标的身份具备足够权限。
解决方案1:在AML管道步骤中正确初始化MLClient
有两种可靠的实现方式:
方式一:直接使用托管身份凭据
显式调用ManagedIdentityCredential获取计算目标的系统托管身份,跳过默认凭据链的不确定性:from azure.ai.ml import MLClient from azure.identity import ManagedIdentityCredential # 获取计算目标的系统托管身份 credential = ManagedIdentityCredential() # 初始化MLClient,替换为你的工作空间信息 ml_client = MLClient( credential=credential, subscription_id="your-sub-id", resource_group_name="your-rg-name", workspace_name="your-ws-name" )注意:需确保计算目标的系统托管身份拥有机器学习数据科学家角色(或自定义角色,包含
Microsoft.MachineLearningServices/workspaces/models/write等核心权限)。方式二:利用AML运行上下文自动获取工作空间信息
通过Run.get_context()获取当前运行的工作空间上下文,避免硬编码订阅等信息:from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential from azureml.core import Run # 获取当前管道运行的上下文 run = Run.get_context() workspace = run.experiment.workspace # 初始化MLClient ml_client = MLClient( credential=DefaultAzureCredential(), subscription_id=workspace.subscription_id, resource_group_name=workspace.resource_group, workspace_name=workspace.name )
解决方案2:将文件夹注册为单个模型
两种方式都支持直接注册包含PKL文件的文件夹:
用MLClient注册
直接指定文件夹路径,根据模型类型设置对应参数(自定义模型用custom_model,框架模型如scikit-learn用sklearn_model):
# 替换为你的模型文件夹路径和名称/版本 model = ml_client.models.create_or_update( name="folder-based-model", version="1", path="./your-model-folder", # 包含PKL文件的文件夹路径 description="包含PKL文件的完整模型文件夹", type="custom_model" )
用MLflow注册(无需额外凭据配置)
利用MLflow与AML的自动集成,直接完成注册:
import mlflow from azureml.core import Run run = Run.get_context() # 绑定AML工作空间的MLflow跟踪URI mlflow.set_tracking_uri(run.experiment.workspace.get_mlflow_tracking_uri()) # 注册文件夹模型 mlflow.register_model( model_uri="./your-model-folder", name="folder-based-model" )
提示:如果文件夹内没有MLmodel文件,MLflow会自动生成基础配置;若需要自定义模型元数据,可手动添加MLmodel文件。
内容的提问来源于stack exchange,提问作者jiana
相关产品推荐
相关产品推荐

