前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TACO云原生最佳实践

TACO云原生最佳实践

原创
作者头像
远远小七宝
修改2022-12-02 10:36:53
1.2K0
修改2022-12-02 10:36:53
举报
文章被收录于专栏:泛互云原生

概述

业界AI应用中,GPU的使用逐渐增加,腾讯云TACO是一种异构计算加速软件服务,搭配腾讯自研的软硬件协同优化组件和硬件厂商特有优化方案,支持物理机、云服务器、容器等产品的计算加速、图形渲染、视频转码各个应用场景,帮助用户实现全方位全场景的降本增效。

 图1-1 AI场景架构
图1-1 AI场景架构

本实践采用TACO Train AI中的HARP、LightCC优化技术,通过无侵入式方式,对Horovod分布式训练框架进行优化加速。过程中通过不同训练模型,不同Batch-Size,验证TACO在训练速度上的优化效果。

TACO云原生环境安装

版本

本次实践环境,采用腾讯云TKE,其中

  • TKE 版本:v1.18(TKE 1.22暂不支持mpi-operator)
  • 节点:GN10X.2XLARGE40 * 4
  • 节点OS:tencentos 3.1(tk4),CentOS 7/8,ubuntu 18/20
  • GPU型号:T4 / V100 / A10 / A30 / A100
  • GPU驱动版本:450或470

安装MPI环境

  • 按照版本要求,创建TKE集群,网络选择GlobalRouter模式
  • 开启GPU节点,本实践采用4台V100服务器,2台部署Horovod原生环境,2台部署TACO优化环境
  • 通过【容器服务】-【应用】,在目标TKE集群中,安装mpi-operator
图2-1 TKE集群应用商店
图2-1 TKE集群应用商店
图2-2 应用商店mpi-operator组件
图2-2 应用商店mpi-operator组件
  • 安装完毕后,可以在对应的命名空间中,查询到对应pod
图2-3 mpi-operator运行情况
图2-3 mpi-operator运行情况

安装HARP环境

  • 为TKE集群添加GPU CVM节点,本实践采用V100 GPU,型号为GN10X.2XLARGE40,共4台。
  • 开通完毕后,在GPU CVM控制台上,新建弹性网卡ENI。其中,弹性网卡数量等于GPU卡的数量
图2-4 新建弹性网卡
图2-4 新建弹性网卡
  • 通过Workbench登录虚拟机,执行以下脚本,初始化HARP环境
代码语言:javascript
复制
curl -s -L http://mirrors.tencent.com/install/GPU/taco/taco_setup.sh | sudo bash
图2-5 HARP初始化脚本运行输出
图2-5 HARP初始化脚本运行输出
  • 重启CVM
  • 通过以下命令,检查大页内存及用户态协议栈配置
    • 执行以下命令,如果显示HugePages_Total: X,即为成功
代码语言:javascript
复制
cat /proc/meminfo | grep HugePages_Total
代码语言:javascript
复制
ls -l /usr/local/tfabric/tools/config/ztcp*.conf
图2-6 HARP配置文件
图2-6 HARP配置文件

镜像制作

本次实践程序,采用Horovod基于随机数据的分布式训练benchmark脚本。其中TACO运行环境采用腾讯云taco-train的官方镜像

代码语言:javascript
复制
ccr.ccs.tencentyun.com/qcloud/taco-train:ttf115-cu112-cvm-0.4.1

因TACO插件式集成特性,从TACO镜像中移除HARP加速库,即可得到原生Horovod运行环境镜像

代码语言:javascript
复制
cat <<EOF > Dockerfile
FROM ccr.ccs.tencentyun.com/qcloud/taco-train:ttf115-cu112-cvm-0.4.1
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN apt-get update || :
RUN apt-get install tzdata
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
RUN mv /usr/lib/x86_64-linux-gnu/libnccl-net.so /root/
EOF

docker build -t ttf115-cu112-cvm-0.4.1-horovod .

部署TACO Job

采用官方taco-train镜像,部署TACO环境任务,大页内存按照单机如下数量进行配置。

代码语言:javascript
复制
 hugepages=(卡数 * 5  + 10)

YAML示例文件如下:

代码语言:javascript
复制
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/qcbm/taco-train:ttf115-cu112-cvm-0.4.2
            name: mpi-launcher
            command: ["/bin/sh", "-ec", "sleep infinity"]
            resources:
              limits:
                cpu: 1
                memory: 2Gi
    Worker:
      replicas: 2
      template:
        spec:
          containers:
          - image: ccr.ccs.tencentyun.com/qcbm/taco-train:ttf115-cu112-cvm-0.4.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: "15Gi"
                memory: "5Gi"
                nvidia.com/gpu: 1 # requesting 1 GPU
          volumes:
            - name: sys
              hostPath:
                path: /sys/
            - name: dev-hge
              hostPath:
                path: /dev/hugepages/
            - name: tfabric
              hostPath:
                path: /usr/local/tfabric/tools/

部署Horovod Job

采用自定义horovod镜像,YAML示例文件如下:

代码语言:javascript
复制
apiVersion: kubeflow.org/v1
kind: MPIJob
metadata:
  name: horovod-bench
spec:
  slotsPerWorker: 1
  runPolicy:
    cleanPodPolicy: Running
  mpiReplicaSpecs:
    Launcher:
      replicas: 1
      template:
        spec:
          containers:
          - image: ccr.ccs.tencentyun.com/qcbm/horovod-train:ttf115-cu112-cvm-0.4.2
            name: mpi-launcher
            command: ["/bin/sh", "-ec", "sleep infinity"]
            resources:
              limits:
                cpu: 1
                memory: 2Gi
    Worker:
      replicas: 2
      template:
        spec:
          containers:
          - image: ccr.ccs.tencentyun.com/qcbm/horovod-train:ttf115-cu112-cvm-0.4.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: "15Gi"
                memory: "5Gi"
                nvidia.com/gpu: 1 # requesting 1 GPU
          volumes:
            - name: sys
              hostPath:
                path: /sys/
            - name: dev-hge
              hostPath:
                path: /dev/hugepages/
            - name: tfabric
              hostPath:
                path: /usr/local/tfabric/tools/

能力实践

实践目标

基于TACO训练加速组件:LightCC(基于 Horovod 深度优化的分布式训练框架)及HARP(自研用户态网络协议栈),对比原生Horovod环境,ResNet50及VGG16的多机训练加速提升

操作说明

  • 检查环境部署情况,2台GPU服务器部署2个worker
图4-1 TACO环境Pod运行情况
图4-1 TACO环境Pod运行情况
  • 使用如下命令分别登录TACO-bench和Horovod-bench
代码语言:javascript
复制
kubectl exec -i -t -n horovod-test horovod-bench-launcher -c mpi-launcher -- sh -c "clear;(bash || sh)"
代码语言:javascript
复制
kubectl exec -i -t -n taco-test taco-bench-launcher -c mpi-launcher -- sh -c "clear;(bash || sh)"

VGG16模型,16 Batch-Size

采用如下命令,分别在TACO-bench和Horovod-bench里执行计算

代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H taco-bench-worker-0:1,taco-bench-worker-1:1 --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_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=VGG16 --batch-size=16
代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H horovod-bench-worker-0:1,horovod-bench-worker-1:1 --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 LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=VGG16 --batch-size=16

因实践环境采用随机模拟数据,计算数据量少,通过小Batch-Size参数设置去增加通信频次。当Batch-Size设置为16时,VGG模型下TACO HARP和LightCC优化对比效果提升明显,如下图所示:

图4-2 TACO运行情况(VGG16,Batch-Size 16)
图4-2 TACO运行情况(VGG16,Batch-Size 16)
图4-3 Horovod运行情况(VGG16,Batch-Size 16)
图4-3 Horovod运行情况(VGG16,Batch-Size 16)

ResNet50模型,16 Batch-Size

采用如下命令,分别在TACO-bench和Horovod-bench里执行计算

代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H taco-bench-worker-0:1,taco-bench-worker-1:1 --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_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=16
代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H horovod-bench-worker-0:1,horovod-bench-worker-1:1 --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 LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=16

ResNet50相对VGG16模型,网络通信次数较少,我们同样设置Batch-Size为16,TACO HARP和LightCC对于模型计算,依然有明显提升,如下图

图4-4 TACO运行情况(ResNet50,Batch-Size 16)
图4-4 TACO运行情况(ResNet50,Batch-Size 16)
图4-5 Horovod运行情况(ResNet50,Batch-Size 16)
图4-5 Horovod运行情况(ResNet50,Batch-Size 16)

ResNet50模型,128 Batch-Size

采用如下命令,分别在TACO-bench和Horovod-bench里执行计算

代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H taco-bench-worker-0:1,taco-bench-worker-1:1 --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_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=128
代码语言:javascript
复制
/usr/local/openmpi/bin/mpirun -np 2 -H horovod-bench-worker-0:1,horovod-bench-worker-1:1 --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 LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 /mnt/tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=128

当Batch-Size 128的时候,整体训练过程计算占比大,计算数据量少,梯度更新快,导致通信占比小,HARP对比原生网络协议栈优势不明显。该设置场景对比效果如下:

图4-6 TACO运行情况(ResNet50,Batch-Size 128)
图4-6 TACO运行情况(ResNet50,Batch-Size 128)
图4-7 Horovod运行情况(ResNet50,Batch-Size 128)
图4-7 Horovod运行情况(ResNet50,Batch-Size 128)

总结

在AI训练通信量很大时,最常遇到的一个问题就是网络带宽不够,在集群之间通信带宽受限的情况下,会显著影响节点间数据交换效率。

基于这个问题TACO提出了topk压缩算法,也就是LightCC优化,将梯度进行压缩,降低每次的通信量,并基于算法提供补偿方式,在对模型的训练精度影响很小的前提下,大大提升分布式训练的性能。

另外,用户态自研网络协议栈 HARP,通过内存零拷贝、多实例隔离和数据平面无锁设计,降低内核协议栈开销,显著提升分布式训练过程中网络通信效率。且对比业界Infiniband 或 RoCE方案,成本大幅降低。

实践过程证明,TACO对于通信占比大的训练程序,具有明显的训练加速效果,实现云上AI场景模型训练降本增效。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • TACO云原生环境安装
    • 版本
      • 安装MPI环境
        • 安装HARP环境
          • 镜像制作
            • 部署TACO Job
              • 部署Horovod Job
              • 能力实践
                • 实践目标
                  • 操作说明
                    • VGG16模型,16 Batch-Size
                      • ResNet50模型,16 Batch-Size
                        • ResNet50模型,128 Batch-Size
                        • 总结
                        相关产品与服务
                        计算加速套件 TACO Kit
                        计算加速套件TACO Kit(TencentCloud Accelerated Computing Optimization Kit)是基于腾讯云 Iaas 产品的 AI 计算加速套件。提供网络协议、通信策略、AI 框架、模型编译等多层级的优化,是一套全生态的计算加速方案。支持裸金属、云服务器、容器等算力形态,支持 CPU、GPU、NPU 等芯片算力组合。帮助客户降低 AI 优化门槛的同时,大幅提升 AI 训练和推理业务性能,节约算力成本。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档