赞
踩
Transformer是一种基于注意力机制的深度神经网络结构,常用于文本生成、机器翻译等NLP任务。目前常用的Transformer类模型架构主要有三种:
结构 | 例子 | – |
---|---|---|
仅编码器(EncoderOnly) | bert,T5 | 输入为一整个句子 |
仅解码器(DecoderOnly) | GPT | 输入为掩码后的句子,不断循环得到结果 |
Encoder-Decoder | Transformer | 编码器负责将输入序列转换为隐藏状态,解码器则将该隐藏状态作为输入,生成输出序列。 |
当存在多个连续的内核时,个内核都需要从全内存中读取数据,并将结果写到全局内存。这涉及到内核之间的数据传输和同步操作,会引入额外延迟和开销而通过融合这些内核,可以减少数据传输和同步次数,从而提整体的性能和效率。
GPU Kernel融合的过程包以下步骤:
通过GPU Kernel融合,可以减少内核之间的通信和数据传输开销提高GPU程序性能和效率这对于需要执行多个连续计算任务的应用程序特别有益,例如图像处理、机器学习和科学计算等领域。
// https://jaykmody.com/blog/gpt-from-scratch/#decoder-block
def generate(inputs, params, n_head, n_tokens_to_generate):
from tqdm import tqdm
for _ in tqdm(range(n_tokens_to_generate), "generating"): # auto-regressive decode loop
logits = gpt2(inputs, **params, n_head=n_head) # model forward pass
next_id = np.argmax(logits[-1]) # greedy sampling
inputs.append(int(next_id)) # append prediction to input
return inputs[len(inputs) - n_tokens_to_generate :] # only return generated ids
logits, kvcache = gpt2(inputs, **params, n_head=n_head, kvcache=kvcache) # model forward pass
,最终代码如下:// https://jaykmody.com/blog/gpt-from-scratch/#decoder-block
kvcache = None
for _ in tqdm(range(n_tokens_to_generate), "generating"): # auto-regressive decode loop
logits, kvcache = gpt2(inputs, **params, n_head=n_head, kvcache=kvcache) # model forward pass
next_id = np.argmax(logits[-1]) # greedy sampling
inputs = np.append(inputs, [next_id]) # append prediction to input
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。