如何使用Azure ML SDK v2仅下载Azure作业结果中的指定单个文件?
解决Azure ML SDK v2下载单个作业输出文件失败的问题
问题原因
Azure ML SDK v2的ml_client.jobs.download()方法中,output_name参数仅支持指定作业定义的输出资产名称(比如你代码里的output_data),不能直接传入输出路径下的具体文件路径。当你设置output_name="output_data/file_test.txt"时,SDK会尝试查找一个名为output_data/file_test.txt的输出资产,但你的作业中并没有定义这个输出,因此不会触发下载操作。
解决方案
方案1:下载整个输出后提取目标文件
如果输出文件夹体积不大,可以先完整下载output_data,再提取所需文件:
import os import shutil download_path = "./downloaded_outputs" os.makedirs(download_path, exist_ok=True) # 下载整个output_data输出 ml_client.jobs.download( name=returned_job.name, download_path=download_path, output_name="output_data" ) # 将目标文件移动到指定位置 source_file = os.path.join(download_path, "output_data", "file_test.txt") target_file = os.path.join(download_path, "file_test.txt") shutil.move(source_file, target_file) # 可选:删除原下载的文件夹 shutil.rmtree(os.path.join(download_path, "output_data"))
方案2:直接通过Blob Storage下载单个文件
若输出文件夹较大,不想下载全部内容,可以直接访问作业输出对应的存储容器,定位到目标文件下载:
import os from azure.storage.blob import BlobServiceClient # 获取作业output_data的详细信息 job_output = ml_client.jobs.get(name=returned_job.name).outputs["output_data"] # 从输出URI解析存储信息 uri_components = job_output.uri.split("/") storage_account = uri_components[2].split(".")[0] container_name = uri_components[3] target_blob_path = "/".join(uri_components[4:]) + "/file_test.txt" # 初始化Blob客户端(使用默认Azure身份认证) blob_service_client = BlobServiceClient(account_url=f"https://{storage_account}.blob.core.windows.net") blob_client = blob_service_client.get_blob_client(container=container_name, blob=target_blob_path) # 下载目标文件 save_path = "./downloaded_outputs/file_test.txt" os.makedirs(os.path.dirname(save_path), exist_ok=True) with open(save_path, "wb") as file: file.write(blob_client.download_blob().readall())
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

