Azure DevOps中通过Azure ML SDK启动TensorFlow训练遇磁盘满问题求助
解决Azure ML添加TensorFlow依赖时磁盘已满的问题
问题背景
当前通过Azure DevOps的Azure CLI任务提交TensorFlow训练作业,命令如下:
az ml run submit-script -g $(ml.resourceGroup) -w $(ml.workspace) -e $(ml.DtExperimentName) --ct $(ml.computeName) -c cnn_training --source-directory . --path environment_setup -t ./metadata/cnn_run.json cnn_training.py --container_name --model_path ./models/cnn_model.pkl --artifact_loc ./outputs/models/ --dataset_name data_ds
训练配置文件内容:
framework: Python script: cnn_training.py communicator: None autoPrepareEnvironment: true maxRunDurationSeconds: nodeCount: 1 environment: name: cnn_model_demo python: userManagedDependencies: false interpreterPath: python condaDependenciesFile: .azureml/conda_dependencies.yml baseCondaEnvironment: docker: enabled: true baseImage: mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04 sharedVolumes: true gpuSupport: false shmSize: 10g arguments: [] history: outputCollection: true snapshotProject: true directoriesToWatch: - logs dataReferences: workspaceblobstore: dataStoreName: workspaceblobstore pathOnDataStore: cccdata mode: download overwrite: true pathOnCompute:
核心问题:在conda_dependencies.yml中添加TensorFlow依赖后,作业触发磁盘已满错误,已尝试增大计算集群规模、修改shmSize,无效。
排查方向
磁盘满的根源通常是:
- 老旧基础镜像的系统盘空间不足,conda安装TensorFlow时会下载大量依赖包及缓存文件
- 数据默认下载到系统盘,占用额外空间
- 作业快照、日志收集占用过多磁盘
- conda依赖配置未优化,导致下载冗余包
解决方案
1. 更换轻量化/预构建的基础镜像
原基础镜像mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04版本过旧,系统盘空间预留有限,且需要从头安装TensorFlow。建议更换为:
- 更轻量的Azure ML基础镜像:
mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04(更新的Ubuntu版本,默认环境更精简) - 预构建的TensorFlow环境镜像:
mcr.microsoft.com/azureml/tensorflow-2.10-ubuntu20.04-py38-cpu(已预装TensorFlow,无需手动安装,大幅减少磁盘占用)
修改配置中docker.baseImage字段即可。
2. 优化conda依赖配置
- 指定TensorFlow具体版本:避免conda遍历所有兼容版本,减少下载量。示例
conda_dependencies.yml:name: project_environment dependencies: - python=3.8 - pip - pip: - tensorflow==2.10.0 # 其他依赖 - 清理缓存:在环境配置中添加post-install命令,安装完成后清理缓存。修改配置的
docker.arguments:docker: arguments: ["bash", "-c", "pip install --no-cache-dir tensorflow==2.10.0 && rm -rf /root/.cache/pip && rm -rf /opt/conda/pkgs/*"]
3. 调整数据下载路径
配置中dataReferences.pathOnCompute为空,默认会将数据下载到系统盘根目录附近。指定到计算节点的临时磁盘(通常为/tmp或/azureml/tmp,空间更大且无需持久化):
dataReferences: workspaceblobstore: # ... 其他配置 pathOnCompute: /tmp/cccdata
4. 减少不必要的磁盘占用
- 关闭项目快照:将
history.snapshotProject设为false,避免上传整个项目目录到节点占用磁盘 - 限制日志收集范围:仅监控必要的日志目录,避免收集冗余文件
5. 检查计算集群磁盘配置
创建计算集群时,确保OS磁盘大小足够(建议至少100GB),部分低规格实例默认OS盘仅40GB,无法容纳TensorFlow及依赖包。可在Azure ML Studio或CLI中修改计算集群的磁盘配置。
后续推进步骤
- 优先更换预构建的TensorFlow基础镜像,快速验证是否解决磁盘满问题
- 若仍有问题,添加磁盘监控命令到训练脚本开头(如
df -h),输出磁盘使用情况,定位占用空间的目录 - 逐步应用上述优化项,每次只调整一个变量,便于排查效果
- 验证数据下载到临时盘后,系统盘的占用情况
- 若使用GPU训练,切换到支持GPU的基础镜像,并开启
gpuSupport: true
内容的提问来源于stack exchange,提问作者Imperial_J
相关产品推荐
相关产品推荐

