Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
YOUR SUCCESS, WE SUCCEED
基于GPU的AI计算优化方法与案例:从训练到推理
张清,浪潮AI首席架构师
AI计算的发展趋势及其挑战
基于GPU的AI计算优化方法:从训练到推理
提纲
Case Study:基于GPU实现AutoML Suite计算优化
Source :IDC 2019
AI计算的发展趋势
US$M
2,731.7
4,478.9
6,833.8
9,674.4
13,432.3
17,468.0
1,680.62,686.6
3,762.94,639.0
5,917.67,303.4
64.0%
52.6%
41.6%38.8%
30.0%
59.8%
40.0%
23.3%27.6%
23.4%
0.0%
10.0%
20.0%
30.0%
40.0%
50.0%
60.0%
70.0%
0
2,000
4,000
6,000
8,000
10,000
12,000
14,000
16,000
18,000
2018 2019 2020 2021 2022 2023
中国人工智能总体市场规模及预测, 2018-2023 AI Spending Growth Rate整体投资
中国人工智能服务器市场规模及预测, 2018-2023 AI Server Growth Rate算力投资
趋势1:越来越多的场景将采用AI技术创新,未来计算投入会越来越大
81.3%73.7%
66.6%59.8%
51.7% 47.9%42.7%
18.7%26.3%
33.4%40.2%
48.3% 52.1% 57.3%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
2017年 2018年 2019年 2020年 2021年 2022年 2023年
Training Inference
Source : IDC 2019
AI计算的发展趋势
趋势2:越来越多的AI应用将进入生产阶段,未来5年推理所需计算会迅速增加
Source : Facebook
AI计算的发展趋势
趋势3:大数据+大模型,需要更大的计算
16.0
36.0
87.0
153.0
82.2%
84.2%
85.1% 85.4%
80.0%
81.0%
82.0%
83.0%
84.0%
85.0%
86.0%
0
20
40
60
80
100
120
140
160
180
200
ResNeXt-101 32*8d ResNeXt-101 32*16d ResNeXt-101 32*32d ResNeXt-101 32*48d
单位:BFLOPS
计算量 准确度
AI计算面临的挑战
• AI计算架构:芯片间异构与芯片内异构
• 异构并行与协同计算
– CPU/GPU,CUDA Core/Tensor Core
• AI计算规模:K级节点、10K级GPU卡
• 性能与性能的可扩展性
– 单模型K级以上GPU并行计算
• AI计算环境:不同用户、不同算法、不同数据、不同框架、不同GPU卡
• 任务管理与资源调度
– 生产系统K级以上模型并发调度
◼ 不同
AI计算的发展趋势及其挑战
基于GPU的AI计算优化方法:从训练到推理
提纲
Case Study:基于GPU实现AutoML Suite计算优化
基于GPU的AI计算优化方法
AI应用特征分析 GPU平台优化 AI计算框架GPU优化 AI应用GPU优化
计算特征
访存特征
通信特征
IO特征
计算优化
存储优化
网络优化
资源管理
资源调度
GPU系统管理优化
数据模型划分
单机优化算法
不同通信机制
数据模型聚合
训练性能优化
训练扩展优化
推理吞吐优化
推理延时优化
AI应用特征分析
CPU GPU
Teye工具:从微架构层次分析AI应用与框架特征,实现性能优化
MXNet
TensorFlow
Caffe
CV应用特征分析案例
0
20
401
12
12
41
36
14
81
60
17
21
84
19
61
10
81
12
01
13
21
14
41
15
61
16
81
CP
U使
用率
(%)
时间轴s
典型AI模型CPU使用率
cpu_user(caffe-ssd)
cpu_user(tf-gcnet)
cpu_user(tf-googlenet)
cpu_user(tf-res)
cpu_user(tf-vgg)
cpu_user(caffe-googlenet)
cpu_user(caffe-res)
cpu_user(caffe-vgg)
cpu_user(yolo)cpu_user(mxnet-ssd)
cpu_user(caffe-rfcn)
0
20
40
60
80
100
120
1
71
14
1
21
1
28
1
35
1
42
1
49
1
56
1
63
1
70
1
77
1
84
1
91
1
98
1
10
51
11
21
11
91
12
61
13
31
14
01
14
71
15
41
16
11
16
81
17
51
GP
U核心利用率
时间轴s
典型AI模型GPU利用率
GPU0_Rate(yolo-p100) GPU1_Rate(caffe-res50)
GPU1_Rate(caffe-res152)
0
20000
40000
1
13
0
25
9
38
8
51
7
64
6
77
5
90
4
10
33
11
62
12
91
14
20
15
49
16
78
内存
占用
MB
时间轴s
典型AI模型内存使用情况
mem_used(caffe-ssd)
mem_used(tf-gcnet)
mem_used(tf-googlenet)
mem_used(tf-res)
mem_used(tf-vgg)
mem_used(caffe-googlenet)
mem_used(caffe-res)
mem_used(caffe-vgg)
mem_used(yolo)
mem_used(mxnet-ssd)
mem_used(caffe-rfcn)
0
5000
10000
15000
20000
1
68
13
5
20
2
26
9
33
6
40
3
47
0
53
7
60
4
67
1
73
8
80
5
87
2
93
9
10
06
10
73
11
40
12
07
12
74
13
41
14
08
14
75
15
42
16
09
16
76
17
43
典型AI模型GPU内存使用情况
GPU0_MemUsed(caffe-ssd-1080Ti) GPU0_MemUsed(tf-gcnet-1080Ti)
GPU0_Used_Mem(yolo-p100) GPU0_MemUsed(tf-googlenet-p100)
GPU0_MemUsed(tf-res-p100) GPU0_MemUsed(tf-vgg-p100)
GPU0_MemUsed(caffe-googlenet-p100) GPU0_MemUsed(caffe-res-p100)
GPU0_MemUsed(caffe-vgg-p100)
CPU利用率:5%-25%
CPU内存:20GB以下
GPU利用率:80%-100%
GPU内存:15GB左右
GPU平台优化
• 计算优化
– 训练:单机8-16 V100 GPU并行
– 推理:单机8-16 T4 GPU并行
• 网络优化
– 训练:单机4-8个 IB卡(100GB/s-200GB/s)实现1000卡以上并行
– 推理:单机万兆网络
• 通信优化
– 训练:NVSwitch+RDMA
– 推理:PCIE
• 存储优化:高性能并行存储+SSD/NVMe两级存储
547.23 889.64 456.811076.55
1761.27907.39
2065.9
3399.9
1805.03
4124.37
6813.02
3581.96
8195.83
13473.3
6976.06
0
5000
10000
15000
resnet101 resnet50 vgg16
V100-SMX3 32GB bs=256(Images/s)
(Inspur AGX-5)
1GPU 2GPUs 4GPUs 8GPUs 16GPUs
61340
77903
102741
0
20000
40000
60000
80000
100000
120000
A厂商 8*PCIe GPU
Server
B厂商 8*NVLink GPU
Server
Inspur 5488M5
NLP Transformer Benchmark
(每秒钟训练单词数)
GPU系统管理优化
数量:120GPU分配:共享用途:训练用户:ALLSSD缓存
HA
P100_share
数量:96GPU分配:独享用途:训练用户:行为分析SSD缓存
P100_exclusive
数量:64GPU分配:共享用途:训练用户:ALLSSD缓存
V100_share
数量:120GPU分配:独享用途:训练用户:图像识别SSD缓存
V100_exclusive
用户数据: 代码,模型
云存储
数量:32GPU分配:共享用途:开发调试,镜像定制用户:ALLSSD缓存
P40 _debug
• 利用AIStation实现统一资源管理和调度
– 大规模AI生产平台:800+GPU卡
– GPU利用率40%提升到80%
– 作业吞吐提升3倍训练数据下载
AI计算框架GPU优化
并行机制:数据并
行/模型并行/数据+
模型并行/Pipline并
行
GPU计算充分发挥:
FP16与FP32混合
精度计算,保持训
练稳定下的大
batchsize训练
计算 梯度同步通信机制:
异步或半异步,
ring-allreduce,
2D-Torus all-
reduce
通信优化:合并小
数据,提升通信效
率;计算与通信异
步,实现隐藏
通信
并行IO,采用多线
程的数据读取机制
数据预取、数据IO
与计算异步并行
IO
AI计算框架GPU优化案例
开源地址:https://github.com/Caffe-MPI/Caffe-MPI.github.io
No. of GPUs
ima
ge
s/s
No. of GPUs
Inspur Caffe-MPI Inspur TensorFlow-Opt
实现512块GPU 24分钟完成imagenet数据集训练
• 基于HPC架构,实现数据并行,并行IO读取数据
• 基于NCCL,并采用环形通信方式
• 计算与通信异步,实现计算与通信的异步隐藏
• 实现主从模式到对等模式通信
• 合并梯度,提升通信效率
• 采用fp16通信,减少通信量
AI应用面临的挑战分析及优化思路
• 数据跟不上计算,GPU利用率低
• 模型和数据大,GPU显存溢出,如何优化
• 混合精度如何优化, Tensor Core如何高效利用
• 如何快速实现多机多GPU卡并行计算
• Pref/NVProf
• Tensorflow-timeline
• Horovod-timeline
• Teye
• GPU-driver/CUDA/cuDNN/NCCL
• 计算框架版本匹配
• CPU/GPU端、Bios设置
• CPU与GPU、GPU与GPU、节点间通信拓扑
应用瓶颈分析 GPU系统级优化 GPU代码级优化
• 训练的性能
• 训练的扩展效率
• 推理的吞吐量
• 推理的延时
AI训练应用GPU优化方法
数据IO优化数据格式、数据存储、数据
处理、数据流水线
混合精度优化使用CUDA Core & TensorCore
发挥GPU使用效率
GPU并行优化使用ring(tree)-allreduce
高效并行通信方式
数据IO优化
数据并行读取 数据并行批量预处理 数据与计算异步并行
数据IO优化案例1
某图像识别CNN模型(在P100平台训练)
• 实测单卡计算性能只有2.3TFlops,远低于P100的理论单精度浮点性能;
• 分析GPU的利用率,发现GPU只有60%左右的时间在参与计算,剩余40%的时间处于空闲状态;
• 在毫秒尺度观察GPU的使用情况,发现有周期性的0.06s左右的GPU空闲时间
数据IO优化案例1效果
通过优化图片预处理方式,可以有效的提高GPU资源的利用率,优化后GPU的使用率提升到90%左右。
数据IO优化案例2
• 应用:基于双向LSTM模型在V100训练文本分类模型
• 问题分析
– GPU核心使用率低,10%~40%
– 高维嵌入embedding_looup显存溢出
• 优化方法
– 数据IO优化:数据修改为TFRECORD,构建基于TFDATA的数据读入模式,C++多进程处理及读入数据
– 显存优化:将预加载的词典从GPU显存加载到CPU内存,在内存中进行embedding
25%
70%
0%
10%
20%
30%
40%
50%
60%
70%
80%
优化前 优化后
GPU使用率对比
混合精度优化
30036
17442
11000
0
5000
10000
15000
20000
25000
30000
35000
fp32 AMP mixfp16 AMP addtips
GP
U m
em
ory
(MB
)
某CNN网络
66
80
125
0
20
40
60
80
100
120
140
fp32 AMP mixfp16 AMP addtips
imag
es/
s
某CNN网络
• 混合精度优化
– 张量维度与TesorCore维度的适配,矩阵通道为8的倍数
– 矩阵计算的OP融合
– 增加矩阵乘加计算的比例
GPU Memory(MB) images/s
混合精度优化案例:影评分类
• 应用:影评分类
• 问题分析
– Attention模块采用两次循环生成单样本的attention向量
– 循环一次产生众多中间量及分散的OP处理
• 优化方法
– Attention模块采用两次矩阵点乘生成attention向量
– 矩阵乘采用cublas或其它矩阵库,操作高度融合,中间变量少
中文文本分词 文本嵌入CNN-ATTENTION
模型 文本分类 影评分类
327
1023
0
200
400
600
800
1000
1200
优化前 优化后
训练速度(samples/s)
GPU并行优化
75.0%
80.0%
85.0%
90.0%
95.0%
inception3 resnet101 resnet50 vgg16
GPU direct对horovod的线性比影响
开启GDR 关闭GDR
70%75%80%85%90%95%
100%
4种模型在NF5288M5和NF5468M5的线性比
1*GPU 2*GPU 4*GPU 8*GPU 16*GPU
• 数据并行
– PS/Ring-allreduce/Tree-allreduce
– MPI/Horovod(Tensorfusion/AutoTuning/GDR Support)
– NCCL/Blink( “Blink:Fast and Generic Collectives for Distributed ML” )
• 模型并行/数据+模型并行(Mesh-Tensorflow)
• PipLine并行(Gpip@NIPS2019)
基于Horovod的CNN训练实现流程✓分布式GPU环境初始化✓将GPU0的全局变量broadcast到所有GPU✓进行GPU分布式训练
Data_load
Env_intial¶ broadcast
Hvd_init
LFW
data
sets
验证,模型达到可用精度,结束
Model_init
Train_define
Triplet_select
优化策略添加hvd分布式
训练步骤循环
(hvd—dist)
Logits-embedding
Triplet_loss+regularization_loss
Triplet-loss computing
优化策略重算权重
三元组队列填充
GPU并行优化案例1:大规模图像识别训练
• 应用:大规模图像识别
• 问题分析
– 单GPU卡训练,40万图像需训练10h
– 未来训练数据将达到10亿级,存在巨大的计算挑战
• 优化方法:调整学习率以适应大规模训练的梯度调整 lr ℎ𝑣𝑑. 𝑠𝑖𝑧𝑒()
– 使用Horovod的TF并行模式实现
– 调整学习率以适应大规模训练的梯度调整 lr ℎ𝑣𝑑. 𝑠𝑖𝑧𝑒()
– 梯度融合通信
– 混合精度训练
✓ 4卡扩展效率近线性,16卡扩展效率近14倍
471040
354459.352
123873.75
0
100000
200000
300000
400000
500000
1 2 4
Train
ing
Tim
e (
s)
Total Training Time
9856
6393
2669
1315 832
0
2000
4000
6000
8000
10000
12000
1GPU 2GPU 4GPU 8GPU 16GPU
Training Time/Epoch
大规模图像识别训练GPU并行优化效果
GPU并行优化案例2:Bert预训练
• 应用:Bert预训练
• 问题分析
– 参数众多,收敛难度大,需要巨大的数据量
– 单个V100-GPU在核心及带宽利用率都接近饱和的前提上述训练时间仍以年计算
• 优化方法:数据并行策略-基于Horovod
– 变量在多进程中广播
– BERT前向传播构建
– 选择优化器,并将优化器定义为horovod并行模式
– 启动多进程训练
BERT-base:L=12, H=768, A=12,
Total Parameters=110M
BERT-large:L=24, H=1024, A=16,
Total Parameters=340M
Bert预训练GPU并行优化效果
140
296
525
1024
0
200
400
600
800
1000
1200
1 2 4 8
#GPUs
Bert-base预训练性能
57.4
115
230
544
0
100
200
300
400
500
600
1 2 4 8
#GPUs
Bert-large预训性能Samples/s Samples/s
GPU应用推理优化方法
• 单模型单数据优化
– 算法级:模型裁剪、量化、压缩、蒸馏
– 工具级:推理引擎(算子融合、访存优化、量化))
• 单模型多数据并行
– batch批量处理
• 多模型多数据并行
– NVIDIA MPS,CUDA Streams
Ref:“Dynamic Space-Time Scheduling for GPU Inference”
算法级优化:模型裁剪与压缩
0.68890.7276
0.575
0.8898 0.9101
0.803
0.68570.7465
0.59
0.88870.9248
0.804
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
GoogLeNet ResNet50 SqueezeNet
推理
精度
CNN模型
模型压缩对模型精度的影响
Top1 Top5 Top1(Compressed) Top5 (Compressed)
0.7277 0.7289 0.7183
0.9109 0.9118 0.9079
0
0.2
0.4
0.6
0.8
1
Pruned 0% Pruned50% Pruned60%
推理
精度
模型裁剪率
模型裁剪对模型精度的影响
Top1 Top5
•网络模型从32位浮点数到4位整数,压缩为1/8 •模型数据计算量减少1/2,不改变计算结构
工具级优化:推理引擎
TensorRT TVM
AI计算的发展趋势及其挑战
基于GPU的AI计算优化方法:从训练到推理
提纲
Case Study:基于GPU实现AutoML Suite计算优化
AutoML技术
原始数据
数据处理
• 数据清洗• 数据增强• 文本编码• 数据分割
特征工程
• 特征选择• 特征迁移• 序列嵌入• 图像嵌入
模型设计
• SVM• MLP• CNN• RNN
模型验证
• 混淆矩阵• P/R测试
• 人工AI建模过程
• AutoML技术:是采用自动化地方式和程式化的手段,根据开发任务自主地实现模型构建、筛选的一种技术
视觉图片数据 高效模型搜索模型部署
AutoML
浪潮AutoML Suite• 企业级一站式模型自动构建系统部署,一站可视化处理
– 本地化On-Premise部署,一站可视化处理
– 自动搜索图像分类、目标检测模型
– 多机多GPU卡高效并行模型搜索
– 按部署端所需的计算量、内存输出模型
图像分类
目标检测
数据准备
…c0 c1 cm
s0 s1 s2 sn
…
模型搜索训练
12
模型部署
SDKAPI
onnx
转换工具
Caffe TF PyTorch
AutoML应用案例
模型 平均 白天 晚上
Base模型(专家) 94.7 95.7 93.7
VCCNet17(AutoML) 94.6 95.99 93.15
不同模型在当前路口测试集分类精度对比
模型 平均 白天 夜晚
Base模型(专家) 84.9 91.3 77.5
VCCNet17(AutoML) 87.8 91.5 83.6
新整理的测试集,测试两个模型的泛化能力
• 智慧城市路口车辆颜色分类应用,一站可视化处理
– 挑战:各个路口特征不一,人工设计的模型相对通用,无法泛化到各个路口,而针对设计,需大量的模型开发工作
– 数据:某路口采集16类车辆颜色数据,共40万张图片,进行AutoML建模与人工建模对比
AutoML实际应用面临的计算性能挑战
数据量 GPU数目 搜索模型数目 搜索耗时(h) 最佳平均模型精度 训练耗时(h) 模型前向耗时(ms/张)
Train:35.7万 1 2000 54 94.6 196 59ms
模型结构
每层内部结构 每个cell内部结构
• 单机单卡运行,搜索训练慢
• 搜索的最佳模型的层数和分支过多,推理慢
cell_0 cell_1
cell_3
cell_2 cell_4
layer_base
calibrate
final_combine
Layer_0
Layer_1
Layer_2
Layer_3
Layer_4
Layer_7
Layer_8
Layer_9
Layer_10
Layer_13
Layer_14
Layer_15
Layer_16
Layer_5
Layer_11
Layer_12
Layer_6
AutoML Suite:模型搜索并行
RR R R R R
CPU
MG
更新MG参数 𝜃𝑐
MG MG
UM 0 UM 1 UM m… UM 0 UM 1 UM m… UM 0 UM 1 UM m…
…… ……
slaver1 slaver2 slaver3
master
Loss Loss Loss Loss Loss Loss Loss Loss Loss
R R R
Reward buffer
Train_batch Train_batch Train_batch
Supernet …… ……masterSupernet Supernet
UM 0 UM 1 UM m… UM 0 UM 1 UM m… UM 0 UM 1 UM m…
slaver1 slaver2 slaver3
Val_batch
MG MG MG
Acc Acc AccAcc Acc Acc Acc Acc Acc
Val_batch Val_batch
多个模型并行训练
更新超网络参数
多个模型并行搜索
并行获取验证集精度
初始化模型生成器
更新
AutoML Suite:模型训练并行
horovod初始化
进程分配
训练参数配置
模型参数广播
分布式Optimizer
模型保存
数据库
Model Gradients Averaged
Gradients
GPU0:Searching/Training Process
Model Gradients Averaged
Gradients
Model Gradients Averaged
Gradients 1. 读取数据
2. 计算模型梯度 3. 平均梯度 4. 更新模型
GPU1:Searching/Training Process
GPU N:Searching/Training Process
模型搜索和训练并行效果
• 基于cifar10的AutoML在搜索和训练中平均每个epoch耗时
247
73
45
192
57
35
0
50
100
150
200
250
300
1GPU 4GPU 8GPU
Tim
e o
f ep
och
GPU-nums
并行效率
搜索 训练
模型推理优化
模型类型 精度
/100%
FLOPs
/G
参数量
/M
前向耗时
/ms
Base
(专家) 94.7 1.54 5.18 --
Automl
(15层,5分支) 94.6 1.81 5.26 50.67
Automl
(12层,3分支) 94.23 1.04 3.58 30.05
• 分支裁剪,由5个分支减少到3个
• 层数减少,由15层减少到12层
总结
• AI应用算法的效果仍需要大量的计算支撑,而且未来推理计算需求将超过训练
• AI计算面临巨大的挑战,特别是针对单一模型的千级GPU卡并行训练及生产系统千级模型场景的并发使用,其面临异构计算架构的效率、计算规模扩展、复杂计算环境的管理与优化的挑战
• 基于GPU的AI计算优化,需从系统的角度考虑,从应用的特征出发,设计合理的GPU平台、优化GPU资源、AI框架工具、并从训练与推理应用的程序级实现更细粒度的优化,才能取得更好的性能、扩展性、吞吐与延时