前置知识
分类: LM大模型&微调
一、 大模型在物理上到底是什么?(它的“解剖图”)
当你在开源社区(如 Hugging Face 或 魔搭 ModelScope)下载一个大模型时,你其实下载的是一个文件夹。无论这个模型叫 LLaMA、Qwen 还是 ChatGLM,这个文件夹里通常只包含三个核心部件:
- 配置文件 (Config):模型的“建筑图纸”
- 是什么:这通常是一个很小的文本文件(比如
config.json)。
- 作用:它告诉计算机这个模型长什么样。比如它有多少层神经网络、大脑的“神经元”是怎么连接的。没有图纸,计算机就不知道该怎么搭建这个大脑的物理结构。
- 分词器 (Tokenizer):模型的“新华字典”
- 是什么:通常包含几个词表文件(比如
tokenizer.model 或 vocab.json)。
- 作用:大模型是个数学机器,它根本不认识人类的汉字或英文字母,它只认识数字。分词器就是一本字典,负责把你的输入(比如“你好”)翻译成一串数字(比如 [123, 456]),然后再把模型吐出来的数字翻译回人类语言。
- 权重文件 (Weights):模型的“灵魂与记忆”
- 是什么:这是文件夹里体积最大的东西,通常有几个 GB 甚至几十 GB(包含了那几十亿、上百亿个参数)。
- 作用:这是模型在超级计算机里“读了万卷书”后,沉淀下来的所有知识。本质上就是几十亿个小数。
二、 常见的开源模型格式(不同的“包装盒”)
这些巨大的“权重文件”(记忆)在开源界有几种不同的包装格式,代表了不同的使用场景:
.safetensors(主流、现代格式)
- 概念:这是目前最推荐、最流行的格式。顾名思义,它主打“安全”和“极速”。
- 特点:加载速度非常快,而且不会像旧格式那样可能暗藏恶意代码。你在 LLaMA-Factory 里微调的,通常就是这种格式。
.bin 或 .pt(传统 PyTorch 格式)
- 概念:这是老一代的格式,本质上是 Python 的序列化文件(Pickle)。
- 特点:由于它能包含任意代码,如果下载了来源不明的
.bin 文件,可能会有安全风险。现在正逐渐被 .safetensors 淘汰。
.gguf / .ggml(平民化、移动端格式)
- 概念:这是一种专门为了“在没有高端显卡的普通电脑(甚至手机、MacBook)上运行”而发明的格式。
- 特点:它通常伴随着“极度压缩”(量化),牺牲了一点点智商,换来极小的体积。像 Ollama 这种本地运行工具,用的就是这个格式。注意:LLaMA-Factory 一般不用这个格式来做微调,微调需要完整的高精度模型。
三、 模型是如何被加载和运行的?(从“仓库”到“工作台”)
想象你的电脑是一个巨大的工厂:
- 硬盘 = 漆黑的地下仓库(存储空间大,但动作极慢)。
- 内存 (RAM) = 一楼的中转大厅。
- 显存 (VRAM / GPU) = 核心无尘车间里的高速工作台(空间极小,寸土寸金,但计算速度快如闪电)。
模型加载的抽象过程如下:
- 打地基:计算机先从硬盘(仓库)读取“建筑图纸 (Config)”,在显存(工作台)里把模型空壳子搭建起来。此时,这个大脑里是空的,智商为零。
- 搬运记忆:计算机把几十 GB 的“权重文件”,从硬盘一路搬运,途经内存,最终倒进显存的那个空壳子里。
- 准备翻译:把“分词器 (Tokenizer)”加载到内存里,随时准备为人类和模型做翻译。
为什么显存 (VRAM) 如此重要?(OOM 噩梦的来源)
这就是为什么玩大模型总是要看显卡。如果你的大模型“记忆”有 14GB 那么大,但你的显卡“工作台”只有 8GB 的面积。装不下,工作台就会崩溃,这就是著名的 OOM (Out Of Memory,内存溢出)。
为了解决这个问题,算法工程师发明了量化 (Quantization) 技术:把那些非常精确、占地方的长小数(比如 3.1415926),粗暴地切成短小数(比如 3.1)。这样书本变薄了,8GB 的工作台也能放下 14GB 的模型了,代价就是模型变稍微“笨”了一点点。