GPU 分布式 AI 训练加速引擎 TACO-Training 容器方案首发!
背景
介绍
TACO-Training
TACO-Training 是腾讯云异构计算团队基于 IaaS 资源推出的 AI 训练加速引擎,为用户提供开箱即用的 AI 训练套件。TACO-Training 背靠云帆Oteam,基于腾讯内部丰富的 AI 业务场景,提供自底向上的网络通信、分布式策略及训练框架等多层级的优化,是一套全生态的训练加速方案。为了更好的服务用户,腾讯云决定提供内部深度优化的 AI 训练加速方案给用户部署体验,助力用户节约计算成本,提高 AI 产品研发效率。
基于 Horovod 深度定制优化的 LightCC 通信组件,在兼容原始 API 的基础上,提供了多级通信、TOPK 压缩通信、多策略梯度融合等优化技术 自研用户态网络协议栈 HARP
HARP
支持全链路内存零拷贝,HARP 协议栈提供特定的 buffer 给应用,使应用的数据经过 HARP 协议栈处理后由网卡直接进行收发,消除内核协议栈中耗时及占用 CPU 较高的多次内存拷贝操作。 支持协议栈多实例隔离,即应用可以在多个 CPU core 上创建特定协议栈实例处理网络报文,每个实例间相互隔离,保证性能线性增长。 数据平面无锁设计,HARP 协议栈内部保证网络 session 的数据仅在创建该 session 的 CPU core 上,使用特定的协议栈实例处理。减少了内核中同步锁的开销,也降低了 CPU 的 Cache Miss 率,大幅提升网络数据的处理性能。
TKE Kubeflow
性能数据
部署实践
环境准备
Ubunut Server 18.04 CentOS 7.8 Tencent Linux 2.4
// 配置命令详见评论区文档,此处无效
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
5、生成 HARP 配置文件
// 登录worker节点的主机
sudo curl -s -L http://mirrors.tencent.com/install/GPU/taco/harp_setup.sh | bash
执行成功会打印 ‘Set up HARP successfully’,
创建pod
参考如下:taco.yaml文件,
apiVersion: kubeflow.org/v1
kind: MPIJob
metadata:
name: taco-bench
spec:
slotsPerWorker: 1
runPolicy:
cleanPodPolicy: Running
mpiReplicaSpecs:
Launcher:
replicas: 1
template:
spec:
containers:
- image: ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
name: mpi-launcher
command: ["/bin/sh", "-ec", "sleep infinity"]
resources:
limits:
cpu: 1
memory: 2Gi
Worker:
replicas: 4
template:
spec:
containers:
- image: ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
name: mpi-worker
securityContext:
privileged: true
volumeMounts:
- mountPath: /sys/
name: sys
- mountPath: /dev/hugepages
name: dev-hge
- mountPath: /usr/local/tfabric/tools
name: tfabric
resources:
limits:
hugepages-1Gi: "50Gi"
memory: "100Gi"
nvidia.com/gpu: 8 # requesting 1 GPU
volumes:
- name: sys
hostPath:
path: /sys/
- name: dev-hge
hostPath:
path: /dev/hugepages/
- name: tfabric
hostPath:
path: /usr/local/tfabric/tools/
主机侧一些设备节点和配置文件需要 bind mount 到 pod 中供 HARP 使用 pod 需要配置 privileged 权限,否则 HARP 无法读取配置文件 需要给pod配置大页内存:hugepages-1Gi。针对八卡机器可配置 hugepages=50,其他机型建议按照 hugepages=(卡数 × 5+10)进行配置 ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2 是taco-training的官方镜像,基于Ubunut 18.04/python 3.6.9/CUDA 11.2.152/CUDNN 8.1.1/NCCL 2.8.4编译产生,如果有其他的版本需求,请联系腾讯云售后支持
kubectl create -f taco.yaml
开始测试
wget https://raw.githubusercontent.com/horovod/horovod/master/examples/tensorflow/tensorflow_synthetic_benchmark.pyfor i in `kubectl get pods | grep worker | awk '{print $1}'`; do kubectl cp tensorflow_synthetic_benchmark.py $i:/mnt/; done
//登录launcher pod
kubectl exec -it taco-bench-launcher -- bash// 执行训练benchmark
/usr/local/openmpi/bin/mpirun -np 32 -H taco-bench-worker-0:8,taco-bench-worker-1:8,taco-bench-worker-2:8,taco-bench-worker-3:8 --allow-run-as-root -bind-to none -map-by slot -x NCCL_ALGO=RING -x NCCL_DEBUG=INFO -x HOROVOD_MPI_THREADS_DISABLE=1 -x HOROVOD_FUSION_THRESHOLD=0 -x HOROVOD_CYCLE_TIME=0 -x LIGHT_2D_ALLREDUCE=1 -x LIGHT_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LIGHT_INTRA_SIZE=8 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=VGG16 --batch-size=128
// 卸载HARP加速库
for i in `kubectl get pods | grep worker | awk '{print $1}'`; do kubectl exec $i -- bash -c 'mv /usr/lib/x86_64-linux-gnu/libnccl-net.so /mnt/'; done// 卸载LightCC
for i in `kubectl get pods | grep worker | awk '{print $1}'`; do kubectl exec $i -- bash -c 'pip uninstall -y light-horovod;echo'; done
// 安装horovod(耗时8分钟左右)
for i in `kubectl get pods | grep worker | awk '{print $1}'`; do kubectl exec $i -- bash -c 'export PATH=/usr/local/openmpi/bin:$PATH;HOROVOD_WITH_MPI=1 HOROVOD_GPU_OPERATIONS=NCCL HOROVOD_WITH_TENSORFLOW=1 HOROVOD_NCCL_LINK=SHARED pip3 install --no-cache-dir horovod==0.21.3'; done
// 检查确认所有的worker都已经成功horovod
for i in `kubectl get pods | grep worker | awk '{print $1}'`; do kubectl exec $i -- bash -c 'pip show horovod;echo'; done
总结
在相同的 25G VPC 环境下,相比于业内开源方案 Horovod,TACO 可以提供20%- 200%左右的性能提升。基本上模型参数越多,性能提升越明显; 在50G的 VPC 环境下,TACO 可以提供类似 100G RDMA 的训练性能;