Azure ML计算实例通过crontab执行脚本自动关机失败问题排查
Azure ML计算实例任务完成后自动关机失败问题解决
我的Azure ML计算实例通过Azure ML调度器在12:00启动,crontab在12:10调度执行任务。任务耗时不固定,希望任务完成后计算实例自动关机。脚本前序步骤均正常运行,但最后执行
az ml compute stop命令时无任何效果;将该关机命令单独放入close_ci.sh执行,反而导致计算实例重启。
可能原因及解决办法
1. 权限与认证上下文问题
crontab执行环境的Azure CLI认证上下文和交互式登录不一致,或所用账号权限不足,是命令失效的常见原因。
- 替换明文密码登录为服务主体认证(更安全且适配非交互式环境):
az login --service-principal -u <SP_APP_ID> -p <SP_PASSWORD> --tenant <TENANT_ID> - 给服务主体添加计算实例的停止权限:在Azure门户找到目标计算实例,进入IAM页面,添加
Microsoft.MachineLearningServices/workspaces/compute/stop/action权限。
2. 环境变量与进程等待问题
crontab默认执行环境缺少系统/用户环境变量,且若docker run后台执行,脚本会跳过任务直接执行关机命令。
- 确保
docker run为前台执行(不要加-d参数),让脚本等待容器任务完全结束后再执行关机。 - 在脚本开头加载环境变量:
source /etc/profile source ~/.bashrc
3. 避免实例重启的替代方案
单独执行az ml compute stop触发重启,多因命令上下文错误或实例任务状态冲突,可改用更直接的VM级命令:
- 先等待所有Docker容器停止:
# 循环检查,直到无运行中容器 while [ $(docker ps -q | wc -l) -gt 0 ]; do sleep 30 done - 用
az vm deallocate替代az ml compute stop(Azure ML计算实例本质是VM):
注:az vm deallocate --name <CI_VM_NAME> --resource-group <RESOURCE_GROUP> --subscription <SUBSCRIPTION_ID><CI_VM_NAME>可通过Azure门户VM列表或az ml compute show命令获取。
4. 日志排查定位问题
在关机命令后追加日志输出,查看具体错误:
az ml compute stop --name <CI_NAME> --resource-group <RESOURCE_NAME> --workspace-name <WORKSPACE_NAME> --subscription <SUBSCRIPTION_NAME> >> $foldername/stop_ci.txt 2>&1
通过stop_ci.txt中的错误信息,快速定位权限不足、参数错误等问题。
内容的提问来源于stack exchange,提问作者Iu Ferrer
相关产品推荐
相关产品推荐

