更新时间:2025-03-04 gmt 08:00

使用cloud shell调试生产训练作业-九游平台

modelarts standard提供了cloud shell,可以登录运行中的容器,用于调试生产环境的训练作业。

约束限制

仅专属资源池支持使用cloud shell登录训练容器,且训练作业必须处于“运行中”状态。

前提条件:给子账号配置允许使用cloud shell的权限

  1. 使用主用户账号登录华为云的管理控制台,单击右上角用户名,在下拉框中选择“统一身份认证”,进入统一身份认证(iam)服务。
  2. 在统一身份认证服务页面的左侧导航选择权限管理 > 权限,单击右上角的“创建自定义策略”按如下要求设置完成后单击“确定”
    • “策略名称”:设置自定义策略名称,例如:允许通过cloud shell访问运行中的训练作业。
    • “策略配置方式”:选择可视化视图。
    • “策略内容”:允许,云服务中搜索modelarts服务并选中,操作列中搜索关键词modelarts:trainjob:exec并选中,所有资源选择默认值。
  3. 在统一身份认证服务页面的左侧导航选择“用户组”,在用户组页面查找待授权的用户组名称,在右侧的操作列单击“授权”,勾选步骤2创建的自定义策略,单击“下一步”,选择授权范围方案,单击“确定”

    此时,该用户组下的所有用户均有权限通过cloud shell登录运行中的训练作业容器。

    如果没有用户组,也可以创建一个新的用户组,并通过“用户组管理”功能添加用户,并配置授权。如果指定的子用户没有在用户组中,也可以通过“用户组管理”功能增加用户。

使用cloud shell

  1. 参考前提条件:给子账号配置允许使用cloud shell的权限,完成配置。
  2. 在modelarts管理控制台的左侧导航栏中选择“模型训练 > 训练作业”
  3. 在训练作业列表中,单击作业名称进入训练作业详情页面。
  4. 在训练作业详情页面,单击“cloud shell”页签,登录训练容器。

    连接成功后,cloud shell界面提示如下。

    图1 cloud shell界面

    当作业处于非运行状态或权限不足时会导致无法使用cloud shell,请根据提示定位原因即可。

    图2 报错提示
    部分用户登录cloud shell界面时,可能会出现路径显示异常情况,此时在cloud shell中单击回车键即可恢复正常。
    图3 路径异常

如何使训练作业保持运行中状态

由于需要训练作业处于“运行中”状态才能登录cloud shell,因此本文介绍如何使训练作业保持运行中状态,方便您快速通过cloud shell登录运行中的训练容器。

通过sleep命令使训练作业保持运行

  • 如果训练作业使用的是预置框架:

    在创建训练作业时,“创建方式”选择“自定义算法”“启动方式”选择“预置框架”,代码目录中新增sleep.py并将此脚本作为“启动文件”。这样启动的作业将会持续运行60分钟。您可通过cloud shell进入容器进行调试。

    sleep.py示例:

    import os
    os.system('sleep 60m')
    图4 预置框架启动方式
  • 如果训练作业使用的是自定义镜像

    在创建训练作业时,“创建方式”选择“自定义算法”“启动方式”选择“自定义”“启动命令”输入“sleep 60m”。这样启动的作业将会持续运行60分钟。您可通过cloud shell进入容器进行调试。

    图5 自定义启动方式

出错的任务如何卡在运行中状态

创建训练作业时,启动命令末尾新增"|| sleep 5h",并启动训练作业,例如下方的cmd为您的启动命令:
cmd || sleep 5h

如果训练失败,则会执行sleep命令,此时可通过cloud shell登录容器镜像中调试。

在cloud shell中调试多节点训练作业时,需要在cloud shell中切换work0、work1来实现对不同节点下发启动命令,否则任务会处于等待其他节点的状态。

如何防止cloud shell的session断开

如果需要长时间运行某一个任务,为避免在期间连接断开导致任务失败,可通过使用screen命令使得任务在远程终端窗口运行。

  1. 如果镜像中未安装screen,则执行“apt-get install screen”安装。
  2. 创建screen终端。
    # 使用 -s 创建一个叫name的screen终端 
    screen -s name
  3. 显示已创建的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.  
  4. 连接“screen_id”“2276”的screen终端。
    screen -r 2276
  5. 按下“ctrl” “a” “d”键离开screen终端。离开后,screen会话仍将是活跃的,之后可以随时重新连接。

更多screen使用说明可参考。

通过py-spy工具分析卡死进程的调用栈并结合代码分析定位卡死问题

本文指导用户通过py-spy工具分析卡死进程的调用栈并结合代码分析定位卡死问题。

  1. 在modelarts standard控制台,选择“模型训练>训练作业”。
  2. 在训练作业详情页面,选择cloud shell页签,登录训练容器(训练作业需处于运行中)。
  3. 安装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
  4. 查看堆栈。py-spy工具的具体使用方法可参考。
    # 找到训练进程的pid
    ps -ef
    # 查看进程12345的进程堆栈
    # 如果是8卡的训练作业,一般用此命令依次去查看主进程起的对应的8个进程的堆栈情况
    py-spy dump --pid 12345

相关文档

网站地图