《2020年终大会-自然语言处理:6-5.pdf》由会员分享,可在线阅读,更多相关《2020年终大会-自然语言处理:6-5.pdf(28页珍藏版)》请在三个皮匠报告上搜索。
1、LightSeq:高性能NLP序列推理实践王晓晖ByteDance AI LabLightfeqA#page#010302CUDA压缩量化TVM#page#01CUDA#page#项目介绍基于CUDAToolkit,聚焦NLP序列模型推理支持Bert/GPT/Transformer及VAE支持Beam Search/Diverse Beam Search/sampling2019.7上线FP32,2019.09上线FP16,2019.12开源#page#项目背景模型应用广泛,例如机器翻译、智能写作、自动问答等原生深度学习框架,如TensorFlow、PyTorch,秒级延退模型结构收敛,复用性
2、高,研发成本可控#page#优化方法算子多运算融合动态显存复用层级式解码计算#page#算子多运算融合TF和LightSeg中的Layer Normalization1mean=tf.reduce_mean(x,axis=-1)b:and rolumean)2variance=tf.reducemean(tf.square(xFFNmean)*tf.rsqrt(varianceepsilon)3norm=(x-Y=Y.Wscale+bias4result=normLNandntemplate ctypenTbias)Y=Y.W+binti=blockIdx.adIdx.xpeubrsu*bLo
3、ckDfloat vaatrixi;odwuso/step8.shared_float s_meanfloat reduce_ref(threadIdxx=0)5sofma_syncthreads(;S=QK/pshared_foat s_var;Custom kernroshap0.KVif(threadIdx.x=)O.KV=X.(WoWxW)+CUBLAS GEMMsvar=rsgrtf(reduce_res/float(blocki.e0sf1onsyncthreads;LNandresldual/step 2.layer norsmatrixi=X=X+XAS*1EA#page#动态
4、内存复用对动态维度限定最大值,如序列长度模型加载时分配所有张量显存,对动态维度,按最大值分配计算图优化,无依赖张量复用显存模型服务期间无内存申请释放,单T4GPU可部署8个Transformer Big#page#层级式解码计算TensorFlow1#1.计算以每个token为结尾的序列的Logprobability2 og_token_prob=tf.nn.log_softmax(logit)#batch_size,beam_size,vocab_size3 log_seq_prob += log_token_prob #fbatch_size,beam_size,vocab_size4 L
5、og_seq_prob = tf.reshape(log_seq_prob,-l,beam_size vocab_size)5#2.为每个序列(batchelement)找出排名topk的token0-0S0S152sn6 topk_log_probs,topk_indices=tf.nn.top_k(log_seq_prob,k=K)S20-1S0S1sn7#3,根据beamid,刷新decoder中的seifattention模块中的key和value的缓存1-0S1S2SnS08refresh_cache(cache,topk_indices)S1S21-1S0snlogitsBatch
6、size=2存在元余计算,难以并行化,占一次推理延退的30%+beam=2nisvocab sizeA#page#层级式解码计算LightSeq粗选+精排。粗选过程,遍历logit矩阵两次:1.对每个beam,将其logit值随机分成k组,每组求最大值,然后对k个最大值求最小值,作为一个粗略的topk值,记为Rtopk2.对每个beam,将每个大于Rtopk的logit值,写入精排队列24243512粗选-第一次遍历1586372424351137415865粗选-第二次遍历直接排序1112223344455678441578精排#page#性能分析1.矩阵乘法占比80%+,已成推理效率主要矛