华为云AI开发平台ModelArts上传算法至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数据集在obs中分享链接

勾选想要分享的imagenet21k_whole数据集文件夹,点击分享按钮,选择分享链接有效期,填写提取码123456,点击复制链接,记录该链接。

图1 创建obs数据分享链接

准备obsutil_linux_amd64.tar.gz分享链接

点击此处下载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
,而在Linux系统中行每行结尾是
,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致运行报错“$’\r’: command not found”,因此需要去除Shell脚本的\r字符。

父主题: 多机多卡

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家