# 大模型的存在形式与运行方式

## 文档目的

整理一个常见但容易混淆的问题：像 GPT、Claude、DeepSeek 这类大模型，究竟是以什么形式存在的？它们是不是一个可执行程序？这篇文档给出一个面向非研究视角、但足够准确的工程解释。

一句话结论：

> 大模型本体通常不是传统意义上的单个可执行程序，而更接近“模型权重 + 模型结构 + tokenizer + 推理运行时”的组合；用户日常接触到的 ChatGPT、Claude、DeepSeek 往往还是在这之上再包了一层产品与服务系统。

---

## 1. 大模型是不是一个可执行程序？

严格来说，**通常不是**。

更准确地说，大模型可以拆成两层来看：

1. **模型本体**：训练得到的参数、结构定义、tokenizer、配置文件
2. **运行系统**：加载这些文件并执行推理的软件框架或服务

所以如果类比传统软件：

- 模型更像“内容/参数文件”
- 推理框架更像“播放器/解释器/运行时”
- 聊天网页或 API 更像“产品外壳”

因此，大模型不是简单的 `.exe`、`.app` 或单个二进制程序，而是一个**数学模型 + 工程运行系统**的组合体。

---

## 2. 大模型最核心的存在形式：参数/权重文件

大模型经过训练后，最核心的产物是**参数（parameters）**，也常叫：

- 权重（weights）
- checkpoint
- 模型文件

这些参数本质上是大量数值矩阵，用来表示模型在训练中学到的模式。

### 2.1 从存储角度看，它是什么

从文件系统角度看，大模型通常表现为一组文件，例如：

- `model.safetensors`
- `pytorch_model.bin`
- `consolidated.00.pth`
- `*.gguf`

这些文件本身不是“会主动运行的程序”，而是：

- 被训练好的神经网络参数快照
- 供推理程序加载的模型数据

### 2.2 为什么文件会很大

因为参数量非常大。

例如：

- 7B 模型：约 70 亿参数
- 70B 模型：约 700 亿参数

如果每个参数使用 2 字节存储，那么仅参数本身就可能达到几十 GB 到上百 GB。

因此，很多人第一次接触本地模型时会发现：

- 模型文件很大
- 往往要分片存储
- 需要量化后才能更容易在本地运行

---

## 3. 只有权重还不够：还需要模型结构定义

即使拿到了模型文件，也不能自动运行。还需要知道：

- 模型有多少层
- hidden size 是多少
- attention 怎么计算
- 使用什么位置编码
- 词表与 tokenizer 如何工作
- 特殊 token 如何定义

因此，一个可用的大模型通常不只是一个权重文件，而是一组配套文件，例如：

- `config.json`
- `tokenizer.json`
- `tokenizer_config.json`
- `special_tokens_map.json`
- `generation_config.json`
- 若干权重分片文件

可以理解为：

- **权重** = 学到的内容
- **结构配置** = 这些内容该如何组合与计算
- **tokenizer** = 文字与 token 之间的映射规则

---

## 4. tokenizer 是什么，为什么它也属于模型的一部分

大模型并不直接处理“汉字、英文单词、标点”本身，而是处理 token。

所以在模型运行前后，必须经过 tokenizer：

1. 把输入文本切分成 token
2. 把 token 映射成 ID
3. 模型对这些 ID 进行计算
4. 再把输出的 token ID 还原成文本

这意味着：

- 同样一句话，不同 tokenizer 的切分结果可能不同
- tokenizer 与权重、模型结构通常是绑定的
- tokenizer 不匹配时，模型效果会显著异常

所以工程上，大模型通常不是“只有一个权重文件”，而是“**权重 + tokenizer + 配置**”一起构成可运行单元。

---

## 5. 真正让模型跑起来的是推理引擎（Inference Engine）

模型文件本身不会自己回答问题，必须由推理引擎来加载和执行。

常见推理运行时包括：

- PyTorch
- Hugging Face Transformers
- vLLM
- TensorRT-LLM
- llama.cpp
- Ollama（更偏产品化封装）

这些运行时负责：

- 加载模型权重到内存或显存
- 调用 tokenizer 处理输入
- 按模型结构逐层做矩阵计算
- 计算下一个 token 的概率分布
- 采样/解码生成结果
- 通过 CLI、HTTP API 或聊天界面对外提供服务

一句话：

> **会执行的是推理程序，不是权重文件本身。**

---

## 6. 从数学角度、工程角度、产品角度分别看“大模型是什么”

### 6.1 数学角度

大模型可以看成一个函数：

> 输入一串 token，预测下一个 token 的概率分布。

### 6.2 存储角度

大模型是一组大体积参数文件及其配置文件。

### 6.3 工程角度

大模型是一个推理系统中的核心计算部件，需要依赖：

- 权重
- 模型结构
- tokenizer
- 推理框架
- CPU/GPU
- 服务层

### 6.4 产品角度

大多数用户接触到的并不是“模型文件”，而是：

- ChatGPT
- Claude
- DeepSeek 网页
- 各类 API 服务

也就是说，普通用户接触到的往往是：

> **模型能力被包装成的在线产品或远程服务**

---

## 7. GPT、Claude、DeepSeek 分别更像什么

## 7.1 GPT

对普通用户来说，GPT 通常表现为：

- OpenAI 提供的远程模型服务
- 通过网页、App 或 API 调用

你通常拿不到底层模型权重。

所以 GPT 对用户的存在形式更像：

> 一个远程 AI 服务，而不是本地模型文件。

## 7.2 Claude

Claude 与 GPT 类似。

对大多数用户而言，Claude 主要以以下形式存在：

- Claude 聊天产品
- Anthropic API
- 被集成进其他产品的远程能力

所以用户接触到的也是“服务”，而不是底层模型本体。

## 7.3 DeepSeek

DeepSeek 的情况更适合拿来理解“模型”和“服务”的区别。

它常有两种形态：

### 形态 A：远程服务

例如：

- 官网聊天界面
- API 调用

此时它和 GPT / Claude 很像，本质上是云端服务。

### 形态 B：可下载的开源权重

部分 DeepSeek 模型可公开下载，这时它的存在形式就更接近：

- 一组模型文件
- 可以被本地推理框架加载
- 可以在自己的机器或服务器上运行

所以 DeepSeek 是理解这一点的典型例子：

> 同一个“模型家族”既可以以远程服务形式存在，也可以以本地权重文件形式存在。

---

## 8. Model、Program、Service、Agent 的区别

这几个词很容易混在一起，最好分清。

## 8.1 Model（模型）

模型是：

- 参数化的神经网络
- 负责根据输入计算输出
- 能力主要储存在权重里

## 8.2 Program / Runtime（程序 / 运行时）

程序或运行时是：

- 用来加载模型并执行推理的软件
- 负责资源管理、推理加速、输入输出处理

例如：

- `transformers`
- `vllm`
- `llama.cpp`
- `ollama`

## 8.3 Service（服务）

服务是：

- 在模型运行时之上再包装一层 API、鉴权、限流、日志、计费等能力
- 对外暴露成可调用接口

例如：

- OpenAI API
- Anthropic API
- DeepSeek API

## 8.4 Agent（智能代理）

Agent 是在模型和服务之上继续增加：

- 目标
- 规划
- 工具调用
- 多步执行
- 记忆
- 结果校验

可压缩成一个公式：

```text
Agent = 大模型 + 工具 + 工作流 + 记忆/规划
```

所以：

- 并不是所有 LLM 服务都是 Agent
- 能连续读文件、查网页、调用命令并完成多步任务的系统，更接近 Agent

---

## 9. 本地部署一个模型时，真实运行链路是什么

可以用下面这条链路理解：

```text
用户输入文本
↓
聊天界面 / CLI / API 请求
↓
应用层服务
↓
推理运行时（Transformers / vLLM / llama.cpp / Ollama）
↓
tokenizer 把文本转成 token
↓
模型结构 + 权重执行计算
↓
CPU / GPU 逐步生成下一个 token
↓
输出 token 被解码回文字
↓
返回给用户
```

这里每层职责不同：

- 界面层：负责交互
- 服务层：负责请求管理
- 推理层：负责执行模型
- tokenizer：负责文本与 token 转换
- 模型权重：负责“能力本体”
- 硬件层：负责实际算力

---

## 10. 本地模型目录通常长什么样

一个常见模型目录可能包含：

```text
my-model/
├── config.json
├── tokenizer.json
├── tokenizer_config.json
├── special_tokens_map.json
├── generation_config.json
├── model-00001-of-00004.safetensors
├── model-00002-of-00004.safetensors
├── model-00003-of-00004.safetensors
└── model-00004-of-00004.safetensors
```

或者在某些本地推理生态里，会看到更聚合的格式：

- `*.gguf`

例如：

```text
DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf
```

这类文件通常是为了特定推理生态（例如 `llama.cpp`）做过转换或量化，更适合本地部署。

---

## 11. 常见文件格式简表

| 文件/格式 | 常见用途 | 说明 |
|---|---|---|
| `safetensors` | 主流权重存储 | 更安全、加载快，Hugging Face 生态常见 |
| `bin` / `pt` / `pth` | PyTorch 权重 | 早期或不同项目中常见 |
| `gguf` | llama.cpp 生态 | 适合本地推理、量化后部署 |
| `config.json` | 模型配置 | 描述层数、维度、架构等 |
| `tokenizer.json` | tokenizer 配置 | 处理文本切分与 token 映射 |
| `generation_config.json` | 生成配置 | 默认推理参数，如温度、最大长度等 |

---

## 12. 一个直观比喻

可以把大模型类比成“电影文件 + 播放器 + 视频网站”：

- **模型权重** = 电影文件
- **推理程序** = 播放器
- **聊天产品/API** = 视频网站或播放器界面

所以：

- 电影文件本身不是播放器
- 播放器本身也不是电影内容
- 用户真正体验到的是整套系统

换成大模型语境就是：

- 权重文件本身不是聊天产品
- 推理引擎本身也不是模型能力的全部
- 用户接触到的是“模型 + 运行时 + 服务包装”后的成品

---

## 13. 常见误区

### 误区 1：大模型就是一个程序

不准确。更准确地说，它是需要被程序加载和运行的一组模型文件与配置。

### 误区 2：ChatGPT 就等于一个模型文件

不准确。ChatGPT 是产品形态，背后包含模型、服务、策略层、工具系统、鉴权、日志、计费等整套基础设施。

### 误区 3：下载了权重就等于能直接使用

不一定。还需要：

- 匹配的 tokenizer
- 合适的运行时
- 足够的 CPU / GPU / 内存 / 显存
- 正确的推理参数

### 误区 4：Agent 就是更大的模型

不准确。Agent 往往不是“更大的模型”，而是在模型之上增加工具、记忆、规划和执行闭环的系统设计。

---

## 14. 最简总结

如果只保留最关键的一层理解，可以记住：

> 大模型本体通常更接近“训练出来的参数文件”，而不是传统单体程序；真正提供聊天、问答、推理或自动执行能力的，是“模型权重 + tokenizer + 配置 + 推理引擎 + 服务系统”的组合。

---

## 15. 延伸阅读方向

如果要继续深化，可以从下面几个方向展开：

1. **本地部署链路**：从 Hugging Face 下载模型，到用 `vLLM`、`llama.cpp`、`Ollama` 跑起来
2. **量化与部署**：为什么需要 Q4 / Q5 / Q8，为什么 `gguf` 常见于本地部署
3. **模型与 Agent 的边界**：聊天模型、工具调用、记忆系统、自动化执行如何组合
4. **开源模型与闭源服务的区别**：拿到权重 vs 只能调用 API，有哪些能力和限制差异

---

## 来源说明

- 基于本次关于“GPT / Claude / DeepSeek 的存在形式”的对话整理
- 面向工程理解进行结构化归纳
- 适合作为后续解释本地模型、推理框架、Agent 系统时的基础认知文档
