如何将数据直接从Azure Blob存储复制到计算实例SSD?
解决Azure ML自定义Docker环境下数据直接下载到计算实例SSD的问题
方法1:指定DataReference的计算实例SSD路径并配置Docker挂载
Azure ML默认的as_download()会将数据重定向到任务的网络临时挂载目录(/mnt/...),你需要显式指定计算实例本地SSD的路径,并让Docker容器挂载该路径,确保数据直接落盘到SSD且容器可访问:
- 确认计算实例SSD挂载点:登录计算实例执行
df -h,本地SSD通常挂载在/datadrive(空间更大且稳定)。 - 定义指向SSD路径的DataReference:
from azureml.core import Datastore from azureml.pipeline.steps import PythonScriptStep # 获取你的Blob存储数据存储 datastore = Datastore.get(your_workspace, name="your_blob_datastore") # 指定数据下载到计算实例SSD的路径 data_ref = datastore.path("blob_storage_data_path").as_download(path_on_compute="/datadrive/tmp/dataset")
- 配置Docker挂载该路径:在自定义环境中添加挂载参数,让容器内路径与计算实例路径完全一致:
from azureml.core import Environment custom_env = Environment.get(your_workspace, name="your_custom_docker_env") # 添加挂载:将计算实例的SSD目录映射到容器内同一路径 custom_env.docker.run_options = ["-v /datadrive/tmp/dataset:/datadrive/tmp/dataset"]
- 构建PythonScriptStep:确保输入参数指向该DataReference,脚本内直接使用
/datadrive/tmp/dataset作为数据目录。
方法2:在训练脚本内手动下载数据到SSD
放弃as_download(),直接在训练脚本中调用Azure ML Dataset的download()方法,强制将数据下载到计算实例SSD目录:
- 训练脚本(train.py)中的下载逻辑:
from azureml.core import Dataset, Run run = Run.get_context() # 获取数据集 dataset = Dataset.get_by_name(run.experiment.workspace, name="your_dataset") # 下载到计算实例SSD路径 dataset.download(target_path="/datadrive/tmp/dataset", overwrite=True) # 后续训练代码使用该路径 data_dir = "/datadrive/tmp/dataset"
- 配置Docker挂载SSD路径:同样在自定义环境中添加挂载参数,让容器能访问该目录:
custom_env.docker.run_options = ["-v /datadrive/tmp/dataset:/datadrive/tmp/dataset"]
关键注意事项
- 避免使用
/tmp作为下载路径:Azure ML任务容器默认/tmp会映射到网络挂载的临时目录,无法利用SSD性能,务必使用计算实例本地SSD的挂载路径(如/datadrive)。 - 权限验证:确保自定义Docker环境的用户对挂载目录有读写权限,可在Dockerfile中添加
RUN chmod -R 755 /datadrive/tmp/dataset或指定匹配计算实例的用户ID。 - 空间检查:提前确认计算实例SSD剩余空间足够存储下载的数据集。
内容的提问来源于stack exchange,提问作者Sina
相关产品推荐
相关产品推荐

