如何将AzureML自动生成的作业名称传递给定时Pipeline?
解决AzureML定时Pipeline传递自动生成作业名称的问题
方法1:直接使用AzureML内置环境变量
AzureML在作业运行时会自动注入AZUREML_RUN_ID环境变量,这个变量的值就是平台自动生成的作业名称(即运行ID)。你可以直接在CommandStep的命令中引用这个环境变量:
修改你的Pipeline创建代码:
step = CommandStep(command="myscript.sh --job-name=$AZUREML_RUN_ID") pipeline = Pipeline(workspace, [step]) published_pipeline = pipeline.publish(name='my pipeline') schedule = Schedule.create(workspace=workspace, pipeline_id=published_pipeline.id, ...)
之后在myscript.sh里就能通过传入的--job-name参数拿到作业名称,也可以直接在脚本内读取环境变量:
# 在myscript.sh中直接读取环境变量 CURRENT_JOB_NAME=$AZUREML_RUN_ID echo "当前运行的作业名称:$CURRENT_JOB_NAME"
方法2:通过Pipeline参数结合RunContext传递(适合Python脚本场景)
如果你的处理逻辑是Python脚本,可以通过Pipeline参数+RunContext的方式传递作业名称:
- 定义Pipeline参数:
from azureml.pipeline.core import PipelineParameter job_name_param = PipelineParameter(name="job_name", default_value="temp_job")
- 关联参数到CommandStep:
step = CommandStep( command="python myscript.py --job-name={}".format(job_name_param), parameters={"job_name": job_name_param} )
- 在Python脚本中获取作业名称:
# myscript.py from azureml.core.run import Run import argparse parser = argparse.ArgumentParser() parser.add_argument("--job-name", type=str) args = parser.parse_args() # 也可以直接通过RunContext获取作业ID(和自动生成的作业名称一致) run = Run.get_context() job_name = run.id print("作业名称:", job_name)
两种方法中,方法1更适合Shell脚本场景,无需额外代码修改就能直接获取作业名称,是定时Pipeline场景下最便捷的方案。
内容的提问来源于stack exchange,提问作者techtech
相关产品推荐
相关产品推荐

