栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【训练加速部署及实践】

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【训练加速部署及实践】

使用要求
  • 申请 加速产品私有镜像仓库临时登录指令,获取 password。
  • TI-ACC 训练加速仅支持以下操作系统、Python版本、设备类型、框架版本及镜像版本:
    • 操作系统:Linux
    • Python 版本:Python 3.6
    • 设备类型:GPU 实例,并支持 CUDA 10.0、10.1、10.2、11.1
    • 框架版本:Tensorflow 1.15,PyTorch 1.7.1、1.8.1、1.9.0
    • 镜像版本:
      框架类型仓库地址镜像版本
      PyTorchtiacc-test.tencentcloudcr.com/ti-acc/ti-accv1.0tiacc-training-v1.0.0-torch1.7.1-cu101-py36-ubuntu18.04
      tiacc-training-v1.0.0-torch1.8.1-cu102-py36-ubuntu18.04
      tiacc-training-v1.0.0-torch1.9.0-cu111-py38-ubuntu18.04
      TensorFlowtiacc-training-v1.0.0-tensorflow1.15.5-cu100-py36-ubuntu18.04

操作步骤

实例环境准备
  1. 参考 购买 NVIDIA GPU 实例 创建实例。其中:
    • 镜像:请选择 Ubuntu 18.04及以上版本。并勾选“后台自动安装GPU驱动”,使用自动安装功能安装 GPU 驱动。
      CUDA 及 cuDNN 的自动安装非本次部署的必选项,您可根据实际情况选择。如下图所示:

    • 系统盘:结合 Docker 镜像的大小以及训练中间状态文件的存储,推荐配置100G以上的系统盘。
  2. 请对应实例的操作系统类型,参考以下文档安装 Docker。
    操作系统说明
    CentOS参考 Docker 官方文档 - 在 CentOS 中安装 Docker 进行安装。
    Ubuntu参考 Docker 官方文档 - 在 Ubuntu 中安装 Docker 进行安装。
  3. 安装 nvidia-docker,详情请参见 NVIDIA 官方文档 - 安装nvidia-docker。
  4. 登录实例,并依次执行命令获取加速镜像。本文提供如下参考命令:
    • 使用要求 中已获取的私有镜像临时登录指令,登录腾讯云容器服务 Docker Registry 加速镜像仓库。
      docker login tiacc-test.tencentcloudcr.com --username xxx --password xxx
      

      说明

      username 为账号 ID,password 为临时登录指令。请结合实际情况进行替换。

    • 从 Registry 加速镜像仓库拉取镜像。
      docker pull tiacc-test.tencentcloudcr.com/ti-acc/ti-accv1.0:[tag]
      

      说明

      tag 为镜像名称,请结合实际情况进行替换。

  5. 执行命令,启动加速镜像并进入容器实例。本文提供如下参考命令:
    docker run -it --net=host --privileged --rm --gpus all --shm-size=32g --ulimit memlock=-1 --ulimit stack=67108864 --name TI-ACC-gpu tiacc-test.tencentcloudcr.com/ti-acc/ti-accv1.0:[tag]
    
  6. 在容器中依次执行命令,配置多实例镜像间免密登录。
     
    # 修改 docker 的 ssh 端⼝,确保和宿主机的端口不冲突
    sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
    
    # 启动 ssh 服务
    service ssh start && netstat -tulpn
    
    # 免密处理
    # 将 publickey 添加至 ~/.ssh/authorized_keys,请注意本机和对端的 key 均需添加至 authorized_keys
    ssh-keygen
    
    # 确认 ssh 可以互通
    ssh -p 2222 root@10.0.0.17
    or
    ssh -p 2222 root@10.0.0.11
    
    # 配置 ssh 默认使⽤2222端⼝通信,编辑两台实例的 ~/.ssh/config
    Host *
    StrictHostKeyChecking no
    Port 2222
    

使用训练加速

训练加速中的通信加速能力由兼容原生的 DDP 工具提供,用户无需修改原生的使用代码即可直接使用。数据 IO 优化、自适应 FP16均通过已封装的简单函数/类进行提供,仅需增加少量代码便可使用。

使用 DDP 分布式训练通信优化(PyTorch+DPP)

以兼容原生 DDP 的方式启动训练脚本,无需进行训练代码的修改,启动命令参考示例如下:

python3 -u -m tiacc_training.torch.distributed.launch --nproc_per_node $GPUS_PER_NODE --nnodes $NNODES --node_rank $NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT main.py

以 mpirun 的方式启动训练脚本,需要在原生 DPP 的训练代码里进行修改,在开头处增加如下代码:

import tiacc_training.torch.distributed as tdist
tdist.init_tiacc_training()

mpirun 方式2机16卡训练脚本的启动命令参考示例如下:

node_list=node1:8,node2:8   //node1和node2为服务器IP或主机名
gpu_num=16  //总的gpu卡数

mpirun --allow-run-as-root -np ${gpu_num} -H ${node_list} -map-by slot -mca btl_tcp_if_include eth0 -mca oob_tcp_if_include eth0 
-x NCCL_DEBUG=INFO 
-x NCCL_SOCKET_IFNAME=eth0 
-x NCCL_IB_DISABLE=1 
-x LIGHT_2D_ALLREDUCE=1      //使用2D allreduce通信加速
-x TIACC_TRAINING_FUSION_THRESHOLD=25217728     //TIACC_Training会对小的包进行融合通信,TIACC_TRAINING_FUSION_THRESHOLD表示融合后桶的最大字节数
-x TIACC_TRAINING_NUM_NCCL_STREAMS=3 
python3 
/demo/TIACC-Training-Benchmarks/pytorch_native_ddp_demo.py  //训练脚本

硬件环境以 GPU 实例 GN10Xp.20XLARGE320为例,DDP 分布式训练通信优化实测数据如下表所示:

模型GPU 卡数原生 DDP
(examples/sec per V100)
TI-ACC 通信优化
(examples/sec per V100)
resnext50_32x4d1(单机)227227
8(单机)215215
16(双机)116158.6

使用数据 IO 优化(PyTorch)

通过以下代码,进行数据预处理及 IO 优化。

import tiacc_training.torch
train_dataset = tiacc_training.torch.tiacc_torch_warp.IndexTFRDataset(tfrecored_dir, tfrecord_file, transform)

tfrecord_file 可使用 TI-ACC 提供的 tools 工具进行生成。说明如下:

展开全部

tiacc_training/tools/general_image_list.py

展开&收起

  • 具体功能:生成 tfrecord_file 需要的 image list。
  • 输入参数:
    • img_dir:必填,图片存放路径。包含若干文件夹,文件夹名为当前类别名。
    • img_list:必填,期望生成的 list 文件名,格式为 图片路径 当前图片类别标签。您可查看 list 文件示例。
    • label_str2int:非必填,类别名(str)到类别 id(int)的映射关系文件。若不输入,则会自动生成。您可查看 label_str2int 文件示例。
  • 使用示例:
    python3 tiacc_training/tools/general_image_list.py --img_dir val_demo/ --img_list val_list
    
tiacc_training/tools/img2tfrecord.py

展开&收起


硬件环境以 GPU 实例 GN10Xp.20XLARGE320为例,数据 IO 优化实测数据如下表所示:

模型GPU 卡数原生 PyTorch
(examples/sec per V100)
TI-ACC 数据 IO 优化
(examples/sec per V100)
resnet50 mmcls8(单机)70.8350.5
centernet mmdet8(单机)26.428.6

使用自适应混合精度优化(PyTorch)

通过如下代码,使用自适应混合精度优化:

import torch.cuda.amp as amp 
import tiacc_training.torch
scaler = amp.GradScaler() 
#实例化自适应混合精度策略类的对象
policy = tiacc_training.torch .tiacc_torch_warp.MixedPrecision_TrainingPolicy(policy,start_step,hold_step,end_step,test_interval,test_step)
#根据输入的参数得到当前epoch是否需要开启混合精度
mixed_precision = policy.enable_mixed_precision(epoch,lr,loss,scaler=scaler)
with amp.autocast(enabled=mixed_precision):
      outputs = model(inputs)
     loss = criterion(outputs, targets)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()

硬件环境以 GPU 实例 GN10Xp.20XLARGE320为例,使用自适应混合精度优化实测数据如下表所示:

模型GPU 卡数原生 PyTorch
(examples/sec per V100)
TI-ACC 数据 IO 优化
(examples/sec per V100)
TI-ACC 数据 IO+自适应混合精度优化
(examples/sec per V100)
resnet50 mmcls8(单机)70.8350.5379.2
centernet mmdet8(单机)26.428.630.6

使用通信优化后的 embedding 变量构造(TensorFlow+PS)

#将tensorflow原生的get_variable()替换为TI-ACC优化后的get_variable()
import tiacc_training.tensorflow
embeddings = tiacc_training.tensorflow.get_variable(name="embeddings",devices=["/job:ps/replica:0/task:0/CPU:0", "/job:ps/replica:0/task:1/CPU:0"],initializer=tf.compat.v1.random_normal_initializer(0, 0.005),dim=32)

使用通信优化后的 embedding lookup 计算(TensorFlow+PS)

#将tensorflow原生的embedding_lookup_sparse()替换为TI-ACC优化后的embedding_lookup_sparse()
import tiacc_training.tensorflow
sp_tensor = tiacc_training.tensorflow.SparseTensor(indices=[[0,0],[3,1],[2,2],[1,0]], values=[0,1,2,6], dense_shape=(3,3))sparse_weights = tf.nn.embedding_lookup_sparse(params=embeddings,sp_ids=sp_tensor,name="sparse-weights")

硬件环境以 GPU 实例 GN10Xp.20XLARGE320为例,embedding 变量构造 + lookup 计算优化实测效果如下表所示:

模型GPU 卡数原生 TensorFlow
(global_steps/sec per V100)
TI-ACC 优化后
(global_steps/sec per V100)
DeepFM16(单机)41.9 - 5696.1 - 103.3
Wide & Deep16(单机)49.9 - 69120 - 128

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号