Performance

July 10, 2022 ยท View on GitHub

Training Speedup

The following tables are comparisons of performance between different implementations of Transformers and optimizers, training on V100 and A100 with Transformer models with different number of layers. We use wps (words per second) to measure the speed.

PyTorch

6e6d (one V100)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
51237814677116311.243.08
1024803110270193051.282.40
20481606119646286231.221.78
40962345127664357121.181.52
81922879432134404541.121.40
150003175334220433921.081.37

6e6d (eight V100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
5122600531274618641.202.38
102458071677101118581.171.93
20481062711301521828681.221.72
40961670081927412456461.151.47
81922088732241612929321.071.40
15000237337OOM323812N/A1.36

6e6d (eight A100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
51233300408001024001.233.08
102476500853001954001.122.55
20481661001829003439001.102.07
40962838003245004957001.141.75
81923865004216006102001.091.58
150004456005001006831001.121.53

12e12d (eight V100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
5121161615439358481.333.09
10243162835320633551.122.00
204860279700851025941.161.70
4096919471069741368991.161.49
8192OOMOOM160846N/AN/A
15000OOMOOMOOMN/AN/A

12e12d (eight A100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
5122030022100621001.093.06
102442500462001191001.092.58
2048911001040002031001.141.95
40961626001821002833001.121.74
81922042002367003426001.161.68
15000OOMOOMOOMN/AN/A

24e24d (eight V100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
51272768747204181.202.81
10241591617439348921.102.19
20483268738353554111.171.70
4096OOMOOMOOMN/AN/A
8192OOMOOMOOMN/AN/A
15000OOMOOMOOMN/AN/A

24e24d (eight A100s)

batch_tokensFairseqFairseq+ApexFairseq+LightSeqFairseq+Apex speedupFairseq+LightSeq speedup
5121030011300356001.103.46
10242080023400653001.133.14
204848100541001093001.122.27
409686100963001501001.121.74
8192OOMOOMOOMN/AN/A
15000OOMOOMOOMN/AN/A

TensorFlow

6e6d (one V100)

batch_tokensNeurSTNeurST+LightSeqNeurST+LightSeq speedup
512476599892.10
10247066144792.05
204810157210152.07
409618499275841.49
819223776332121.40
1500025677357391.39

6e6d (eight V100s)

batch_tokensNeurSTNeurST+LightSeqNeurST+LightSeq speedup
51234761548201.58
102459561940211.58
2048978431497991.53
40961503781985481.32
81921814752419141.33
150002003582670031.33

Kernel Speedup

The following tables are comparisons of performance between different implementations of CUDA kernels, running on one V100.

Dropout

fp32

total_counts (m)PyTorchTensorFlowDeepSpeedLightSeq
0.11.000.372.452.37
0.51.000.321.752.16
11.000.381.431.84
21.000.351.141.56
51.000.470.931.35
101.000.640.811.24
201.000.900.741.15
501.000.920.721.10
1001.000.930.701.08

fp16

total_counts (m)PyTorchTensorFlowDeepSpeedLightSeq
0.11.000.382.462.42
0.51.000.392.012.38
11.000.401.582.30
21.000.411.341.75
51.000.431.031.62
101.000.450.961.38
201.000.650.801.27
501.000.900.751.16
1001.000.890.721.12

Softmax

fp32

batch_sizeseq_lenPyTorchTensorFlowDeepSpeedLightSeq
256321.000.221.161.20
128641.000.291.101.36
85961.000.351.011.40
681281.000.401.111.45
641601.000.380.921.37
451921.000.420.961.39
422241.000.400.951.42
322561.000.440.991.38
282881.000.391.161.35
253201.000.391.281.38

fp16

batch_sizeseq_lenPyTorchTensorFlowDeepSpeedLightSeq
256321.000.202.422.09
128641.000.232.562.74
85961.000.292.422.80
681281.000.322.623.28
641601.000.342.232.73
451921.000.392.433.03
422241.000.392.393.25
322561.000.422.473.38
282881.000.451.582.67
253201.000.451.742.84