Azure ML CLI创建作业报错:代码快照在Blob存储中被修改
问题分析与解决方案
错误原因解析
这个错误的核心是Azure ML的代码快照校验机制在起作用:提交作业时,Azure ML会对你指定的本地code目录生成哈希值,上传到Blob存储后会再次校验该哈希。如果Blob中的快照内容和本地计算的哈希不匹配,就会触发“代码快照被篡改”的提示。
你提到的“计算实例对比数据资产和代码文件夹哈希”是误解——数据资产和代码快照是完全独立的两个资源,校验只针对代码快照本身,和数据资产无关。可能的触发场景包括:
- 本地
code目录在提交后到作业启动前被修改 - Azure ML存储端的代码快照文件出现损坏或意外修改
- 本地路径配置问题(比如
code指向了包含动态生成文件的目录,导致每次哈希不一致)
针对你的YAML配置的修复步骤
1. 确保代码目录稳定
检查C:/CODE/azureml-examples/CODE_azure/目录:
- 移除临时文件、日志、自动生成的缓存文件夹(比如
__pycache__、.ipynb_checkpoints) - 提交作业前不要修改该目录内的任何文件
2. 强制生成新的代码快照
如果是旧快照缓存导致的问题,最简单的解决方法是:
- 在本地代码目录中创建一个空文件(比如手动新建
dummy.txt) - 修改现有文件的内容(比如在某个脚本末尾加个空行)
- 重新提交作业,Azure ML会生成新的哈希和快照,绕过旧的校验
3. 优化代码快照配置(解决耗时问题)
针对两年前提到的快照耗时问题,现在Azure ML有更高效的优化方式:
- 使用
.amlignore文件:在代码目录根目录创建.amlignore,像.gitignore一样排除不需要上传的文件/目录(比如大文件、虚拟环境、缓存文件夹),减少快照体积和上传时间 - 注册代码资产:提前将代码注册为Azure ML的代码资产,提交作业时直接引用资产路径(
code: azureml:my-code-asset:1),避免每次提交都重新上传和生成快照,大幅提升效率 - 直接使用计算实例本地代码:如果用计算实例作为目标,可以直接引用计算实例上的本地代码路径(比如
code: /home/azureuser/code/),完全跳过代码上传和快照生成步骤
数据资产的正确使用说明
你的YAML中数据资产的配置是正确的,trainingData会被挂载到计算目标的$AZUREML_INPUT_trainingData路径下,和代码快照完全隔离。作业中可以通过这个环境变量访问数据集,比如修改command为:
ls $AZUREML_INPUT_trainingData
内容的提问来源于stack exchange,提问作者aelyoumi
相关产品推荐
相关产品推荐

