使用Cloud Shell调试生产训练作业
ModelArts Standard提供了Cloud Shell,可以登录运行中的容器,用于调试生产环境的训练作业。
约束限制
仅专属资源池支持使用Cloud Shell登录训练容器,且训练作业必须处于“运行中”状态。
前提条件:给子账号配置允许使用Cloud Shell的权限
- 使用主用户账号登录华为云的管理控制台,单击右上角用户名,在下拉框中选择“统一身份认证”,进入统一身份认证(IAM)服务。
- 在统一身份认证服务页面的左侧导航选择 ,单击右上角的“创建自定义策略”按如下要求设置完成后单击“确定”。
- “策略名称”:设置自定义策略名称,例如:允许通过Cloud Shell访问运行中的训练作业。
- “策略配置方式”:选择可视化视图。
- “策略内容”:允许,云服务中搜索ModelArts服务并选中,操作列中搜索关键词modelarts:trainJob:exec并选中,所有资源选择默认值。
图1 创建自定义策略
- 在统一身份认证服务页面的左侧导航选择“用户组”,在用户组页面查找待授权的用户组名称,在右侧的操作列单击“授权”,勾选步骤2创建的自定义策略,单击“下一步”,选择授权范围方案,单击“确定”。
此时,该用户组下的所有用户均有权限通过Cloud Shell登录运行中的训练作业容器。
如果没有用户组,也可以创建一个新的用户组,并通过“用户组管理”功能添加用户,并配置授权。如果指定的子用户没有在用户组中,也可以通过“用户组管理”功能增加用户。
使用Cloud Shell
- 参考前提条件:给子账号配置允许使用Cloud Shell的权限,完成配置。
- 在ModelArts管理控制台的左侧导航栏中选择“模型训练 > 训练作业”。
- 在训练作业列表中,单击作业名称进入训练作业详情页面。
- 在训练作业详情页面,单击“Cloud Shell”页签,登录训练容器。
连接成功后,Cloud Shell界面提示如下。
图2 Cloud Shell界面当作业处于非运行状态或权限不足时会导致无法使用Cloud Shell,请根据提示定位原因即可。
图3 报错提示部分用户登录Cloud Shell界面时,可能会出现路径显示异常情况,此时在Cloud Shell中单击回车键即可恢复正常。图4 路径异常
如何使训练作业保持运行中状态
由于需要训练作业处于“运行中”状态才能登录Cloud Shell,因此本文介绍如何使训练作业保持运行中状态,方便您快速通过Cloud Shell登录运行中的训练容器。
通过Sleep命令使训练作业保持运行
- 如果训练作业使用的是预置框架:
在创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“预置框架”,代码目录中新增sleep.py并将此脚本作为“启动文件”。这样启动的作业将会持续运行60分钟。您可通过Cloud Shell进入容器进行调试。
sleep.py示例:
import os os.system('sleep 60m')
图5 预置框架启动方式 - 如果训练作业使用的是自定义镜像
在创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“自定义”,“启动命令”输入“sleep 60m”。这样启动的作业将会持续运行60分钟。您可通过Cloud Shell进入容器进行调试。
图6 自定义启动方式
出错的任务如何卡在运行中状态
cmd || sleep 5h
如果训练失败,则会执行sleep命令,此时可通过Cloud Shell登录容器镜像中调试。
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
在Cloud Shell中调试多节点训练作业时,需要在Cloud Shell中切换work0、work1来实现对不同节点下发启动命令,否则任务会处于等待其他节点的状态。
如何防止Cloud Shell的Session断开
如果需要长时间运行某一个任务,为避免在期间连接断开导致任务失败,可通过使用screen命令使得任务在远程终端窗口运行。
- 如果镜像中未安装screen,则执行“apt-get install screen”安装。
- 创建screen终端。
# 使用 -S 创建一个叫name的screen终端 screen -S name
- 显示已创建的screen终端。
screen -ls There are screens on: 2433.pts-3.linux (2013年10月20日 16时48分59秒) (Detached) 2428.pts-3.linux (2013年10月20日 16时48分05秒) (Detached) 2284.pts-3.linux (2013年10月20日 16时14分55秒) (Detached) 2276.pts-3.linux (2013年10月20日 16时13分18秒) (Detached) 4 Sockets in /var/run/screen/S-root.
- 连接“screen_id”为“2276”的screen终端。
screen -r 2276
- 按下“Ctrl”+“a”+“d”键离开screen终端。离开后,screen会话仍将是活跃的,之后可以随时重新连接。
更多Screen使用说明可参考Screen User's Manual。
通过py-spy工具分析卡死进程的调用栈并结合代码分析定位卡死问题
本文指导用户通过py-spy工具分析卡死进程的调用栈并结合代码分析定位卡死问题。
- 在ModelArts Standard控制台,选择“模型训练>训练作业”。
- 在训练作业详情页面,选择Cloud Shell页签,登录训练容器(训练作业需处于运行中)。
- 安装py-spy工具。
# 通过utils.sh脚本自动配置python环境 source /home/ma-user/modelarts/run/utils.sh # 安装py-spy pip install py-spy # 如果超时提示connection broken by 'ProxyError('Cannot connect to proxy.')则表示用户设置了proxy,需要先关掉 export no_proxy=$no_proxy,repo.myhuaweicloud.com(此处需要替换成对应局点的pip源地址) pip install py-spy
- 查看堆栈。py-spy工具的具体使用方法可参考py-spy官方文档。
# 找到训练进程的PID ps -ef # 查看进程12345的进程堆栈 # 如果是8卡的训练作业,一般用此命令依次去查看主进程起的对应的8个进程的堆栈情况 py-spy dump --pid 12345