如何在Azure ML Python SDK v2中获取实验关联的所有作业?
在Azure ML Python SDK v2中高效获取指定实验的所有作业列表
我需要获取工作区中属于某个实验的所有作业列表。使用SDK v1时,通过exp.get_runs()就能快速实现,耗时不到1秒,但在v2里用列表推导式过滤ml_client.jobs.list()的结果,耗时约7分钟,效率极低。请问在v2里有没有高效实现这个需求的最佳方法?
v1实现代码(azureml-core 1.49.0)
import azureml.core from azureml.core import Workspace, Experiment ws = Workspace.from_config() exp = Experiment(workspace=ws, name="my_experiment_name") runs = exp.get_runs()
我当前的v2近似实现(azure-ai-ml 1.5.0)
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential ml_client = MLClient( credential= DefaultAzureCredential(), subscription_id= "my_subscription_id", resource_group_name= "my_resource_group_name", workspace_name= "my_workspace_name", ) runs = [run for run in ml_client.jobs.list() if run.experiment_name == "my_experiment_name"]
最佳解决方案
在Azure ML Python SDK v2中,你可以直接使用ml_client.jobs.list()的experiment_name参数进行服务端过滤,这会比客户端本地过滤高效得多,无需在本地遍历所有作业再筛选。
优化后的v2代码
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient( credential=DefaultAzureCredential(), subscription_id="my_subscription_id", resource_group_name="my_resource_group_name", workspace_name="my_workspace_name", ) # 直接通过experiment_name参数过滤,服务端返回指定实验的作业 runs = list(ml_client.jobs.list(experiment_name="my_experiment_name"))
说明
- 该方法利用服务端筛选,避免了本地拉取所有作业数据再过滤的开销,速度能和v1的
exp.get_runs()相当。 - 确保你的
azure-ai-ml版本至少为1.5.0(你当前版本满足),该参数在较新版本的SDK中已支持。
内容的提问来源于stack exchange,提问作者tamboles98
相关产品推荐
相关产品推荐

