使用AzureML Python SDK V2提交作业遇文件超100MB问题求助
解决方案
1. 先排查.amlignore的问题
- 确认.amlignore语法和.gitignore完全一致,别写错大文件的路径,相对路径要和提交作业时指定的
code目录对应 - 用
find . -size +90M在本地目录扫一遍所有大文件,确保这些文件的路径都写进了.amlignore,别漏了隐藏的缓存、数据集文件 - 注意:.amlignore必须放在你指定的
code目录的根目录,放错位置等于白加
2. 用AzCopy传大文件到数据存储,作业直接引用
AzCopy不是用来提交作业的,而是帮你把大文件传到Azure ML的数据存储,作业里直接用存储路径,不用打包上传:
- 先用AzCopy把大文件传到Azure ML的数据存储:
SAS令牌可以在Azure ML工作室的「数据存储」页面生成,直接复制即可azcopy copy "/本地大文件路径" "https://<存储账户名>.blob.core.windows.net/<容器名>/<目标路径>?<SAS令牌>" - 然后在作业代码里用SDK加载存储里的文件:
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient(DefaultAzureCredential(), subscription_id="<你的订阅ID>", resource_group_name="<资源组名>", workspace_name="<工作区名>") datastore = ml_client.datastores.get("<数据存储名称>") # 生成数据URI data_uri = f"azureml://datastores/{datastore.name}/paths/<目标路径>/大文件名" # 代码里直接用这个URI代替本地文件路径 - 提交作业时,
code参数只放必要的代码文件,大文件不用打包进去
3. 直接用DevOps仓库作为作业代码源
既然代码已经在DevOps仓库,没必要本地打包上传,直接让Azure ML从DevOps拉取:
- 作业定义里用
GitConfiguration指定仓库信息:
这样Azure ML直接从DevOps拉代码,完全绕开本地上传大文件的问题from azure.ai.ml.entities import CommandJob, GitConfiguration git_config = GitConfiguration( repository="<你的DevOps仓库URL>", branch="<要拉取的分支>", path="<仓库中代码的相对路径>" ) command_job = CommandJob( code=git_config, command="python train.py", environment="<你的环境名称>:<版本>", compute="<计算集群名称>" ) ml_client.jobs.create_or_update(command_job)
4. 拆分大文件或用Git LFS管理
如果大文件是数据集、模型这类,要么拆成小文件,要么在DevOps仓库启用Git LFS管理大文件,这样本地和Azure ML拉取时都只会处理必要的文件,不会把大文件塞进作业上传包
内容的提问来源于stack exchange,提问作者Niki
相关产品推荐
相关产品推荐

