You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制Azure ML Command作业中源代码的上传路径?

问题:控制Azure ML Command作业中本地代码的上传位置

在Azure Machine Learning Studio笔记本中使用command函数创建作业时,每次./src目录代码变更,新的代码副本都会上传到默认Blob存储账户的新容器中,导致存储杂乱。相关代码如下:

from azure.ai.ml import command, Input, Output
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

subscription_id = "<subscription_id>"
resource_group = "<resource_group>"
workspace = "<workspace>"
storage_account = "<storage_account>"
input_path = "<input_path>"
output_path = "<output_path>"

input_dict = {
    "input_data_object": Input(
        type=AssetTypes.URI_FILE, 
        path=f"azureml://subscriptions/{subscription_id}/resourcegroups/{resource_group}/workspaces/{workspace}/datastores/{storage_account}/paths/{input_path}"
    )
}

output_dict = {
    "output_folder_object": Output(
        type=AssetTypes.URI_FOLDER,
        path=f"azureml://subscriptions/{subscription_id}/resourcegroups/{resource_group}/workspaces/{workspace}/datastores/{storage_account}/paths/{output_path}",
    )
}

job = command(
    code="./src", 
    command="python 01_read_write_data.py -v --input_data=${{inputs.input_data_object}} --output_folder=${{outputs.output_folder_object}}",
    inputs=input_dict,
    outputs=output_dict,
    environment="<asset_env>",
    compute="<compute_cluster>",
)

returned_job = ml_client.create_or_update(job)

请问是否有方法控制./src代码的上传位置?


解决方案

有两种可行方式解决这个问题,核心思路是避免每次作业创建时自动上传本地代码到随机容器,而是指定固定存储位置:

方法1:注册代码资产(推荐)

将本地./src目录注册为Azure ML的代码资产(Code Asset),可以指定存储位置和版本,后续作业直接引用该资产,不会生成新的随机容器。

步骤示例:

  1. 先创建并注册代码资产,指定目标存储路径:
from azure.ai.ml.entities import Code

# 定义代码资产,指定要存储到的datastore和路径
code_asset = Code(
    path="./src",  # 本地代码目录
    name="data_processing_src",  # 资产名称
    version="1",  # 版本号,代码变更时可更新版本
    datastore=storage_account,  # 目标存储账户名
    path_on_datastore="code/assets/data_processing"  # 自定义的存储路径
)

# 注册资产到工作区
ml_client.code.create_or_update(code_asset)
  1. 在Command作业中引用该代码资产:
job = command(
    code="azureml:data_processing_src:1",  # 格式:azureml:<资产名称>:<版本号>
    command="python 01_read_write_data.py -v --input_data=${{inputs.input_data_object}} --output_folder=${{outputs.output_folder_object}}",
    inputs=input_dict,
    outputs=output_dict,
    environment="<asset_env>",
    compute="<compute_cluster>",
)

这种方式的优势是支持版本管理,代码变更时只需更新资产版本,存储位置固定,且无需手动上传代码。

方法2:直接引用存储中的代码路径

如果不想注册资产,可以提前将本地./src代码上传到指定的datastore路径,然后在Command作业中直接引用该路径,跳过本地代码自动上传步骤。

代码示例:

# 直接指定datastore中的代码文件夹路径
job = command(
    code=f"azureml://subscriptions/{subscription_id}/resourcegroups/{resource_group}/workspaces/{workspace}/datastores/{storage_account}/paths/code/assets/data_processing/",
    command="python 01_read_write_data.py -v --input_data=${{inputs.input_data_object}} --output_folder=${{outputs.output_folder_object}}",
    inputs=input_dict,
    outputs=output_dict,
    environment="<asset_env>",
    compute="<compute_cluster>",
)

注意:这种方式需要手动同步本地代码到指定的datastore路径,适合不需要版本管理的简单场景。


内容的提问来源于stack exchange,提问作者Matt_Haythornthwaite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:36:06