华为云用户手册

  • Vnt1机型软件版本建议:gpu driver version : 470.57.02 gpu driver version : 470.57.02(GPU驱动在宿主机中安装,镜像中无需安装) cuda runtime version : 10.2(PyTorch自带,无需关心) cudnn version : 7.6(PyTorch自带,无需关心) pytorch version : 1.X.X-cu102
  • Vnt1机型软件版本建议:gpu driver version : 440.95.01 gpu driver version : 440.95.01(GPU驱动在宿主机中安装,镜像中无需安装) cuda runtime version : 10.2(PyTorch自带,无需关心) cudnn version : 7.6.x(PyTorch自带,无需关心) pytorch version : 1.x.x+cu102
  • 上传算法至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字符。 父主题: 多机多卡
  • 操作步骤 登录Imagenet数据集下载官网地址,下载Imagenet21k数据集:http://image-net.org/ 下载格式转换后的annotation文件:ILSVRC2021winner21k_whole_map_train.txt和ILSVRC2021winner21k_whole_map_val.txt。 下载完成后将上述3个文件数据上传至OBS桶中的imagenet21k_whole文件夹中。上传方法请参考上传数据和算法至OBS(首次使用时需要)。
  • 背景信息 Notebook使用涉及到计费,具体收费项如下: 处于“运行中”状态的Notebook,会消耗资源,产生费用。根据您选择的资源不同,收费标准不同,价格详情请参见产品价格详情。当您不需要使用Notebook时,建议停止Notebook,避免产生不必要的费用。 创建Notebook时,如果选择使用云硬盘EVS存储配置,云硬盘EVS会一直收费,建议及时停止并删除Notebook,避免产品不必要的费用。 在创建Notebook时,默认会开启自动停止功能,在指定时间内停止运行Notebook,避免资源浪费。 只有处于“运行中”状态的Notebook,才可以执行打开、停止操作。 一个帐户最多创建10个Notebook。
  • 准备数据 登录coco数据集下载官网地址:https://cocodataset.org/#download 下载coco2017数据集的Train(18GB)、Val images(1GB)、Train/Val annotations(241MB),分别解压后并放入coco文件夹中。 下载完成后,将数据上传至SFS相应目录中。由于数据集过大,推荐先通过obsutil工具将数据集传到OBS桶后,再将数据集迁移至SFS。 在本机机器上运行,通过obsutil工具将本地数据集传到OBS桶。 # 将本地数据传至OBS中 # ./obsutil cp ${数据集所在的本地文件夹路径} ${存放数据集的obs文件夹路径} -f -r # 例如 ./obsutil cp ./coco obs://your_bucket/ -f -r 登录E CS 服务器,通过obsutil工具将数据集迁移至SFS,样例代码如下: # 将OBS数据传至SFS中 # ./obsutil cp ${数据集所在的obs文件夹路径} ${SFS文件夹路径} -f -r # 例如 ./obsutil cp obs://your_bucket/coco/ /mnt/sfs_turbo/ -f -r /mnt/sfs_turbo/coco文件夹内目录结构如下: coco |---annotations |---train2017 |---val2017 更多obsutil的操作,可参考obsutil简介。 将文件设置归属为ma-user: chown -R ma-user:ma-group coco
  • 监控资源 用户可以通过资源占用情况窗口查看计算节点的资源使用情况,最多可显示最近三天的数据。在资源占用情况窗口打开时,会定期向后台获取最新的资源使用率数据并刷新。 操作一:如果训练作业使用多个计算节点,可以通过实例名称的下拉框切换节点。 操作二:单击图例“cpuUsage”、“gpuMemUsage”、“gpuUtil”、“memUsage”“npuMemUsage”、“npuUtil”、可以添加或取消对应参数的使用情况图。 操作三:鼠标悬浮在图片上的时间节点,可查看对应时间节点的占用率情况。 表1 参数说明 参数 说明 cpuUsage cpu使用率。 gpuMemUsage gpu内存使用率。 gpuUtil gpu使用情况。 memUsage 内存使用率。 npuMemUsage npu内存使用率。 npuUtil npu使用情况。 父主题: 单机单卡
  • 背景信息 Notebook使用涉及到计费,具体收费项如下: 处于“运行中”状态的Notebook,会消耗资源,产生费用。根据您选择的资源不同,收费标准不同,价格详情请参见产品价格详情。当您不需要使用Notebook时,建议停止Notebook,避免产生不必要的费用。 创建Notebook时,如果选择使用云硬盘EVS存储配置,云硬盘EVS会一直收费,建议及时停止并删除Notebook,避免产品不必要的费用。 在创建Notebook时,默认会开启自动停止功能,在指定时间内停止运行Notebook,避免资源浪费。 只有处于“运行中”状态的Notebook,才可以执行打开、停止操作。 一个帐户最多创建10个Notebook。
  • 多机多卡 资源购买: 购买 虚拟私有云VPC 购买弹性文件服务SFS 购买 对象存储服务 OBS 购买 容器镜像服务 SWR 创建网络 购买ModelArts专属资源池 购买弹性 云服务器ECS 基本配置: 权限配置 专属资源池VPC打通 ECS服务器挂载SFS Turbo存储 在ECS中创建ma-user和ma-group obsutils安装和配置 (可选)工作空间配置 训练: 上传数据至OBS(首次使用时需要) 上传算法至SFS 创建训练任务
  • 准备数据 单击下载动物数据集至本地,并解压。 通过obsutil将数据集上传至OBS桶中。 ./obsutil cp ./dog_cat_1w obs://${your_obs_buck}/demo/ -f -r OBS支持多种文件上传方式,当文件少于100个时,可以在OBS Console中上传,当文件大于100个时,推荐使用工具,推荐OBS Browser+(win)、obsutil(linux)。上述例子为obsutil使用方法。
  • 操作步骤 连接容器 镜像服务 。 登录容器镜像服务控制台。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“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} 上传镜像完成后,返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。
  • (可选)工作空间配置 ModelArts支持设置子用户的细粒度权限、不同工作空间之间资源隔离。ModelArts工作空间帮您实现项目资源隔离、多项目分开结算等功能。 如果您开通了企业项目管理服务的权限,可以在创建工作空间的时候绑定企业项目ID,并在企业项目下添加用户组,为不同的用户组设置细粒度权限供组里的用户使用。 如果您未开通企业项目管理服务的权限,也可以在ModelArts创建自己独立的工作空间,但是无法使用跟企业项目相关的功能。 工作空间为白名单功能,使用该功能需要提工单申请开通。 父主题: 基本配置
  • obsutil安装和配置 obsutil是用于访问、管理对象存储服务OBS的命令行工具,使用该工具可以对OBS进行常用的配置管理操作,如创建桶、上传文件/文件夹、下载文件/文件夹、删除文件/文件夹等。 obsutil安装和配置的具体操作指导请参见obsutils快速入门。 操作命令中的AK/SK要换成用户实际获取的AK/SK,Endpoint可以参考终端节点(Endpoint)和访问域名获取。 父主题: 基本配置
  • 在ECS中创建ma-user和ma-group 在ModelArts训练平台使用的 自定义镜像 时,默认用户为ma-user、默认用户组为ma-group。如果在训练时调用ECS中的文件,需要修改文件权限改为ma-user可读,否则会出现Permission denied错误,因此需要在ECS中提前创建好ma-user和ma-group。 在terminal中执行以下命令: 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) 父主题: 基本配置
  • 操作步骤 在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
  • 专属资源池VPC打通 通过打通VPC,可以方便用户跨VPC使用资源,提升资源利用率。 在“网络”页签,单击网络列表中某个网络操作列的“打通VPC”。 图1 打通VPC 在打通VPC弹框中,打开“打通VPC”开关,在下拉框中选择可用的VPC和子网。 需要打通的对端网络不能和当前网段重叠。 图2 打通VPC参数选择 如果没有VPC可选,可以单击右侧的“创建虚拟私有云”,跳转到网络控制台,申请创建虚拟私有云。 如果没有子网可选,可以单击右侧的“创建子网”,跳转到网络控制台,创建可用的子网。 支持1个VPC下多个子网的打通,若VPC下有多个子网,会显示“+”,您可单击“+”即可添加子网(上限10个)。 若需要使用打通VPC的方式实现专属资源池访问公网,由于要访问的公网地址不确定,一般是建议用户在VPC中创建SNAT。此场景下,在打通VPC后,专属资源池中作业访问公网地址,默认不能转发到用户VPC的SNAT,需要提交工单联系技术支持在专属资源池VPC的路由中添加指向对等连接的缺省路由。当您开启默认路由后,在打通VPC时,会将ModelArts网络0.0.0.0/0路由作为默认路由,此时无需提交工单添加缺省路由即可完成网络配置。 父主题: 基本配置
  • 资源选择推荐 不同AI模型训练所需要的数据量和算力不同,在训练时选择合适存储及训练方案可提升模型训练效率与资源性价比。ModelArts支持单机单卡、单机多卡和多机多卡的训练场景,满足不同AI模型训练的要求。针对第一次使用ModelArts的用户,本文提供端到端案例指导,帮助您快速了解如何在ModelArts上选择合适的训练方案并进行模型训练。 针对不同的数据量和算法情况,推荐以下训练方案: 单机单卡:小数据量(1G训练数据)、低算力场景(1卡Vnt1),存储方案使用“OBS的并行文件系统(存放数据和代码)”。 单机多卡:中等数据量(50G左右训练数据)、中等算力场景(8卡Vnt1),存储方案使用“SFS(存放数据和代码)”。 多机多卡:大数据量(1T训练数据)、高算力场景(4台8卡Vnt1),存储方案使用“SFS(存放数据)+普通OBS桶(存放代码)”,采用分布式训练。 表1 不同场景所需服务及购买推荐 场景 OBS SFS SWR DEW ModelArts VPC ECS EVS 单机单卡 按需购买。(并行文件系统) × 免费。 免费。 包月购买。 免费。 × 按需购买。 单机多卡 × 包月购买。 (HPC型500G) 免费。 免费。 包月购买。 免费。 包月购买。 (Ubuntu 18.04,建议不小于2U8G,本地存储空间100G,带EIP全动态BGP,按流量10M带宽) × 多机多卡 按需购买。 (普通OBS桶) 包月购买。 (HPC型500G) 免费。 免费。 包月购买。 免费。 包月购买。 (建议不小于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等因素影响,以上数据仅供参考。 父主题: 专属资源池训练
  • 测试用户权限 由于权限配置需要等待15-30分钟生效,建议在配置完成后,等待30分钟,再执行如下验证操作。 使用用户组02中任意一个子用户登录ModelArts管理控制台。在登录页面,请使用“ IAM 用户登录”方式进行登录。 首次登录会提示修改密码,请根据界面提示进行修改。 验证ModelArts权限。 在左上角的服务列表中,选择ModelArts服务,进入ModelArts管理控制台。 在ModelArts管理控制台,可正常创建Notebook、训练作业、注册镜像。 验证SFS权限。 在左上角的服务列表中,选择SFS服务,进入SFS管理控制台。 在SFS管理控制台,在SFS Turbo中单击右上角的“创建文件系统”,如果能正常打开页面,表示当前用户具备SFS的操作权限。 验证ECS权限。 在左上角的服务列表中,选择ECS服务,进入ECS管理控制台。 在ECS管理控制台,单击右上角的“购买弹性云服务器”,如果能正常打开页面,表示当前用户具备ECS的操作权限。 验证VPC权限。 在左上角的服务列表中,选择VPC服务,进入VPC管理控制台。 在VPC管理控制台,单击右上角的“创建虚拟私有云”,如果能正常打开页面,表示当前用户具备VPC的操作权限。 验证DEW权限。 在左上角的服务列表中,选择DEW服务,进入DEW管理控制台。 在DEW管理控制台,在“密钥对管理”-“私有密钥对”中单击“创建密钥对”,如果能正常打开页面,表示当前用户具备DEW的操作权限。 验证OBS权限。 在左上角的服务列表中,选择OBS服务,进入OBS管理控制台。 在OBS管理控制台,单击右上角的“创建桶”,如果能正常打开页面,表示当前用户具备OBS的操作权限。 验证SWR权限。 在左上角的服务列表中,选择SWR服务,进入SWR管理控制台。 在SWR管理控制台,如果能正常打开页面,表示当前用户具备SWR的操作权限。 单击右上角的“上传镜像”,如果能看到授权的组织,表示当前用户具备SWR组织权限。 父主题: 权限配置
  • 配置SWR组织权限 IAM用户创建后,需要管理员在组织中为用户添加授权,使IAM用户对组织内所有镜像享有读取/编辑/管理的权限。 只有具备“管理”权限的帐号和IAM用户才能添加授权。 登录容器镜像服务控制台。 在左侧菜单栏选择“组织管理”,单击组织名称。 在“用户”页签下单击“添加授权”,在弹出的窗口中为IAM用户选择权限,然后单击“确定”。 SWR授权管理详情可参考授权管理。 如果给子用户的SWR授权不是SWR Admin权限,则需要继续配置SWR组织权限。 父主题: 权限配置
  • 配置ModelArts委托权限 给用户配置ModelArts委托授权,允许ModelArts服务在运行时访问OBS等依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“权限管理”,进入“权限管理”页面,单击“添加授权”。 在弹出的“添加授权”窗口中,选择: 授权对象类型:所有用户 委托选择:新增委托 权限配置:普通用户 选择完成后勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 图1 配置委托访问授权 完成配置后,在ModelArts控制台的权限管理列表,可查看到此账号的委托配置信息。 图2 查看委托配置信息 父主题: 权限配置
  • 权限列表 为了便于理解权限相关内容,建议先阅读ModelArts权限管理基本概念。 表1 服务授权列表 待授权的服务 适用场景 ModelArts 授予子用户使用ModelArts服务的权限。 ModelArts CommonOperations没有任何专属资源池的创建、更新、删除权限,只有使用权限。推荐给子用户配置此权限。 如果需要给子用户开通专属资源池的创建、更新、删除权限,此处要勾选ModelArts FullAccess,请谨慎配置。 ModelArts FullAccess权限和ModelArts CommonOperations权限只能二选一,不能同时选。 SFS弹性文件服务 弹性文件服务SFS Turbo的所有权限。使用SFS服务时需要配置。 ECS弹性云服务器 弹性云服务器所有权限。使用ECS服务时需要配置。 SWR容器镜像 仓库 容器镜像仓库所有权限。使用SWR服务时需要配置。同时,还需开通SWR组织权限。 VPC虚拟私有云 子用户在创建ModelArts的专属资源池过程中,如果需要开启自定义网络配置,需要配置VPC权限。 DEW密钥管理服务 当子用户使用ModelArts Notebook的SSH远程功能时,需要配置子用户密钥管理服务的使用权限。 OBS对象存储服务 具有对象存储服务(OBS)查看桶列表、获取桶元数据、列举桶内对象、查询桶位置、上传对象、获取对象、删除对象、获取对象ACL等对象基本操作权限。
  • falcon-11B模型 在训练开始前,针对falcon-11B模型中的tokenizer文件,需要替换代码。替换文件{work_dir}/tokenizers/falcon-11B/config.json,具体步骤如下: 复制代码包目录下config.json至falcon-11B的tokenizer目录下,样例命令: 进入到代码目录下{work_dir}/llm_train/LLaMAFactory/ascendcloud_patch/models/falcon2/如: cd /home/ma-user/ws/llm_train/LLaMAFactory/ascendcloud_patch/models/falcon2/ 复制config.json文件至加载的权重文件/tokenizer目录下,参考路径上传代码和权重文件到工作环境中的步骤3。 cp -f config.json {work_dir}/tokenizers/falcon-11B/
  • 模型NPU卡数取值表 不同模型推荐的训练参数和计算规格要求如表1所示。规格与节点数中的1*节点 & 4*Ascend表示单机4卡,以此类推 表1 模型NPU卡数取值表 支持模型 支持模型参数量 文本序列长度 训练类型 Zero并行 规格与节点数 llama3 70B cutoff_len=4096 lora per_device_train_batch_size=1 2*节点 & 8*Ascend sft per_device_train_batch_size=1 8*节点 & 8*Ascend cutoff_len=8192 lora per_device_train_batch_size=1 2*节点 & 8*Ascend sft per_device_train_batch_size=1 8*节点 & 8*Ascend 8B cutoff_len=4096/8192 lora sft per_device_train_batch_size=1 1*节点 & 1*Ascend 1*节点 & 4*Ascend Qwen2 72B cutoff_len=4096 lora sft per_device_train_batch_size=1 2*节点 & 8*Ascend 4*节点 & 8*Ascend cutoff_len=8192 lora sft per_device_train_batch_size=1 2*节点 & 8*Ascend 8*节点 & 8*Ascend 7B cutoff_len=4096 lora/sft per_device_train_batch_size=1 1*节点 & 4*Ascend cutoff_len=8192 lora/sft per_device_train_batch_size=1 1*节点 & 8*Ascend 0.5/1.5B cutoff_len=4096/8192 lora/sft per_device_train_batch_size=1 1*节点 & 1*Ascend Qwen1.5 0.5B/1.8B cutoff_len=4096/8192 lora/sft per_device_train_batch_size=1 1*节点 & 1*Ascend 4B cutoff_len=4096/8192 sft per_device_train_batch_size=1 1*节点 & 4*Ascend cutoff_len=4096/8192 lora per_device_train_batch_size=1 1*节点 & 1*Ascend 7B cutoff_len=4096/8192 lora per_device_train_batch_size=1 1*节点 & 1*Ascend cutoff_len=4096/8192 sft per_device_train_batch_size=1 1*节点 & 8*Ascend 14B cutoff_len=4096/8192 sft per_device_train_batch_size=1 1*节点 & 8*Ascend cutoff_len=4096/8192 lora per_device_train_batch_size=1 1*节点 & 1*Ascend falcon2 11B cutoff_len=4096/8192 sft per_device_train_batch_size=1 1*节点 & 8*Ascend cutoff_len=4096/8192 lora per_device_train_batch_size=1 1*节点 & 1*Ascend Yi 6B cutoff_len=4096/8192 sft per_device_train_batch_size=1 1*节点 & 4*Ascend cutoff_len=4096/8192 lora per_device_train_batch_size=1 1*节点 & 1*Ascend 34B cutoff_len=4096 sft lora per_device_train_batch_size=1 2*节点 & 8*Ascend 1*节点 & 2*Ascend cutoff_len=8192 sft lora per_device_train_batch_size=1 2*节点 & 8*Ascend 1*节点 & 4*Ascend 父主题: 训练脚本说明
  • 各个模型深度学习训练加速框架的选择 LlamaFactory框架使用两种训练框架: DeepSpeed和Accelerate都是针对深度学习训练加速的工具,但是它们的实现方式和应用场景有所不同。 DeepSpeed是一种深度学习加速框架,主要针对大规模模型和大规模数据集的训练。DeepSpeed的核心思想是在单个GPU上实现大规模模型并行训练,从而提高训练速度。DeepSpeed提供了一系列的优化技术,如ZeRO内存优化、分布式训练等,可以帮助用户更好地利用多个GPU进行训练 Accelerate是一种深度学习加速框架,主要针对分布式训练场景。Accelerate的核心思想是通过模型并行和数据并行来实现分布式训练,从而提高训练速度。Accelerate提供了一系列的优化技术,如模型切分、梯度累积等,可以帮助用户更好地利用多个节点进行训练。 各个模型选用加速框架 表1 模型加速框架建议表 序号 模型参数量 文本序列长度 优化工具(Deepspeed&Accelerator) 0 小于4B cutoff_len=4096 Deepspeed-ZeRO-0 cutoff_len=8192 Deepspeed-ZeRO-0 1 小于7B cutoff_len=4096 Deepspeed-ZeRO-1 cutoff_len=8192 Deepspeed-ZeRO-1 2 7B至13B cutoff_len=4096 Deepspeed-ZeRO-2 cutoff_len=8192 Deepspeed-ZeRO-2 3 14B-72B cutoff_len=4096 Deepspeed-ZeRO-3 cutoff_len=8192 Deepspeed-ZeRO-3 以上为建议值,上述参数值仅供参考,如需配置其他加速框架或ZeRO (Zero Redundancy Optimizer)优化器用户可自行选用配置。 父主题: 训练脚本说明
  • sft_yaml样例模板 ### model model_name_or_path: /home/ma-user/ws/tokenizers/Qwen2-72B ### method stage: sft do_train: true finetuning_type: full deepspeed: examples/deepspeed/ds_z3_config.json ### dataset dataset: identity,alpaca_en_demo template: qwen cutoff_len: 4096 packing: true max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 ### output output_dir: /home/ma-user/ws/tokenizers/Qwen2-72B/sft logging_steps: 2 save_steps: 5000 plot_loss: true overwrite_output_dir: true ### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-5 num_train_epochs: 10.0 lr_scheduler_type: cosine warmup_ratio: 0.1 fp16: true ddp_timeout: 180000000 include_tokens_per_second: true include_num_input_tokens_seen: true
  • ds_z1_config.json样例模板 { "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto", "gradient_accumulation_steps": "auto", "gradient_clipping": "auto", "zero_allow_untested_optimizer": true, "fp16": { "enabled": "auto", "loss_scale": 0, "loss_scale_window": 1000, "initial_scale_power": 16, "hysteresis": 2, "min_loss_scale": 1 }, "bf16": { "enabled": "auto" }, "zero_optimization": { "stage": 1, "allgather_partitions": true, "allgather_bucket_size": 5e8, "overlap_comm": true, "reduce_scatter": true, "reduce_bucket_size": 5e8, "contiguous_gradients": true, "round_robin_gradients": true } }
  • lora_yaml样例模板 ### model model_name_or_path: /home/ma-user/ws/tokenizers/Qwen2-72B ### method stage: sft do_train: true finetuning_type: lora lora_target: all deepspeed: examples/deepspeed/ds_z3_config.json ### dataset dataset: identity,alpaca_en_demo template: qwen cutoff_len: 4096 packing: true max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 ### output output_dir: /home/ma-user/ws/tokenizers/Qwen2-72B/lora logging_steps: 2 save_steps: 5000 plot_loss: true overwrite_output_dir: true ### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-5 num_train_epochs: 10.0 lr_scheduler_type: cosine warmup_ratio: 0.1 fp16: true ddp_timeout: 180000000 include_tokens_per_second: true include_num_input_tokens_seen: true
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):可通过表1表格中output_dir参数值路径下的train_results.json查看性能。吞吐计算公式为"num_input_tokens_seen / train_runtime / 训练卡数"。相关参数可查看表1。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。loss收敛图存放路径对应表1表格中output_dir参数值路径下的training_loss.png中也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在第一个节点上。 图2 Loss收敛情况(示意图)
  • Step2 修改训练yaml文件配置 LlamaFactroy配置文件为yaml文件,启动训练前需修改yaml配置文件,yaml配置文件在代码目录下的{work_dir}/llm_train/LLaMAFactory/demo.yaml。修改详细步骤如下所示: 选择指令微调类型 sft,复制sft_yaml样例模板内容覆盖demo.yaml文件内容。 lora,复制lora_yaml样例模板内容覆盖demo.yaml文件内容。 修改yaml文件(demo.yaml)的参数如表1所示 表1 修改重要参数 参数 示例值 参数说明 model_name_or_path /home/ma-user/ws/tokenizers/Qwen2-72B 必须修改。加载tokenizer与Hugging Face权重时存放目录绝对或相对路径。请根据实际规划修改。 template qwen 必须修改。用于指定模板。如果设置为"qwen",则使用Qwen模板进行训练,模板选择可参照表1中的template列 output_dir /home/ma-user/ws/Qwen2-72B/sft-4096 必须修改。指定输出目录。训练过程中生成的模型参数和日志文件将保存在这个目录下。用户根据自己实际要求适配。 per_device_train_batch_size 1 指定每个设备的训练批次大小 gradient_accumulation_steps 8 指定梯度累积的步数,这可以增加批次大小而不增加内存消耗。可根据自己要求适配 num_train_epochs 5 表示训练轮次,根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。可根据自己要求适配 cutoff_len 4096 文本处理时的最大长度,此处为4096,用户可根据自己要求适配。 dataset identity,alpaca_en_demo 【可选】指定用于训练的数据集,数据集都放置在此处为identity,alpaca_en_demo表示使用了两个数据集,一个是 identity,一个是alpaca_en_demo。如选用定义数据请参考准备数据(可选)配置dataset_info.json文件 dataset_dir /home/ma-user/ws/LLaMAFactory/LLaMA-Factory/data 【可选】自定义数据集dataset_info.json配置文件绝对路径;如使用自定义数据集,yaml配置文件需添加此参数。 是否选择加速深度学习训练框架Deepspeed,可参考表1选择不同的框架 是,选用ZeRO (Zero Redundancy Optimizer)优化器 ZeRO-0,配置以下参数 deepspeed: examples/deepspeed/ds_z0_config.json ZeRO-1,配置以下参数,并复制ds_z1_config.json样例模板至工作目录/home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed deepspeed: examples/deepspeed/ds_z1_config.json ZeRO-2,配置以下参数 deepspeed: examples/deepspeed/ds_z2_config.json ZeRO-3,配置以下参数 deepspeed: examples/deepspeed/ds_z3_config.json 否,默认选用Accelerate加速深度学习训练框架,注释掉deepspeed参数。 是否使用固定句长 是,配置以下参数 packing: true 否,默认使用动态句长,注释掉packing参数。 选用数据精度格式,以下参数二选一。 bf16,配置以下参数 bf16: true fp16,配置以下参数 fp16: true 是否使用自定义数据集 是,参考准备数据(可选)后,填写自定义注册后数据集前缀名称及数据集绝对路径,参考表1dataset_dir行,如demo.json数据集前缀则为demo dataset: demo dataset_dir: /home/ma-user/ws/llm_train/LLaMAFactory/LLaMA-Factory/data 否,使用代码包自带数据集,配置参数如 dataset: identity,alpaca_en_demo 如需其他配置参数,可参考表1按照实际需求修改
  • Step3 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。启动容器命令如下。 export work_dir="自定义挂载的工作目录" #容器内挂载的目录,例如/home/ma-user/ws export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称" docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ --cpus 192 \ --memory 1000g \ --shm-size 200g \ --net=host \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ $image_name \ /bin/bash 参数说明: --name ${container_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如llamafactory。 -v ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载/home/ma-user目录,此目录为ma-user用户家目录。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 ${image_name} 为docker镜像的ID,在宿主机上可通过docker images查询得到。 --shm-size:表示共享内存,用于多进程间通信。由于需要转换较大内存的模型文件,因此大小要求200g及以上。 修改目录权限,上传代码和数据到宿主机时使用的是root用户,如用ma-user用户训练,此处需要执行如下命令统一文件权限。 #统一文件权限 chmod -R 777 ${work_dir} # ${work_dir}:/home/ma-user/ws 宿主机代码和数据目录 #例如: chmod -R 777 /home/ma-user/ws 通过容器名称进入容器中。启动容器时默认用户为ma-user用户。 docker exec -it ${container_name} bash 使用ma-user用户安装依赖包。 #进入scripts目录换 cd /home/ma-user/ws/llm_train/LLaMAFactory #执行安装命令,安装依赖包及/LLaMAFactory代码包 sh install.sh
共100000条