gpu的ai计算优化方法与案例:从训练到推理 · • 优化方法 –...

43
YOUR SUCCESS, WE SUCCEED 基于GPU的AI计算优化方法与案例:从训练到推理 张清,浪潮AI首席架构师

Upload: others

Post on 28-Sep-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

YOUR SUCCESS, WE SUCCEED

基于GPU的AI计算优化方法与案例:从训练到推理

张清,浪潮AI首席架构师

Page 2: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI计算的发展趋势及其挑战

基于GPU的AI计算优化方法:从训练到推理

提纲

Case Study:基于GPU实现AutoML Suite计算优化

Page 3: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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技术创新,未来计算投入会越来越大

Page 4: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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年推理所需计算会迅速增加

Page 5: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

计算量 准确度

Page 6: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI计算面临的挑战

• AI计算架构:芯片间异构与芯片内异构

• 异构并行与协同计算

– CPU/GPU,CUDA Core/Tensor Core

• AI计算规模:K级节点、10K级GPU卡

• 性能与性能的可扩展性

– 单模型K级以上GPU并行计算

• AI计算环境:不同用户、不同算法、不同数据、不同框架、不同GPU卡

• 任务管理与资源调度

– 生产系统K级以上模型并发调度

◼ 不同

Page 7: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI计算的发展趋势及其挑战

基于GPU的AI计算优化方法:从训练到推理

提纲

Case Study:基于GPU实现AutoML Suite计算优化

Page 8: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

基于GPU的AI计算优化方法

AI应用特征分析 GPU平台优化 AI计算框架GPU优化 AI应用GPU优化

计算特征

访存特征

通信特征

IO特征

计算优化

存储优化

网络优化

资源管理

资源调度

GPU系统管理优化

数据模型划分

单机优化算法

不同通信机制

数据模型聚合

训练性能优化

训练扩展优化

推理吞吐优化

推理延时优化

Page 9: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI应用特征分析

CPU GPU

Teye工具:从微架构层次分析AI应用与框架特征,实现性能优化

MXNet

TensorFlow

Caffe

Page 10: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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左右

Page 11: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

(每秒钟训练单词数)

Page 12: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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倍训练数据下载

Page 13: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI计算框架GPU优化

并行机制:数据并

行/模型并行/数据+

模型并行/Pipline并

GPU计算充分发挥:

FP16与FP32混合

精度计算,保持训

练稳定下的大

batchsize训练

计算 梯度同步通信机制:

异步或半异步,

ring-allreduce,

2D-Torus all-

reduce

通信优化:合并小

数据,提升通信效

率;计算与通信异

步,实现隐藏

通信

并行IO,采用多线

程的数据读取机制

数据预取、数据IO

与计算异步并行

IO

Page 14: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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通信,减少通信量

Page 15: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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代码级优化

• 训练的性能

• 训练的扩展效率

• 推理的吞吐量

• 推理的延时

Page 16: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI训练应用GPU优化方法

数据IO优化数据格式、数据存储、数据

处理、数据流水线

混合精度优化使用CUDA Core & TensorCore

发挥GPU使用效率

GPU并行优化使用ring(tree)-allreduce

高效并行通信方式

Page 17: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

数据IO优化

数据并行读取 数据并行批量预处理 数据与计算异步并行

Page 18: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

数据IO优化案例1

某图像识别CNN模型(在P100平台训练)

• 实测单卡计算性能只有2.3TFlops,远低于P100的理论单精度浮点性能;

• 分析GPU的利用率,发现GPU只有60%左右的时间在参与计算,剩余40%的时间处于空闲状态;

• 在毫秒尺度观察GPU的使用情况,发现有周期性的0.06s左右的GPU空闲时间

Page 19: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

数据IO优化案例1效果

通过优化图片预处理方式,可以有效的提高GPU资源的利用率,优化后GPU的使用率提升到90%左右。

Page 20: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

数据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使用率对比

Page 21: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

混合精度优化

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

Page 22: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

混合精度优化案例:影评分类

• 应用:影评分类

• 问题分析

– Attention模块采用两次循环生成单样本的attention向量

– 循环一次产生众多中间量及分散的OP处理

• 优化方法

– Attention模块采用两次矩阵点乘生成attention向量

– 矩阵乘采用cublas或其它矩阵库,操作高度融合,中间变量少

中文文本分词 文本嵌入CNN-ATTENTION

模型 文本分类 影评分类

327

1023

0

200

400

600

800

1000

1200

优化前 优化后

训练速度(samples/s)

Page 23: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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)

Page 24: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

基于Horovod的CNN训练实现流程✓分布式GPU环境初始化✓将GPU0的全局变量broadcast到所有GPU✓进行GPU分布式训练

Data_load

Env_intial&para 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 ℎ𝑣𝑑. 𝑠𝑖𝑧𝑒()

– 梯度融合通信

– 混合精度训练

Page 25: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

✓ 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并行优化效果

Page 26: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

Page 27: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

Page 28: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

GPU应用推理优化方法

• 单模型单数据优化

– 算法级:模型裁剪、量化、压缩、蒸馏

– 工具级:推理引擎(算子融合、访存优化、量化))

• 单模型多数据并行

– batch批量处理

• 多模型多数据并行

– NVIDIA MPS,CUDA Streams

Ref:“Dynamic Space-Time Scheduling for GPU Inference”

Page 29: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

算法级优化:模型裁剪与压缩

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,不改变计算结构

Page 30: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

工具级优化:推理引擎

TensorRT TVM

Page 31: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AI计算的发展趋势及其挑战

基于GPU的AI计算优化方法:从训练到推理

提纲

Case Study:基于GPU实现AutoML Suite计算优化

Page 32: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

AutoML技术

原始数据

数据处理

• 数据清洗• 数据增强• 文本编码• 数据分割

特征工程

• 特征选择• 特征迁移• 序列嵌入• 图像嵌入

模型设计

• SVM• MLP• CNN• RNN

模型验证

• 混淆矩阵• P/R测试

• 人工AI建模过程

• AutoML技术:是采用自动化地方式和程式化的手段,根据开发任务自主地实现模型构建、筛选的一种技术

视觉图片数据 高效模型搜索模型部署

AutoML

Page 33: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

浪潮AutoML Suite• 企业级一站式模型自动构建系统部署,一站可视化处理

– 本地化On-Premise部署,一站可视化处理

– 自动搜索图像分类、目标检测模型

– 多机多GPU卡高效并行模型搜索

– 按部署端所需的计算量、内存输出模型

图像分类

目标检测

数据准备

…c0 c1 cm

s0 s1 s2 sn

模型搜索训练

12

模型部署

SDKAPI

onnx

转换工具

Caffe TF PyTorch

Page 34: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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建模与人工建模对比

Page 35: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

Page 36: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

多个模型并行训练

更新超网络参数

多个模型并行搜索

并行获取验证集精度

初始化模型生成器

更新

Page 37: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

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

Page 38: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

模型搜索和训练并行效果

• 基于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

并行效率

搜索 训练

Page 39: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

模型推理优化

模型类型 精度

/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层

Page 40: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据

总结

• AI应用算法的效果仍需要大量的计算支撑,而且未来推理计算需求将超过训练

• AI计算面临巨大的挑战,特别是针对单一模型的千级GPU卡并行训练及生产系统千级模型场景的并发使用,其面临异构计算架构的效率、计算规模扩展、复杂计算环境的管理与优化的挑战

• 基于GPU的AI计算优化,需从系统的角度考虑,从应用的特征出发,设计合理的GPU平台、优化GPU资源、AI框架工具、并从训练与推理应用的程序级实现更细粒度的优化,才能取得更好的性能、扩展性、吞吐与延时

Page 41: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据
Page 42: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据
Page 43: GPU的AI计算优化方法与案例:从训练到推理 · • 优化方法 – 数据IO优化:数据修改为TFRECORD,构建基于TFDATA 的数据读入模式,C++多进程处理及读入数据