云服务器内容精选
-
解释说明 训练作业支持使用用户自定义的算法或者AI Gallery订阅的算法创建训练作业。 自定义算法 用户可以自定义算法创建训练作业。需根据实际算法代码情况设置“镜像”、“代码目录”和“启动文件”。选择的AI引擎和编写算法代码时选择的框架必须一致。例如编写算法代码使用的是TensorFlow,则在创建算法时也要选择TensorFlow。 我的算法 用户可以使用算法管理中已导入的自定义算法创建训练作业。 订阅模型 除支持用户自己开发的模型外,ModelArts还提供了从AI Gallery订阅算法,您可以不关注模型开发,直接使用AI Gallery的算法,通过算法参数的调整,得到一个满意的模型。
-
上传镜像 客户端上传镜像,是指在安装了容器引擎客户端的机器上使用docker命令将镜像上传到 容器镜像服务 的镜像仓库。 如果容器引擎客户端机器为云上的E CS 或CCE节点,根据机器所在区域有两种网络链路可以选择: 如果机器与容器镜像仓库在同一区域,则上传镜像走内网链路。 如果机器与容器镜像仓库不在同一区域,则上传镜像走公网链路,机器需要绑定弹性公网IP。 使用客户端上传镜像,镜像的每个layer大小不能大于10G。 上传镜像的容器引擎客户端版本必须为1.11.2及以上。 连接容器 镜像服务 。 登录容器镜像服务控制台。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 此处生成的登录指令有效期为24小时,如果需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的 域名 为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。 登录成功会显示“Login Succeeded”。 在安装容器引擎的机器上执行如下命令,为镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] [镜像名称1:版本名称1]:${image_name}:${image_version}请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]:可在SWR控制台上查询,即1.c中登录指令末尾的域名。 [组织名称]:/${organization_name}请替换为您创建的组织。 [镜像名称2:版本名称2]:${image_name}:${image_version}请替换为您期待的镜像名称和镜像版本。 示例: docker tag ${image_name}:${image_version} swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 示例: docker push swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像完成后,返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。 为什么使用客户端上传镜像失败?
-
上传数据至OBS 已经在OBS上创建好普通OBS桶,请参见创建普通OBS桶。 已经安装obsutil,请参考安装和配置OBS命令行工具。 OBS和训练容器间的数据传输原理可以参考在ModelArts Standard使用run.sh脚本实现OBS和训练容器间的数据传输。 登录Imagenet数据集下载官网地址,下载Imagenet21k数据集:http://image-net.org/ 下载格式转换后的annotation文件:ILSVRC2021winner21k_whole_map_train.txt和ILSVRC2021winner21k_whole_map_val.txt。 下载完成后将上述3个文件数据上传至OBS桶中的imagenet21k_whole文件夹中。上传方法请参考上传数据和算法到OBS。
-
操作流程 准备工作: 购买服务资源(VPC/SFS/OBS/SWR/ECS) 配置权限 创建专属资源池(打通VPC) ECS服务器挂载SFS Turbo存储 在ECS中设置ModelArts用户可读权限 安装和配置OBS命令行工具 (可选)工作空间配置 模型训练: 线下容器镜像构建及调试 上传镜像 上传数据至OBS(首次使用时需要) 上传算法至SFS 使用Notebook进行代码调试 创建多机多卡训练作业
-
上传算法到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_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字符。
-
查找训练作业 当用户使用 IAM 账号登录时,训练作业列表会显示IAM账号下所有训练作业。ModelArts提供查找训练作业功能帮助用户快速查找训练作业。 操作一:单击“只显示自己”按钮,训练作业列表仅显示当前子账号下创建的训练作业。 操作二:按照名称、ID、作业类型、状态、创建时间、算法、资源池等条件筛选的高级搜索。 操作三:单击作业列表右上角“刷新”图标,刷新作业列表。 操作四:自定义列功能设置。 图1 查找训练作业
-
出错的任务如何卡在运行中状态 创建训练作业时,启动命令末尾新增"|| sleep 5h",并启动训练任务,例如下方的cmd为您的启动命令: cmd || sleep 5h 如果训练失败,则会执行sleep命令,此时可通过Cloud Shell登录容器镜像中调试。 在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。
-
请求示例 如下以创建名为“testConfig”,描述为“This is config”的训练作业参数为例。 POST https://endpoint/v1/{project_id}/training-job-configs { "config_name": "testConfig", "config_desc": "This is config", "worker_server_num": 1, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "learning_rate", "value": "0.01" }, { "label": "batch_size", "value": "32" } ], "spec_id": 1, "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1 }
-
响应消息 响应参数如表9所示。 表9 响应参数 参数 参数类型 说明 is_success Boolean 请求是否成功。 error_message String 调用失败时的错误信息。 调用成功时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 job_id Long 训练作业的ID。 job_name String 训练作业的名称 status Int 训练作业的运行状态,详细作业状态列表请查看作业状态参考。 create_time Long 训练作业的创建时间,时间戳格式。 version_id Long 训练作业的版本ID。 resource_id String 训练作业的计费资源ID。 version_name String 训练作业的版本名称。
-
请求示例 如下以创建名为“TestModelArtsJob”,描述为“This is a ModelArts job”为例。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "learning_rate", "value": "0.01" }, { "label": "batch_size", "value": "32" } ], "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "spec_id": 1, "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool" } } 如下以创建名为“TestModelArtsJob2”,创建 自定义镜像 训练。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob2", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "data_url": "/usr/data/", "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "CUSTOM_PA RAM 1", "value": "1" } ], "spec_id": 1, "user_command": "bash -x /home/work/run_train.sh python /home/work/user-job-dir/app/mnist/mnist_softmax.py --data_url /home/work/user-job-dir/app/mnist_data", "user_image_url": "100.125.5.235:20202/jobmng/custom-cpu-base:1.0", "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool", "engine_id": 1 } } 如下以创建名为“TestModelArtsJob3”,创建使用存储卷的训练。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob3", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "learning_rate", "value": "0.01" }, { "label": "batch_size", "value": "32" } ], "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "spec_id": 1, "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool", "volumes": [ { "nfs": { "id": "43b37236-9afa-4855-8174-32254b9562e7", "src_path": "192.168.8.150:/", "dest_path": "/home/work/nas", "read_only": false } }, { "host_path": { "src_path": "/root/work", "dest_path": "/home/mind", "read_only": false } } ] } }
-
响应示例 成功响应示例 { "is_success": true, "job_id": "10", "job_name": "TestModelArtsJob", "status": "1", "create_time": "1524189990635", "version_id": "10", "version_name": "V0001", "resource_id": "jobafd08896" } 失败响应示例 { "is_success": false, "error_message": "Job name:TestModelArtsJob is existed", "error_code": "ModelArts.0103" }
-
处理方法 请您对作业代码进行排查分析,确认是否对训练代码和参数进行过修改。 检查资源分配情况(cpu/mem/gpu/snt9/infiniband)是否符合预期。 通过CloudShell登录到Linux工作页面,检查GPU工作情况: 通过输入“nvidia-smi”命令,查看GPU工作是否异常。 通过输入“nvidia-smi -q -d TEMPERATURE”命令, 查看TEMP参数是否存在异常, 如果温度过高,会导致训练性能下降。
-
处理步骤 进入训练作业详情页,在左侧获取SFS Turbo的名称。 图1 获取SFS Turbo的名称 登录弹性文件服务SFS控制台,在SFS Turbo列表找到训练作业挂载的SFS Turbo,单击名称进入详情页。获取VPC信息、安全组信息和endpoint信息。 VPC信息:SFS Turbo详情页的“虚拟私有云”。 安全组信息:SFS Turbo详情页的“安全组”。 endpoint信息:SFS Turbo详情页的“共享路径”,去除“:/”即为sfs-turbo-endpoint。例如共享路径为“4ab556b5-d689-44f1-9302-24c09daxxxxc.sfsturbo.internal:/”,则sfs-turbo-endpoint为“4ab556b5-d689-44f1-9302-24c09daxxxxc.sfsturbo.internal”。 查看SFS Turbo的VPC网段是否满足如下2个条件。 条件一:SFS Turbo网段不能与192.168.20.0/24重叠,否则会和专属资源池的网段发生冲突,因为专属资源池的默认网段为192.168.20.0/24。专属资源池实际使用的网段可以在资源池的详情页面查看“网络”获取。 条件二:SFS Turbo网段不能与172网段重叠,否则会和容器网络发生冲突,因为容器网络使用的是172网段。 如果不满足条件,则修改SFS Turbo的VPC网段,推荐网段为10.X.X.X。具体操作请参见修改虚拟私有云网段。 如果满足条件,则继续下一步。 查看SFS Turbo的VPC网段的安全组是否被限制了。 在所选专属资源池中新建一个未挂载的SFS Turbo的训练作业,当训练作业处于“运行中”时,通过Cloud Shell功能登录训练作业worker-0实例,使用curl {sfs-turbo-endpoint}:{port}命令检查port是否正常打开,SFS Turbo所需要入方向的端口号为111、445、2049、2051、2052、20048,具体请参见创建文件系统的“安全组”参数。Cloud Shell功能的操作指导请参见使用CloudShell登录训练容器。 是,则修改安全组的配置,具体操作请参见修改安全组规则。 否,则继续下一步。 确认SFS Turbo是否存在异常。 新建一个和SFS Turbo在同一个网段的ECS,用ECS去挂载SFS Turbo,如果挂载失败,则表示SFS Turbo异常。 是,联系SFS服务的技术支持处理。 否,联系ModelArts的技术支持处理。
-
处理方法 需要排查执行命令的启动文件目录是否正确,具体操作如下: 在ModelArts管理控制台,使用训练的自定义镜像创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“自定义”。 例如,当训练代码启动脚本在OBS路径为“obs://bucket-name/app/code/train.py”,创建作业时配置代码目录为“/bucket-name/app/code/”。则代码目录配置完成后,执行如下命令,那么“run_train.sh”将选中的“code”文件夹下载到训练容器的“/home/ma-user/modelarts/user-job-dir”目录中。 bash /home/ma-user/modelarts/user-job-dir/run_train.sh #训练自定义镜像-预置命令场景 运行命令就可以设置为: bash /home/ma-user/modelarts/user-job-dir/run_train.sh python /home/ma-user/modelarts/user-job-dir/code/train.py {python_file_parameter} #训练自定义镜像-预置命令场景
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格