使用要求
- 申请 加速产品私有镜像仓库临时登录指令,获取 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
- 镜像版本:
框架类型 仓库地址 镜像版本 PyTorch tiacc-test.tencentcloudcr.com/ti-acc/ti-accv1.0 tiacc-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 TensorFlow tiacc-training-v1.0.0-tensorflow1.15.5-cu100-py36-ubuntu18.04
操作步骤
实例环境准备
- 参考 购买 NVIDIA GPU 实例 创建实例。其中:
- 镜像:请选择 Ubuntu 18.04及以上版本。并勾选“后台自动安装GPU驱动”,使用自动安装功能安装 GPU 驱动。
CUDA 及 cuDNN 的自动安装非本次部署的必选项,您可根据实际情况选择。如下图所示: - 系统盘:结合 Docker 镜像的大小以及训练中间状态文件的存储,推荐配置100G以上的系统盘。
- 请对应实例的操作系统类型,参考以下文档安装 Docker。
操作系统 说明 CentOS 参考 Docker 官方文档 - 在 CentOS 中安装 Docker 进行安装。 Ubuntu 参考 Docker 官方文档 - 在 Ubuntu 中安装 Docker 进行安装。
- 安装 nvidia-docker,详情请参见 NVIDIA 官方文档 - 安装nvidia-docker。
- 登录实例,并依次执行命令获取加速镜像。本文提供如下参考命令:
- 使用要求 中已获取的私有镜像临时登录指令,登录腾讯云容器服务 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 为镜像名称,请结合实际情况进行替换。
- 执行命令,启动加速镜像并进入容器实例。本文提供如下参考命令:
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]
- 在容器中依次执行命令,配置多实例镜像间免密登录。
# 修改 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
使用训练加速
- 操作系统: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
- 镜像版本:
框架类型 仓库地址 镜像版本 PyTorch tiacc-test.tencentcloudcr.com/ti-acc/ti-accv1.0 tiacc-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 TensorFlow tiacc-training-v1.0.0-tensorflow1.15.5-cu100-py36-ubuntu18.04
实例环境准备
- 参考 购买 NVIDIA GPU 实例 创建实例。其中:
- 镜像:请选择 Ubuntu 18.04及以上版本。并勾选“后台自动安装GPU驱动”,使用自动安装功能安装 GPU 驱动。
CUDA 及 cuDNN 的自动安装非本次部署的必选项,您可根据实际情况选择。如下图所示: - 系统盘:结合 Docker 镜像的大小以及训练中间状态文件的存储,推荐配置100G以上的系统盘。
- 请对应实例的操作系统类型,参考以下文档安装 Docker。
操作系统 说明 CentOS 参考 Docker 官方文档 - 在 CentOS 中安装 Docker 进行安装。 Ubuntu 参考 Docker 官方文档 - 在 Ubuntu 中安装 Docker 进行安装。
- 安装 nvidia-docker,详情请参见 NVIDIA 官方文档 - 安装nvidia-docker。
- 登录实例,并依次执行命令获取加速镜像。本文提供如下参考命令:
- 使用要求 中已获取的私有镜像临时登录指令,登录腾讯云容器服务 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 为镜像名称,请结合实际情况进行替换。
- 执行命令,启动加速镜像并进入容器实例。本文提供如下参考命令:
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]
- 在容器中依次执行命令,配置多实例镜像间免密登录。
# 修改 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
使用训练加速
- 镜像:请选择 Ubuntu 18.04及以上版本。并勾选“后台自动安装GPU驱动”,使用自动安装功能安装 GPU 驱动。
CUDA 及 cuDNN 的自动安装非本次部署的必选项,您可根据实际情况选择。如下图所示: - 系统盘:结合 Docker 镜像的大小以及训练中间状态文件的存储,推荐配置100G以上的系统盘。
| 操作系统 | 说明 |
|---|---|
| CentOS | 参考 Docker 官方文档 - 在 CentOS 中安装 Docker 进行安装。 |
| Ubuntu | 参考 Docker 官方文档 - 在 Ubuntu 中安装 Docker 进行安装。 |
- 使用要求 中已获取的私有镜像临时登录指令,登录腾讯云容器服务 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 为镜像名称,请结合实际情况进行替换。
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]
# 修改 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_32x4d | 1(单机) | 227 | 227 |
| 8(单机) | 215 | 215 | |
| 16(双机) | 116 | 158.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
展开&收起
硬件环境以 GPU 实例 GN10Xp.20XLARGE320为例,数据 IO 优化实测数据如下表所示:
| 模型 | GPU 卡数 | 原生 PyTorch (examples/sec per V100) | TI-ACC 数据 IO 优化 (examples/sec per V100) |
|---|---|---|---|
| resnet50 mmcls | 8(单机) | 70.8 | 350.5 |
| centernet mmdet | 8(单机) | 26.4 | 28.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 mmcls | 8(单机) | 70.8 | 350.5 | 379.2 |
| centernet mmdet | 8(单机) | 26.4 | 28.6 | 30.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) |
|---|---|---|---|
| DeepFM | 16(单机) | 41.9 - 56 | 96.1 - 103.3 |
| Wide & Deep | 16(单机) | 49.9 - 69 | 120 - 128 |



