前置知识

分类: LM大模型&微调

一、 大模型在物理上到底是什么?(它的“解剖图”)

当你在开源社区(如 Hugging Face 或 魔搭 ModelScope)下载一个大模型时,你其实下载的是一个文件夹。无论这个模型叫 LLaMA、Qwen 还是 ChatGLM,这个文件夹里通常只包含三个核心部件:

  1. 配置文件 (Config):模型的“建筑图纸” - 是什么:这通常是一个很小的文本文件(比如 config.json)。 - 作用:它告诉计算机这个模型长什么样。比如它有多少层神经网络、大脑的“神经元”是怎么连接的。没有图纸,计算机就不知道该怎么搭建这个大脑的物理结构。
  2. 分词器 (Tokenizer):模型的“新华字典” - 是什么:通常包含几个词表文件(比如 tokenizer.modelvocab.json)。 - 作用:大模型是个数学机器,它根本不认识人类的汉字或英文字母,它只认识数字。分词器就是一本字典,负责把你的输入(比如“你好”)翻译成一串数字(比如 [123, 456]),然后再把模型吐出来的数字翻译回人类语言。
  3. 权重文件 (Weights):模型的“灵魂与记忆” - 是什么:这是文件夹里体积最大的东西,通常有几个 GB 甚至几十 GB(包含了那几十亿、上百亿个参数)。 - 作用:这是模型在超级计算机里“读了万卷书”后,沉淀下来的所有知识。本质上就是几十亿个小数。

二、 常见的开源模型格式(不同的“包装盒”)

这些巨大的“权重文件”(记忆)在开源界有几种不同的包装格式,代表了不同的使用场景:

  • .safetensors(主流、现代格式)
  • 概念:这是目前最推荐、最流行的格式。顾名思义,它主打“安全”和“极速”。
  • 特点:加载速度非常快,而且不会像旧格式那样可能暗藏恶意代码。你在 LLaMA-Factory 里微调的,通常就是这种格式。
  • .bin.pt(传统 PyTorch 格式)
  • 概念:这是老一代的格式,本质上是 Python 的序列化文件(Pickle)。
  • 特点:由于它能包含任意代码,如果下载了来源不明的 .bin 文件,可能会有安全风险。现在正逐渐被 .safetensors 淘汰。
  • .gguf / .ggml(平民化、移动端格式)
  • 概念:这是一种专门为了“在没有高端显卡的普通电脑(甚至手机、MacBook)上运行”而发明的格式。
  • 特点:它通常伴随着“极度压缩”(量化),牺牲了一点点智商,换来极小的体积。像 Ollama 这种本地运行工具,用的就是这个格式。注意:LLaMA-Factory 一般不用这个格式来做微调,微调需要完整的高精度模型。

三、 模型是如何被加载和运行的?(从“仓库”到“工作台”)

想象你的电脑是一个巨大的工厂:

  • 硬盘 = 漆黑的地下仓库(存储空间大,但动作极慢)。
  • 内存 (RAM) = 一楼的中转大厅。
  • 显存 (VRAM / GPU) = 核心无尘车间里的高速工作台(空间极小,寸土寸金,但计算速度快如闪电)。

模型加载的抽象过程如下:

  1. 打地基:计算机先从硬盘(仓库)读取“建筑图纸 (Config)”,在显存(工作台)里把模型空壳子搭建起来。此时,这个大脑里是空的,智商为零。
  2. 搬运记忆:计算机把几十 GB 的“权重文件”,从硬盘一路搬运,途经内存,最终倒进显存的那个空壳子里。
  3. 准备翻译:把“分词器 (Tokenizer)”加载到内存里,随时准备为人类和模型做翻译。

为什么显存 (VRAM) 如此重要?(OOM 噩梦的来源)

这就是为什么玩大模型总是要看显卡。如果你的大模型“记忆”有 14GB 那么大,但你的显卡“工作台”只有 8GB 的面积。装不下,工作台就会崩溃,这就是著名的 OOM (Out Of Memory,内存溢出)

为了解决这个问题,算法工程师发明了量化 (Quantization) 技术:把那些非常精确、占地方的长小数(比如 3.1415926),粗暴地切成短小数(比如 3.1)。这样书本变薄了,8GB 的工作台也能放下 14GB 的模型了,代价就是模型变稍微“笨”了一点点。