后端程序员的LLM 概念扫盲
最近做Agent 开发一个来月,在逐渐习惯模型的不确定性和机器代码的确定性之间作取舍的同时,也越来越对模型本身产生好奇。我时常觉得自己是"半路出家",转专业硕士毕业之后一直在做后端开发,对算法工程师的工作内容可以说完全是雾里看花。
不过好在也算生而逢时,LLM的出现让我的学习效率有很大的提升,让我可以用碎片化时间很自由地学习以前不懂的技术知识。LLM是一个例子,这里记录一下我和AI学习AI的过程,反刍一下,也会有更好的理解和记忆。
概念扫盲
1. LLM模型是什么?
对于一个程序员来说,程序是机器指令+输入输出。但是在AI模型领域,也是模型+输入输出,但是模型和程序是不一样的。程序走的是机器指令,这些机器指令是由代码编译过来的,而代码则定义了确定的程序执行逻辑。这也就是为什么程序可以是逻辑严谨的,相对来说是“白盒”的,因为代码是可读的、人为编写的。
而模型不是,模型是“不可靠”、“黑盒”的,是因为它的本质是一个千亿浮点数组成的只读文件,或者说一个只读数据库,存储了千亿浮点数,这些浮点数就是模型参数。而这些浮点数的值,是由统计学回归的,或者说是训练后趋于稳定的。一个充满浮点数的巨大文件,当然是不可理解的,因此它是不确定的,黑盒的。
2. 训练模型是在干什么?
前面已经知道模型的本质是参数文件,文件中的每一个参数是一个固定值,文件本身是只读的。当一个模型投入使用后,模型的参数就是固定的。确定这些参数的过程,就是训练。在训练前,所有的浮点数可以初始化为随机值,是什么无所谓,而当大量的数据通过模型文件,进行训练,参数浮点数会不断回归,最后趋于稳定。所以简单来说模型的训练,就是将参数从随机到确定值的过程。
3. 模型的训练为什么需要大量GPU?
GPU相比CPU,它的特点就是可以告诉并行地执行简单地运算。它特别擅长做模型推理所需的矩阵乘法。在这个前提下,训练需要海量数据和计算来“反向传播”调整那数千亿个参数。这个过程必须用GPU集群并行处理矩阵运算,所以好的、多的GPU是会提高训练效率的。
4. 模型的推理是在做什么?
模型的推理,本质上是做“预测”。根据用户的输入,在浮点树组成的千亿维度矩阵里,推断下一个应该出现的token是什么。或者说如果模型是数据库,推理的过程像是一次查询。根据前面的结果,查询到下一个最有可能出现的结果,一直进行。
工程部署
1. 模型部署的时候,在部署什么?
当我知道模型本身是一个千亿浮点数的文件的时候,以我后端程序员的理解,总不会在运算的时候把文件全部加载到内存进行运算吧。没错,真是这样,训练好的数千亿参数,被打包成一个或几个文件。例如,一个700亿参数的模型,如果每个参数用16位浮点数存储,文件大小约为 140GB。是的,真的就把这个“100多GB的数据库”直接加载到内存里。现在的AI服务器,标配就是1TB或2TB的内存,以及多块80GB显存的GPU(如A100/H100)。在这种环境下,加载一个140GB的模型,对硬件来说是常规操作。
2. 本地部署是什么?
用户的日常本子总没有这么大的内存和显存,怎么做到的本地部署,“大模型”其实有不同规模,而“本地部署”通常指的是那些经过压缩的小尺寸版本。阉割版小型模型参数量少,对资源的要求自然低很多。小模型可以通过精度压缩,降低浮点数的位数。比如将每个参数从2字节(FP16)压缩到1字节(INT8)甚至0.5字节(INT4)。例如,一个7B模型用INT4量化后,仅需3.5GB,加上一些中间缓冲区,5~6GB内存就能运行,来到了日常PC的舒适区。
另外CPU其实也可以做矩阵运算的,只不过比GPU慢点。CPU推理的速度主要受限于内存带宽(把参数从内存搬运到CPU缓存的速度),而不是CPU算力。
3. 推理时,服务器内部在做什么?
简单理解,内存RAM是CPU用的,显存VRAM是GPU显卡用的。这种配置是为了各自的计算能力和带宽考虑的。
在典型的独立显卡配置下,推理时的数据流是这样的:
模型加载:推理服务启动时,将模型文件从磁盘读入内存(RAM)。
参数传输:将模型参数从内存拷贝到显存(VRAM)。这一步完成后,参数就常驻显存。
推理循环:
CPU处理输入文本,得到Token IDs,放在内存中。
CPU通过PCIe总线将Token IDs拷贝到显存。
GPU从显存读取Token IDs和模型参数,执行计算,中间结果(激活值、KV缓存)也存放在显存。
计算完成后,输出结果(logits)从显存拷贝回内存。
CPU根据logits采样,生成下一个Token ID,重复上述过程。
关键点:PCIe总线是连接CPU/内存和GPU/显存的通道,它的带宽(通常16~64 GB/s)远低于显存带宽,但高于磁盘。因此,尽量减少内存与显存之间的数据拷贝(比如一次拷贝一批Token,而不是每次一个)对性能至关重要。
深入探讨
1. 什么是过拟合?
前面说了训练后浮点数会达到一个稳定值,这个稳定值,并不是指向一个唯一的数值,而是一个在高维空间中找到的、能让模型在训练数据上损失最小的平衡点。这个平衡点编码了“世界运行的逻辑”,让模型面对新问题时,能通过参数间的复杂组合来生成答案。
过拟合,指的是它只对特定问题有非常准确的结果,像是机器代码的执行,而丧失了推理和灵活性。过度将浮点数拟合为对某些任务非常准确,缺对通用任务准确性降低。类比来说就是代码中的hard-coding,写死了,不灵活。总的来说,可以将过拟合理解为一种**“失去了泛化能力的过度调优”**。在大模型(LLM)的场景下,追求的是模型能理解语言的底层逻辑,而不是记住某一段具体的语料。
2. 什么是tokenization和embedding?
Tokenization是大模型处理文本的第一步,它的任务是把自然语言转换成计算机能处理的“离散序列”。前面说过模型是千亿参数的文件,它接收输入后会进行向量计算,也就是说模型本身的参数是为向量提供的。自然语言到向量的过程就是分词+嵌入。
简单理解分词就是做了两个事:1. 把自然语言分割成token,2. 把分割成的token映射成一个具体的整数(这个映射基于预先定义的字典map)。
Embedding将分词过后所有token的离散的 ID 映射到高维连续空间的“语义坐标”,这个时候,自然语言变成了高维空间里的“向量”,可以参与运算了。Embedding 过后,自然语言就具备了向量的数学特征,根据在多维空间中的距离,语言也就有了关联性。例如:
Token ID(编号): 比如 猫 是 101,狗 是 102。101 和 102 只是序列号,它们数值上的接近不代表含义的接近。
Embedding(坐标): 每一个 Token 会被转换成一个由几百甚至上千个浮点数组成的向量(Vector)。
猫 → [0.12, -0.58, 0.91, …]
狗 → [0.15, -0.55, 0.88, …]
在多维空间里,这两个坐标点靠得非常近,这代表模型认为它们的语义是相似的。
3. 什么是后训练?
前面说模型的推理本质上是在做“预测”,因此,在大量语料完成训练的时候,如果直接问模型一个问题:如何写一个Java 单例模式?此时模型会接着预测这句话后面最可能出现什么,它会吐出:是面试时一个经典问题…… 并不是目前我们问GPT那种一问一答的效果。想要得到这种效果,靠的是后训练。后训练的目标是指令遵循(Instruction Following): 让模型明白“问题”和“答案”的区别。和对齐(Alignment): 让模型的价值观、语气和安全性符合人类要求(比如不教人制造危险品)。
拓展理解
1. LLM和机器学习有什么区别?
LLM属于机器学习的范畴。机器学习是个大的概念,机器学习的核心是用数据驱动算法,而非硬编码规则。现在广为认知的是目前的大语言模型,因为它让模型的通用性大大增加。
2. Transformer是LLM架构还是ML架构?
ML是一个很大的领域,其中DL深度学习特指“神经网络”这一类特定的设计模式。Transformer: 是一种具体的神经网络拓扑结构。它就像是分布式系统里的“感应式总线”设计,核心专利是 Self-Attention(自注意力机制)。所以Transformer是DL的架构,是ML架构中的一种。而LLM属于DL,所以Transformer不只是LLM的架构,而是因为LLM 被人们熟知而被强绑定了。
3. 多模态和LLM有什么区别?
LLM是语言模型,多模态则增加音频,图像,视频的处理能力。现在的多模态模型支持原生多模态,就是直接用音频,图像等原始数据进行训练,这样模型对图像的理解会更好。
4. 为什么有限的参数集,可以解决无限的问题?
这个问题我直接整理了AI的回答,我认为非常好:
首先,参数并不是一个个独立的知识点存储器。参数是通过协同工作来编码规律和模式的。就像傅里叶变换可以用有限的正弦波系数组合出任意复杂的信号,神经网络通过层层叠加的非线性变换,将输入空间映射到输出空间。这背后的数学支撑是通用近似定理:一个足够深、足够宽的前馈神经网络,理论上可以逼近任意复杂的连续函数。所以,从数学上讲,有限参数确实可以表示无穷多种输入输出关系,只要这个关系的复杂度不超过网络的表示能力。
其次,世界运行的逻辑,本质上是“可压缩的”。现实世界(包括人类语言、常识、推理)并不是完全随机的,它充满了结构、规律和冗余。比如语法规则、物理定律、因果关系、叙事模式……这些东西都可以被高度压缩。大模型通过海量数据和巨大参数量,找到了一个非常高效的压缩表示,这个表示能够捕捉语言和知识背后的统计规律,从而在面对新问题时,能够基于学到的规律进行推演。
最后,模型并没有真正像人一样理解世界运行的逻辑。它没有意识、没有意图,也不具备真正的因果推理能力。它只是学会了在给定输入时,输出最符合训练数据分布的答案。
从工程角度看,可以把大模型看作一个超级复杂的、可微分的“查找+组合”引擎。它把训练数据压缩进了参数矩阵,然后根据输入,动态地解压出最合适的回答。这个过程虽然神奇,但归根结底,仍然是数学和统计的产物,而不是魔法。
只是扫盲,让我对模型有了一些concrete的理解,倒是没有对模型去魅,更多的是对真实世界去魅。似乎真实世界也如模型一样,并非有无线细节和无线可能,而是有边界,有规律,有命运。
下一篇再了解学习一下Transformer架构
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)