云服务器内容精选

  • 查看训练日志 提交训练作业时,系统将自动在您配置的OBS Path中,使用作业名称创建一个新的文件夹,用于存储训练输出的模型、日志和代码。 例如“train-job-01”作业,提交作业时会在“test-modelarts2”桶下创建一个命名为“train-job-01”的文件夹,且此文件夹下分别新建了三个文件夹“output”、“log”、“code”,分别用于存储输出模型、日志和训练代码。“output”文件夹还会根据您的训练作业版本再创建子文件夹,结构示例如下。 test-modelarts2 |---train-job-01 |---output |---V0001 |---V0002 |---... |---log |---code 查看训练日志有2种方式,在OBS查看和在PyCharm ToolKit工具中查看。 在OBS查看训练日志 训练作业运行结束后,系统将日志存储至对应OBS路径下的log目录中。 在PyCharm工具的ModelArts Explorer区域,双击对应训练作业的版本名称,将在ModelArts Training Job区域展示此训练作业的详细配置。 您可以在详细配置中,找到训练日志输出路径,即OBS路径。 图5 查找日志存储路径 使用当前账号登录OBS管理控制台,根据上一个步骤获取的OBS路径,找到对应文件夹,查看训练作业的详细日志。
  • 如何查看训练作业日志 在训练作业详情页,训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。 预览 系统日志窗口提供训练日志预览功能,如果训练作业有多个节点,则支持查看不同计算节点的日志,通过右侧下拉框可以选择目标节点预览。 图4 查看不同计算节日志 当日志文件过大时,系统日志窗口仅加载最新的部分日志,并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。 图5 查看全量日志 如果全部日志超过500M,可能会引起浏览页面卡顿,建议您直接下载日志查看。 预览链接在生成后的一小时内,支持任何人打开并查看。您可以分享链接至他人。 请注意日志中不能包含隐私内容,否则会造成信息泄露。 下载 训练日志仅保留30天,超过30天会被清理。如果用户需要永久保存日志,请单击系统日志窗口右上角下载按钮下载日志至本地保存,支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮,保存训练日志至指定OBS路径。 针对使用Ascend规格创建的训练作业,部分系统日志暂不支持直接在训练日志窗口下载,请在创建训练作业时指定OBS路径用于保存训练日志。 图6 下载日志 搜索关键字 用户可以在系统日志右上角的搜索框搜索关键字,如图7所示。 图7 搜索关键字 系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志,如果日志加载不全(请关注页面提示)则需要下载或者通过打开全量日志访问链接进行搜索。全量日志访问链接打开的新页面可以通过Ctrl+F进行搜索。 系统日志过滤 图8 系统日志复选框 如果勾选了系统日志复选框,则日志中呈现系统日志和用户日志。如果去勾选,则只显示用户日志。 查看动态路由加速日志 当训练作业的实例数大于或等于3,环境变量配置了“ROUTE_PLAN=true”,且使用的是Ascend资源时,则可以根据Rank-ID查看动态路由加速的日志,还可以查看训练作业是否启用了动态路由加速。 图9 查看动态路由加速日志
  • Ascend场景日志说明 使用Ascend资源运行训练作业时,会产生Ascend相关日志。Ascend训练场景下会生成device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 其中,Ascend训练场景下的普通日志包括训练进程日志、pip-requirement.txt安装日志、ModelArts平台日志、ma-pre-start日志和davincirun日志。 Ascend日志结构举例说明如下: obs://dgg-test-user/snt9-test-cases/log-out/ # 作业日志路径 ├──modelarts-job-9ccf15f2-6610-42f9-ab99-059ba049a41e ├── ascend ├── process_log ├── rank_0 ├── plog # plog日志 ... ├── device-0 # device日志 ... ├── mindspore # MindSpore日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log # 普通日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt # proc log单卡训练日志 表2 Ascend场景下日志说明 日志类型 日志说明 日志文件名 device日志 HOST侧用户进程,在DEVICE侧产生的AICPU、HCCP的日志,回传到HOST侧(训练容器)。 如果出现如下情况,则device日志会获取不到。 节点异常重启 被主动停止的节点 在训练进程结束后,该日志会生成到训练容器中。其中,使用MindSpore预置框架训练的device日志会自动上传到OBS,使用其他预置框架和自定义镜像训练的device日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PRO CES S_ LOG _PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} “~/ascend/log/device-{device-id}/device-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例: device-166_20220718191853764.log plog日志 HOST侧用户进程,在HOST侧产生的日志(例如:ACL /GE)。 plog日志会生成到训练容器中。其中,使用MindSpore预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} “~/ascend/log/plog/plog-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例:plog-166_20220718191843620.log proc log proc log是单卡训练日志重定向文件,方便用户快速定位对应计算节点的日志。使用自定义镜像训练的作业不涉及proc log;使用预置框架训练的proc log日志会生成到训练容器中,且自动保存到OBS。 “[modelarts-job-uuid]-proc-rank-[rank id]-device-[device logic id].txt” device id为本次训练作业的NPU卡编号,取值单卡为0,8卡为0~7。 例如:Ascend规格为 8*Snt9时,device id取值为0~7;Ascend规格为 1*Snt9时,device id取值为0。 rank id为本次训练作业的全局NPU卡编号,取值为0~实例数*卡数-1,单个实例下,rank id与device id取值相同。 样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt MindSpore日志 使用MindSpore+Ascend训练时会产生单独的MindSpore日志。 MindSpore日志会生成到训练容器中。其中,使用MindSpore预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} MindSpore的日志介绍请参见MindSpore官网。 普通训练日志 普通训练日志会生成到训练容器的“/home/ma-user/modelarts/log”目录中,且自动上传到OBS。普通训练日志的类型如下所示。 ma-pre-start日志(Ascend场景特有):如果用户有定义ma-pre-start脚本,会产生该脚本执行日志。 davincirun日志(Ascend场景特有):Ascend训练进程通过davincirun.py文件启动,该启动文件产生的日志。 训练进程日志:用户训练代码的标准输出。 pip-requirement.txt安装日志:如果用户有定义pip-requirement.txt文件,会产生pip包安装日志。 ModelArts平台日志:ModelArts平台产生的系统日志,主要用于运维人员定位平台问题。 合并输出在日志文件modelarts-job-[job id]-[task id].log中。 task id表示实例ID,单节点时取值为worker-0,多节点时取值为worker-0、worker-1、...worker-{n-1},n为实例数。 样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log
  • 训练日志的时效性 从日志产生的时效性上可以分为以下3种情况: 实时日志:训练作业实时运行时产生,在ModelArts训练作业详情页面上可以查看。 历史日志:训练作业结束后,可以在ModelArts训练作业详情页面上查看历史日志,ModelArts系统自动保存30天。 永久日志:转存到OBS桶中的训练日志,在创建训练作业时,打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。 图2 开启永久保存日志开关 实时日志和历史日志都是标准日志输出,内容上没有区别。Ascend训练场景下,永久日志中会包含Ascend日志,这部分日志内容在ModelArts界面上看不到。
  • 普通日志说明 普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts Standard平台日志。 表1 普通日志类型 日志类型 说明 训练进程日志 用户训练代码的标准输出。 pip-requirement.txt安装日志 如果用户有定义pip-requirement.txt文件,会产生pip包安装日志。 ModelArts平台日志 ModelArts平台产生的系统日志,主要用于运维人员定位平台问题。 普通日志的文件格式如下,其中task id为训练作业中的节点id。 统一日志格式:modelarts-job-[job id]-[task id].log 样例:log/modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log 单机训练作业只会生成一个日志文件,单机作业的task id默认为worker-0。 分布式场景下有多个节点日志文件并存,通过task id区分不同节点,例如:worker-0,worker-1等。 训练进程日志、“pip-requirement.txt”安装日志和ModelArts平台日志都包含在普通日志文件“modelarts-job-[job id]-[task id].log”中。 ModelArts平台日志可以通过关键字在训练的普通日志文件“modelarts-job-[job id]-[task id].log”中筛查,筛查关键字有:“[ModelArts Service Log]”或“Platform=ModelArts-Service”。 类型一:[ModelArts Service Log] xxx [ModelArts Service Log][init] download code_url: s3://dgg-test-user/snt9-test-cases/mindspore/lenet/ 类型二:time=“xxx” level=“xxx” msg=“xxx” file=“xxx” Command=xxx Component=xxx Platform=xxx time="2021-07-26T19:24:11+08:00" level=info msg="start the periodic upload task, upload period = 5 seconds " file="upload.go:46" Command=obs/upload Component=ma-training-toolkit Platform=ModelArts-Service
  • 训练日志定义 训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 训练日志包括普通训练日志和Ascend相关日志。 普通日志说明:当使用Ascend之外的资源训练时仅产生普通训练日志,普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。 Ascend场景日志说明:使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 图1 ModelArts训练日志 只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中,无法区分。
  • 检测规则 卡死检测主要是通过监控作业进程的状态和资源利用率来判定作业是否卡死,会启动一个协程来周期性地监控上述两个指标的变化情况。卡死检测有单实例和全实例两种检测规则,是同时生效的。 单实例检测 进程状态:只要训练作业单实例中的进程IO存在变化,就进入下一个检测周期。如果在多个检测周期内,所有进程IO都没有变化,则进入资源利用率检测阶段。 资源利用率:在作业单实例进程IO没有变化的情况下,采集一定时间段内的GPU利用率或NPU利用率,并根据这段时间内的GPU利用率或NPU利用率的方差和中位数来判断资源使用率是否有变化。如果没有变化,则判定作业卡死。 全实例检测 资源利用率:当作业在一段时间内所有实例的GPU利用率或者NPU利用率都没有变化,则判定作业卡死。 系统预置了卡死检测的环境变量“MA_HANG_DETECT_TIME=30”,表示检测到指标异常并持续30分钟则判定作业卡死。如果需要修改卡死检测时间,则可以修改环境变量“MA_HANG_DETECT_TIME”的值,具体操作指导请参见管理训练容器环境变量。 由于检测规则的局限性,当前卡死检测存在一定的误检率。如果是作业代码本身逻辑(如长时间sleep)导致的卡死,请忽略。 如果对于误检有疑问或者卡死问题无法自行解决,您可以前往ModelArts开发者论坛进行提问或者搜索问题。
  • 创建专属资源池 ModelArts提供独享的计算资源,可用于Notebook、训练作业、部署模型。专属资源池不与其他用户共享,更加高效。在使用专属资源池之前,您需要先创建一个专属资源池,操作指导请参考创建Standard专属资源池。 配置“网络”时需要选择已打通VPC的网络。如果需要新建网络和打通VPC可以参考配置Standard专属资源池可访问公网。 “规格类型”和“节点数量”根据训练计划使用的资源选择。
  • 在E CS 服务器挂载SFS Turbo存储 在ECS服务器挂载SFS Turbo存储后,支持将训练所需的数据通过ECS上传至SFS Turbo。 检查云服务环境。 ECS服务器和SFS的共享硬盘在相同的VPC或者对应VPC能够互联。 ECS服务器基础镜像用的是Ubuntu 18.04。 ECS服务器和SFS Turbo在同一子网中。 在ECS服务器中设置华为云镜像源。 sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list 安装NFS客户端,挂载对应盘。 sudo apt-get update sudo apt-get install nfs-common 获取SFS Turbo的挂载命令。 进入弹性文件服务SFS管理控制台。 选择“SFS Turbo”进入文件系统列表,单击文件系统名称,进入详情页面。 在“基本信息”页签获取并记录“Linux挂载命令”。 在ECS服务器中挂载NFS存储。 确认对应目录存在后,输入对应指令,命令如下。 mkdir -p /mnt/sfs_turbo mount -t nfs -o vers=3,nolock 192.168.0.169:/ /mnt/sfs_turbo
  • 在ECS中设置ModelArts用户可读权限 在ModelArts训练平台使用自定义镜像时,默认用户为ma-user、默认用户组为ma-group。如果在训练时调用ECS中的文件,需要修改文件权限改为ma-user可读,否则会出现Permission denied错误。 在Terminal中执行以下命令,在ECS中提前创建好ma-user和ma-group。 default_user=$(getent passwd 1000 | awk -F ':' '{print $1}') || echo "uid: 1000 does not exist" && \ default_group=$(getent group 100 | awk -F ':' '{print $1}') || echo "gid: 100 does not exist" && \ if [ ! -z ${default_group} ] && [ ${default_group} != "ma-group" ]; then \ groupdel -f ${default_group}; \ groupadd -g 100 ma-group; \ fi && \ if [ -z ${default_group} ]; then \ groupadd -g 100 ma-group; \ fi && \ if [ ! -z ${default_user} ] && [ ${default_user} != "ma-user" ]; then \ userdel -r ${default_user}; \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ if [ -z ${default_user} ]; then \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user; \ chmod -R 750 /home/ma-user; \ fi && \ # set bash as default rm /bin/sh && ln -s /bin/bash /bin/sh 执行以下命令,查看创建的用户信息。 id ma-user 如果出现以下信息则表示创建成功。 uid=1000(ma-user) gid=100(ma-group) groups=100(ma-group)
  • 购买服务资源 表1 购买服务资源 服务 使用说明 参考文档 弹性文件服务SFS 弹性文件服务默认为按需计费,即按购买的存储容量和时长收费。您也可以购买包年包月套餐,提前规划资源的使用额度和时长。在欠费时,您需要及时(15天之内)续费以避免您的文件系统资源被清空。 购买的SFS可以用于存储数据和代码。 如何购买弹性文件服务? 容器镜像服务 SWR 容器 镜像服务 分为企业版和共享版。共享版计费项包括存储空间和流量费用,目前均免费提供给您。企业版支持按需计费模式。 购买的SWR可以用于上传自定义镜像。 上传镜像 对象存储服务 OBS 对象存储服务提供按需计费和包年包月两种计费模式,用户可以根据实际需求购买OBS服务。 OBS服务支持以下两种存储方式,单机单卡场景使用文件系统,多机多卡场景使用普通OBS桶。 创建普通OBS桶 创建并行文件系统 虚拟私有云VPC 虚拟私有云可以为您构建隔离的、用户自主配置和管理的虚拟网络环境。 通过打通专属资源池的VPC,可以方便用户跨VPC使用资源,提升资源利用率。 创建虚拟私有云和子网 弹性 云服务器ECS 如果您需要在服务器上部署相关业务,较之物理服务器,弹性云服务器的创建成本较低,并且可以在几分钟之内快速获得基于云服务平台的弹性云服务器设施,并且这些基础设施是弹性的,可以根据需求伸缩。 购买的ECS服务可以用于挂载SFS Turbo存储。 说明: 购买时需注意,ECS需要和SFS买到同一个VPC才能挂载SFS存储。 自定义购买ECS 数据加密 服务DEW 在使用Notebook进行代码调试时,如果要开启“SSH远程开发”功能,需要选择密钥对,便于用户登录弹性云服务器时使用密钥对方式进行身份认证,提升通信安全。密钥对可免费创建。 如何创建密钥对?
  • (可选)工作空间配置 ModelArts支持设置子账号的细粒度权限、不同工作空间之间资源隔离。ModelArts工作空间帮您实现项目资源隔离、多项目分开结算等功能。 如果您开通了企业项目管理服务的权限,可以在创建工作空间的时候绑定企业项目ID,并在企业项目下添加用户组,为不同的用户组设置细粒度权限供组里的用户使用。 如果您未开通企业项目管理服务的权限,也可以在ModelArts创建自己独立的工作空间,但是无法使用跟企业项目相关的功能。 工作空间为白名单功能,使用该功能需要提工单申请开通。
  • 原因分析及处理方法 查看训练作业的“日志”,出现报错“MoxFileNotExistsException(resp, 'file or directory or bucket not found.')”。 原因:Moxing在进行文件复制时,未找到train_data_obs目录。 处理建议:修改train_data_obs目录为正确地址,重新启动训练作业。 另外在Moxing下载OBS对象过程中,不要删除相应OBS目录下的对象,否则Moxing在下载到被删除的对象时会下载失败。 查看训练作业的“日志”,出现报错“CUDA capability sm_80 is not compatible with the current PyTorch installation.The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70'”。 原因:训练作业使用的镜像CUDA版本只支持sm_37、sm_50、sm_60和sm_70的加速卡,不支持sm_80。 处理建议:使用自定义镜像创建训练作业,并安装高版本的cuda以及对应的PyTorch版本。 查看训练作业的“日志”,出现报错“ERROR:root:label_map.pbtxt cannot be found. It will take a long time to open every annotation files to generate a tmp label_map.pbtxt.”。 如果使用的是订阅的算法,建议先检查数据的标签是否有问题。 如果使用的是物体检测类算法,建议检查数据的label框是否为非矩形。 物体检测类算法仅支持矩形label框。 查看训练作业的“日志”,出现报错“RuntimeError: The server socket has failed to listen on any local network address. The server socket has failed to bind to [::]:29500 (errno: 98 - Address already in use). The server socket has failed to bind to 0.0.0.0:29500 (errno: 98 - Address already in use).”。 原因:训练作业的端口号有冲突。 处理建议:更改代码中的端口号,重启训练作业。 查看训练作业的“日志”,出现报错“WARNING: root: Retry=7, Wait=0.4, Times tamp=1697620658.6282516”。 原因:Moxing版本太低。 处理建议:联系技术支持将Moxing版本升级至2.1.6及以上版本。
  • 在ModelArts Standard上运行GPU训练作业的场景介绍 不同AI模型训练所需要的数据量和算力不同,在训练时选择合适的存储及训练方案可提升模型训练效率与资源性价比。ModelArts Standard支持单机单卡、单机多卡和多机多卡的训练场景,满足不同AI模型训练的要求。 ModelArts Standard提供了公共资源池和专属资源池,专属资源池不与其他用户共享资源,更加高效。针对企业多用户场景,推荐使用专属资源池开展AI模型训练。 本文提供了端到端案例指导,帮助您快速了解如何在ModelArts Standard上选择合适的训练方案并进行模型训练。 针对不同的数据量和算法情况,推荐以下训练方案: 单机单卡:小数据量(1G训练数据)、低算力场景(1卡Vnt1),存储方案推荐使用“OBS的并行文件系统(存放数据和代码)”。 单机多卡:中等数据量(50G左右训练数据)、中等算力场景(8卡Vnt1),存储方案推荐使用“SFS(存放数据和代码)”。 多机多卡:大数据量(1T训练数据)、高算力场景(4台8卡Vnt1),存储方案推荐使用“SFS(存放数据)+普通OBS桶(存放代码)”,采用分布式训练。 当使用SFS+OBS的存储方案可以实现存储加速,该方案的端到端实践案例请参见面向AI场景使用OBS+SFS Turbo的存储加速实践。 表1 不同场景所需服务及购买推荐 场景 OBS SFS SWR DEW ModelArts VPC ECS EVS 单机单卡 按需购买(并行文件系统) × 免费 免费 包月购买 免费 × 按需购买 单机多卡 × 包月购买 (HPC型500G) 免费 免费 包月购买 免费 包月购买 (Ubuntu 18.04,建议不小于2U8G,本地存储空间100G,带EIP全动态BGP,按流量10M带宽) × 多机多卡 按需购买 (普通OBS桶) 包月购买 (HPC型500G) 免费 免费 包月购买 免费 包月购买 (Ubuntu 18.04,建议不小于2U8G,本地存储空间100G,带EIP全动态BGP,按流量10M带宽) × 表2 开源数据集训练效率参考 算法及数据 资源规格 Epoch数 预计运行时长(hh:mm:ss) 算法:PyTorch官方针对ImageNet的样例 数据:ImageNet分类数据子集 1机1卡Vnt1 10 0:05:03 算法:YOLOX 数据:COCO2017 1机1卡Vnt1 10 03:33:13 1机8卡Vnt1 10 01:11:48 4机8卡Vnt1 10 0:36:17 算法:Swin-Transformer 数据:ImageNet21K 1机1卡Vnt1 10 197:25:03 1机8卡Vnt1 10 26:10:25 4机8卡Vnt1 10 07:08:44 表3 训练各步骤性能参考 步骤 说明 预计时长 镜像下载 首次下载镜像的时间(25G)。 8分钟 资源调度 点创建训练作业开始到变成运行中的时间(资源充足、镜像已缓存)。 20秒 训练列表页打开 已有50条训练作业,单击训练模块后的时间。 6秒 日志加载 作业运行中,已经输出1兆的日志文本,单击训练详情页面需要多久加载出日志。 2.5秒 训练详情页 作业运行中,没有用户日志情况下,在ModelArts控制台主页面单击训练详情页面后加载页面内容。 2.5秒 JupyterLab页面 进入JupyterLab页面后加载页面内容。 0.5秒 Notebook列表页 已有50个Notebook实例,在ModelArts控制台主页面单击开发环境后的时间。 4.5秒 镜像下载时间受节点规格、节点硬盘类型(高IO/普通IO)、是否SSD等因素影响,以上数据仅供参考。 父主题: 基于ModelArts Standard运行GPU训练作业
  • 上传算法到SFS 下载Swin-Transformer代码。 git clone --recursive https://github.com/microsoft/Swin-Transformer.git 修改lr_scheduler.py文件,把第27行:t_mul=1. 注释掉。 修改data文件夹下imagenet22k_dataset.py,把第28行:print("ERROR IMG LOADED: ", path) 注释掉。 修改data文件夹下的build.py文件,把第112行:prefix = 'ILSVRC2011fall_whole',改为prefix = 'ILSVRC2021winner21k_whole'。 在Swin-Transformer目录下创建requirements.txt指定python依赖库: # requirements.txt内容如下 timm==0.4.12 termcolor==1.1.0 yacs==0.1.8 准备run.sh文件中所需要的obs文件路径。 准备imagenet数据集的分享链接。 勾选要分享的imagenet21k_whole数据集文件夹,单击分享按钮,选择分享链接有效期,自定义提取码,例如123456,单击“复制链接”,记录该链接。 准备“obsutil_linux_amd64.tar.gz”的分享链接。 参考下载和安装obsutil下载“obsutil_linux_amd64.tar.gz”,将其上传至OBS桶中,设置为公共读。单击属性,单击复制链接。 链接样例如下: https://${bucketname_name}.obs.cn-north-4.myhuaweicloud.com/${folders_name}/pytorch.tar.gz 在Swin-Transformer目录下,创建运行脚本run.sh。 脚本中的"SRC_DATA_PATH=${imagenet数据集在obs中分享链接}",需要替换为上一步中的imagenet21k_whole文件夹分享链接。 脚本中的"https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz",需要替换为上一步中obsutil_linux_amd64.tar.gz在OBS上的路径(需将文件设置为公共读)。 单机单卡运行脚本: # 在代码主目录下创建一个run.sh,内容如下 #!/bin/bash # 从obs中下载数据到本地SSD盘 DIS_DATA_PATH=/cache SRC_DATA_PATH=${imagenet数据集在obs中分享链接} OBSUTIL_PATH=https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz mkdir -p $DIS_DATA_PATH && cd $DIS_DATA_PATH && wget $OBSUTIL_PATH && tar -xzvf obsutil_linux_amd64.tar.gz && $DIS_DATA_PATH/obsutil_linux_amd64*/obsutil share-cp $SRC_DATA_PATH $DIS_DATA_PATH/ -ac=123456 -r -f -j 256 && cd - IMAGE_DATA_PATH=$DIS_DATA_PATH/imagenet21k_whole MASTER_PORT="6061" /home/ma-user/anaconda3/envs/pytorch/bin/python -m torch.distributed.launch --nproc_per_node=1 --master_addr localhost --master_port=$MASTER_PORT main.py --data-path $IMAGE_DATA_PATH --cfg ./configs/swin/swin_base_patch4_window7_224_22k.yaml --local_rank 0 多机多卡运行脚本: # 创建run.sh #!/bin/bash # 从obs中下载数据到本地SSD盘 DIS_DATA_PATH=/cache SRC_DATA_PATH=${imagenet数据集在obs中分享链接} OBSUTIL_PATH=https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz mkdir -p $DIS_DATA_PATH && cd $DIS_DATA_PATH && wget $OBSUTIL_PATH && tar -xzvf obsutil_linux_amd64.tar.gz && $DIS_DATA_PATH/obsutil_linux_amd64*/obsutil share-cp $SRC_DATA_PATH $DIS_DATA_PATH/ -ac=123456 -r -f -j 256 && cd - IMAGE_DATA_PATH=$DIS_DATA_PATH/imagenet21k_whole MASTER_ADDR=$(echo ${VC_WORKER_HOSTS} | cut -d "," -f 1) MASTER_PORT="6060" NNODES="$VC_WORKER_NUM" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" /home/ma-user/anaconda3/envs/pytorch/bin/python -m torch.distributed.launch --nnodes=$NNODES --node_rank=$NODE_RANK --nproc_per_node=$NGPUS_PER_NODE --master_addr $MASTER_ADDR --master_port=$MASTER_PORT main.py --data-path $IMAGE_DATA_PATH --cfg ./configs/swin/swin_base_patch4_window7_224_22k.yaml 推荐先使用单机单卡运行脚本,待正常运行后再改用多机多卡运行脚本。 多机多卡run.sh中的“VC_WORKER_HOSTS”、“VC_WORKER_NUM”、“VC_TASK_INDEX”、“MA_NUM_GPUS”为ModelArts训练容器中预置的环境变量。训练容器环境变量详细介绍可参考查看训练容器环境变量。 通过obsutils,将代码文件夹放到OBS上,然后通过OBS将代码传至SFS相应目录中。 在SFS中将代码文件Swin-Transformer-main设置归属为ma-user。 chown -R ma-user:ma-group Swin-Transformer 执行以下命令,去除Shell脚本的\r字符。 cd Swin-Transformer sed -i 's/\r//' run.sh Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致运行报错“$'\r': command not found”,因此需要去除Shell脚本的\r字符。