大模型是如何进行推理的？-transformer的一点代码调试分析

背景 最近在学习LLM，网上资料很多，很多都是洋洋洒洒讲了一堆原理，公式、图表一堆，这些当然很重要，但是如果能有系统性的相关代码分析与调试则更能让初学者有直观的体验。这部分不能说没有，但是也不多，并且比较零散。本文试图从transformer库的代码调试分析大模型的一次推理过程，让初学者能够理解推理的本质过程。下面的图展示了大模型一次推理的基本流程。初始的prompt输入之后，经过Tokenizer、Embeding，输入字符变成相关向量，并且经过大模型神经网络的一次forward，输出vocab size大小的tensor，每个表示该词的概率大小。最终选取概率最大的作为next token。 本文主要就是从代码层面分析这个流程。 具体来讲，本文包括如下部分：…