Azure ML实验是否存在单用户运行提交数量限制?
问题成因
这个问题是Azure ML几个未写入公开限制文档的软阈值+本地SDK缓存bug共同导致的,常见触发原因有三个:
- 单实验用户级元数据索引阻塞:单个实验的运行元数据按用户身份做分片存储,当单个用户在同一实验下提交的累计运行数突破10万的软阈值后,对应分片的索引会出现膨胀,提交新运行时的服务端权限校验环节需要遍历该分片索引,耗时会指数级上升,最终触发客户端超时。同实验下其他用户因为累计提交量没到阈值,对应分片索引体积小,所以提交不受影响。
- 本地SDK缓存损坏:使用Python SDK提交运行时,本地会存储对应实验的运行快照、凭据缓存,当单实验的本地缓存文件体积超过200MB时,旧版本SDK的缓存校验逻辑会陷入死循环,不会抛出明确错误,进程一直挂起直到超时。修改实验名后SDK会生成全新的缓存条目,所以能临时恢复提交。
- 活跃运行数软限流:单个用户在同一实验下的非终态(Queued/Running/Preparing)运行数超过300个时,服务端会对该用户的新提交请求做降级排队,不会直接返回限流错误,请求排队到超时就会表现为提交无响应。
可落地解决方案
按优先级从高到低操作即可,不需要拆分新实验:
- 先修复本地缓存问题
- 退出所有正在运行的Azure ML提交进程
- 清空本地Azure ML缓存目录下对应目标实验的缓存文件:
- Windows路径:
%APPDATA%\azureml\ - macOS/Linux路径:
~/.azureml/
- Windows路径:
- 将本地
azureml-core包升级到最新稳定版,旧版本存在缓存内存泄漏的已知bug,会触发无响应问题
- 清理僵尸运行
用SDK批量取消你名下该实验下的僵尸运行(超过7天无日志更新、停留在非终态的运行),把个人名下该实验的活跃运行数控制在100以内即可,参考代码:import datetime from azureml.core import Workspace, Experiment ws = Workspace.from_config() target_exp = Experiment(ws, "你的目标实验名称") # 筛选自己账号下的非终态运行 pending_runs = target_exp.get_runs( user="你的登录账号邮箱", status=["Queued", "Running", "Preparing"] ) for run in pending_runs: run_detail = run.get_details() start_time = run_detail["startTimeUtc"].replace(tzinfo=None) # 取消超过7天没更新的僵尸运行 if (datetime.datetime.now() - start_time).days > 7: run.cancel() - 归档历史运行缩小索引体积
在Azure ML门户的目标实验页,开启运行归档功能,将30天以上的历史运行批量归档。归档不会删除运行数据、不会改变实验归属,只是把冷数据从高频访问的主索引分区移到冷存储,会直接把主索引体积降到软阈值以下,从服务端解决索引阻塞问题,所有运行仍然归集在同一实验下,没有额外管理成本。 - 应急提交参数
如果需要紧急提交,可以在ScriptRunConfig中传入隐藏参数_reload_on_failure=True,强制提交时跳过本地缓存校验环节,直接走服务端接口提交,可绕过本地缓存导致的超时问题。
内容的提问来源于stack exchange,提问作者elldora
相关产品推荐
相关产品推荐

