Code Ease Code Ease
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档

神秘的鱼仔

你会累是因为你在走上坡路
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档
服务器
  • ElasticSearch

  • Spark

  • kafka

  • AI聚集地

    • 半个月了,DeepSeek为什么还是服务不可用
    • AI大模型部署指南
    • 轻松搞定:Qwen3-32B 生产环境离线部署全流程
    • 开源大模型实战分析
      • 分享内容
      • 1. 开源大模型生态
        • 1.1 开源大模型的崛起历程
        • 1.2 为什么要关注开源大模型
        • 1.3 开源大模型生态全景图
      • 2. 开源大模型到底开源了什么
        • 2.1 开源的三个层次
        • 2.2 主流模型的开源程度
        • 2.3 许可证详解
        • 2.3.1 常见许可证类型
        • 2.4 为什么大多数模型仍不公开训练数据?
        • 2.5 开源的意义
      • 3. Hugging Face 介绍
        • 3.1 平台概述
        • 3.2 核心产品详解
        • 3.2.1 Model Hub
        • 3.2.2 Transformers 库
        • 3.2.3 Datasets 库
        • 3.2.4 Spaces
      • 3. ModelScope 介绍
        • 3.1 平台定位
        • 3.2 与 Hugging Face 对比
        • 3.3 核心优势
      • 4. 模型文件结构解析
        • 4.1 典型模型目录概览
        • 4.2 config.json - 模型配置
        • 4.3 模型权重文件
        • 4.3.1 权重格式详解
        • 4.3.2 小参数模型 vs 大参数模型的权重
        • 4.3.3 权重张量结构
        • 4.4 分词器(Tokenizer)相关文件
        • 4.4.1 Qwen分词器的特点
        • 4.4.2 tokenizer.json
        • 4.4.3 tokenizer_config.json
        • 4.4.4 vocab.json 和 merges.txt
        • 4.4.5 中文和tokens之间的关系
        • 4.5 generation_config.json - 生成配置
        • 4.6 特殊文件类型
        • 4.6.1 Qwen3.5新增文件:chat_template.jinja
        • 4.6.2 多模态模型特有文件
      • 5. 显存评估方法
        • 5.1 显存消耗的三个主要部分
        • 5.2 模型权重的显存计算
        • 5.2.1 基础公式
        • 5.2.3 常见模型规模的显存需求
        • 5.3 KV Cache 显存计算
        • 5.3.1 计算公式
        • 5.3.2 简化估算
        • 5.3.3 具体示例
        • 5.4 激活值显存
        • 5.5 完整推理显存估算
        • 5.5.1 综合公式
        • 5.5.2 实用估算表
      • 6. 本地部署方案:vLLM
        • 6.1 vLLM 简介
        • 6.2 安装与启动
  • 大数据技术
  • AI聚集地
CodeEase
2026-04-10
目录

开源大模型实战分析

作者:鱼仔
博客首页: codeease.top (opens new window)
公众号:神秘的鱼仔

# 分享内容

  • 开源大模型生态
  • 开源大模型开源的是什么
  • 主流开源平台介绍
  • 模型文件结构解析
  • 分词器:文字和tokens的关系
  • 部署大模型显存如何评估
  • 部署大模型的方式

# 1. 开源大模型生态

# 1.1 开源大模型的崛起历程

在2022年11月ChatGPT发布之前,AI大模型领域主要由少数科技巨头主导。OpenAI、Google、Anthropic等公司掌握最先进技术,开发者依赖API调用。2023年Meta的LLaMA系列开启开源浪潮,随后LLaMA 2/3推动社区爆发。

进入2025-2026年,开源大模型已不再是“追赶者”。以Qwen3.5(Alibaba)、Llama 4(Meta,Scout/Maverick MoE原生多模态)、DeepSeek-V3.2、GLM-5(Zhipu AI)为代表,开源模型在推理、代理(agentic)、多模态(文本+图像+视频)、长上下文(128K-10M tokens)和编码/数学基准上已逼近或局部超越闭源前沿模型。MoE架构成为主流,仅激活少量参数即可实现高性能,显著提升效率。开源社区已成为AI创新核心力量。

# 1.2 为什么要关注开源大模型

核心优势依旧显著,但2026年更突出代理能力和多模态:

  • 成本可控:闭源API token费用随规模激增;开源模型部署在自有基础设施上,仅硬件成本。MoE模型进一步降低推理开销。
  • 数据安全:本地/私有部署,数据不出域,适用于金融、医疗、政府等敏感场景。
  • 定制自由:支持LoRA/QLoRA微调、量化(FP8/INT4)、自定义推理流程、代理工具集成,甚至研究内部机制。
  • 自主可控:避免API断供风险,支持边缘/离线部署。2026年国际环境下,自主AI能力战略意义更大。

# 1.3 开源大模型生态全景图

生态层次类似但更成熟:

  • 基础设施层:GPU(NVIDIA Blackwell/H100等)、CUDA、PyTorch、FlashInfer等加速内核。
  • 模型层:权重、配置、分词器、处理器(多模态)。涵盖语言、代码、多模态、代理专精模型。
  • 工具层:Transformers、vLLM、SGLang、LMDeploy、Ollama等。
  • 应用层:聊天机器人、RAG、代理系统、代码助手、多模态分析等。

# 2. 开源大模型到底开源了什么

# 2.1 开源的三个层次

当我们说“开源大模型”时,实际上存在明显不同的含义。业界更常用 “open-weights”(权重开源) 与 “fully open / true open source” 来区分。理解这一点对于合规使用和研究模型至关重要。

名称 包含内容 特点 代表模型
纯权重开源 Open Weights Only • 训练好的模型参数(.safetensors 等) • 模型配置文件(config.json) • 分词器 / 处理器文件 ✅ 可直接用于推理和部署 ❌ 通常无法轻松微调或复现 ❌ 训练细节完全不透明 早期部分闭源转向模型(较少见于主流)
权重 + 推理/微调代码 Open Weights + Code • 第一层所有内容 • 推理代码(Transformers / vLLM / SGLang 集成) • 微调代码(LoRA 等)和示例脚本 ✅ 可直接推理、量化部署和基本微调 ✅ 可研究模型架构 ⚠️ 训练数据通常不公开(商业机密 + 法律风险) Llama 4(Meta) Qwen3.5(Alibaba) Mistral 3 Phi-4(Microsoft)
完全开源 Fully Open Source • 第二层所有内容 • 完整的训练代码和中间检查点 • 训练数据集(或可复现的数据构建方式) • 训练配方(Training Recipe)、日志和评估方法 ✅ 可以从零复现模型 ✅ 训练过程高度透明 ✅ 便于学术研究和社区共同改进 OLMo 3(Allen Institute for AI) BLOOM

# 2.2 主流模型的开源程度

模型 权重 代码 训练数据 许可证
Llama 4 ✅ ✅ ❌ Llama Community License
Qwen3.5 ✅ ✅ ❌ Apache 2.0
Mistral 3 ✅ ✅ ❌ Apache 2.0
Phi-4 ✅ ✅ ❌(主要合成数据) MIT
OLMo 3 ✅ ✅ ✅ Apache 2.0
BLOOM ✅ ✅ ✅ OpenRAIL-M

# 2.3 许可证详解

# 2.3.1 常见许可证类型

Llama Community License(Meta):

  • 允许商业使用,但对月活跃用户超过 700 million(7亿) 的产品需要额外向 Meta 申请许可。
  • 通常要求在衍生产品中保留 “Built with Llama” 等声明。
  • 注意:部分观点认为此许可证不完全符合 OSI 开源定义。

Apache 2.0(最推荐):

  • 高度宽松,允许商业使用、修改、分发。
  • 仅需保留版权声明和许可证文本。
  • Qwen3.5、Mistral 3、OLMo 3 等均采用此许可。

MIT License:

  • 极其宽松,几乎无限制(Phi-4 使用)。
  • 适合小模型和研究。

OpenRAIL-M:

  • 负责任 AI 许可,禁止部分有害用途。
  • BLOOM 等早期模型采用。

# 2.4 为什么大多数模型仍不公开训练数据?

商业竞争:训练数据是核心竞争力,公开相当于暴露“秘方”。

法律风险:数据可能涉及版权、隐私或被诉侵权,公开会放大风险。

成本与治理:清洗海量数据成本极高,且很多公司难以完整披露来源。

实际趋势:即使是 Qwen3.5、Llama 4 等顶级模型,也仅公开部分验证/合成数据,完整预训练数据集仍属少数(OLMo 3 是例外)。

# 2.5 开源的意义

尽管完全公开训练数据的模型仍是少数,开源(尤其是 open-weights)在2026年依然价值巨大:

  1. 大幅降低AI门槛:开发者、企业可在本地部署、微调和集成先进模型,无需依赖闭源API。
  2. 促进创新与定制:社区可基于权重进行 LoRA 微调、量化优化、代理构建和多模态扩展。
  3. 提高透明度与安全性:模型行为可被审计,避免黑箱风险,利于学术研究和企业合规。
  4. 推动整个行业进步:开源生态加速了从推理优化(vLLM、SGLang)到应用落地的快速发展,让更多人参与 AI 创新。

# 3. Hugging Face 介绍

# 3.1 平台概述

Hugging Face仍是全球最大AI模型平台(2025年底模型数超200万,2026持续增长)。从Transformers库起步,已成为“AI界的GitHub”,活跃开发者数百万,下载量数十亿。

# 3.2 核心产品详解

# 3.2.1 Model Hub

支持托管、版本管理、模型卡片(含基准、多模态示例)、许可协议。模型类型包括:

  • 语言/推理模型:Llama 4、Qwen3.5、DeepSeek-V3.2、GLM-5等。
  • 多模态:Qwen3.5-VL、Llama 4(原生图像/视频)。
  • Embedding、语音、代理专精模型等。

# 3.2.2 Transformers 库

统一API,支持自动设备映射、量化、多模态处理器。2026版增强MoE和长上下文支持。

示例代码(以Qwen3.5小模型为例,适配多模态/Thinking模式):

from transformers import AutoModelForCausalLM, AutoTokenizer, AutoProcessor

model_name = "Qwen/Qwen3.5-0.8B-Instruct"  # 或更大MoE变体

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)  # 多模态支持

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto",
    trust_remote_code=True
)

# 多模态/聊天示例
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Explain quantum computing with an image example if possible."}
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)

# 生成(支持thinking模式)
outputs = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.7,
    do_sample=True,
    # enable_thinking=True  # Qwen3.5等支持
)

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

优势:统一API、丰富预训练模型、全流程工具链(微调、量化、评估)。

# 3.2.3 Datasets 库

支持流式处理大规模数据集,2026增强多模态数据支持。

# 3.2.4 Spaces

免费托管Gradio/Streamlit Demo,支持GPU(含多模态预览)。

# 3. ModelScope 介绍

# 3.1 平台定位

阿里云ModelScope仍是“中国版Hugging Face”,优化中文/国产模型、本土速度和文档。

# 3.2 与 Hugging Face 对比

特性 Hugging Face ModelScope
总部 美国 中国杭州
中文/国产模型 丰富 更丰富
国内下载速度 需镜像加速 原生快
文档 英文为主 中英文兼顾

# 3.3 核心优势

丰富国产模型:Qwen3.5系列、ChatGLM系列(升级为GLM-5)、InternLM、Yi等。Qwen3.5引入原生视觉-语言融合、Thinking/Fast模式、超长上下文。

本土优化:国内CDN、支付宝支付、中文教程。

# 4. 模型文件结构解析

以 Qwen3.5-0.8B 为例进行讲解,这是通义千问3.5系列中参数规模较小的模型(0.8B参数),非常适合学习理解模型文件结构。Qwen3.5是2025年3月发布的最新版本,引入了多项技术创新。

# 4.1 典型模型目录概览

当你从Hugging Face或ModelScope下载一个完整的模型时,会得到一个包含多个文件的目录。我们以Qwen3.5-0.8B为例:

Qwen/Qwen3.5-0.8B/
├── config.json                          # 模型架构配置
├── model.safetensors                   # 模型权重(单文件,约1.7GB)
├── tokenizer.json                       # 分词器完整配置
├── tokenizer_config.json                # 分词器参数
├── vocab.json                          # 词表文件
├── merges.txt                          # BPE合并规则
├── added_tokens.json                   # 额外添加的token
├── special_tokens_map.json             # 特殊token映射
├── chat_template.jinja                 # 对话模板(新增)
├── preprocessor_config.json            # 视觉预处理配置(新增)
├── video_preprocessor_config.json      # 视频预处理配置(新增)
└── README.md                           # 模型说明文档
1
2
3
4
5
6
7
8
9
10
11
12
13

Qwen3.5 新增文件:

  • chat_template.jinja:新的对话模板格式
  • preprocessor_config.json:多模态视觉预处理配置
  • video_preprocessor_config.json:视频预处理配置

理解这些文件的含义对于正确使用模型至关重要。下面我们逐一详解每个文件。

# 4.2 config.json - 模型配置

这是最核心的配置文件,定义了模型的整体架构。Qwen3.5-0.8B 的 config.json 如下:

{
    "architectures": [
        "Qwen3_5ForConditionalGeneration"
    ],
    "image_token_id": 248056,
    "model_type": "qwen3_5",
    "text_config": {
        "attention_bias": false,
        "attention_dropout": 0.0,
        "attn_output_gate": true,
        "dtype": "bfloat16",
        "eos_token_id": 248044,
        "full_attention_interval": 4,
        "head_dim": 256,
        "hidden_act": "silu",
        "hidden_size": 1024,
        "initializer_range": 0.02,
        "intermediate_size": 3584,
        "layer_types": [
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention",
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention",
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention",
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention",
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention",
            "linear_attention",
            "linear_attention",
            "linear_attention",
            "full_attention"
        ],
        "linear_conv_kernel_dim": 4,
        "linear_key_head_dim": 128,
        "linear_num_key_heads": 16,
        "linear_num_value_heads": 16,
        "linear_value_head_dim": 128,
        "max_position_embeddings": 262144,
        "mlp_only_layers": [],
        "model_type": "qwen3_5_text",
        "mtp_num_hidden_layers": 1,
        "mtp_use_dedicated_embeddings": false,
        "num_attention_heads": 8,
        "num_hidden_layers": 24,
        "num_key_value_heads": 2,
        "rms_norm_eps": 1e-06,
        "tie_word_embeddings": true,
        "use_cache": true,
        "vocab_size": 248320,
        "mamba_ssm_dtype": "float32",
        "rope_parameters": {
            "mrope_interleaved": true,
            "mrope_section": [
                11,
                11,
                10
            ],
            "rope_type": "default",
            "rope_theta": 10000000,
            "partial_rotary_factor": 0.25
        }
    },
    "tie_word_embeddings": true,
    "transformers_version": "4.57.0.dev0",
    "video_token_id": 248057,
    "vision_config": {
        "deepstack_visual_indexes": [],
        "depth": 12,
        "hidden_act": "gelu_pytorch_tanh",
        "hidden_size": 768,
        "in_channels": 3,
        "initializer_range": 0.02,
        "intermediate_size": 3072,
        "model_type": "qwen3_5",
        "num_heads": 12,
        "num_position_embeddings": 2304,
        "out_hidden_size": 1024,
        "patch_size": 16,
        "spatial_merge_size": 2,
        "temporal_patch_size": 2
    },
    "vision_end_token_id": 248054,
    "vision_start_token_id": 248053
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

关键参数详解:

参数类别 参数名称 值 含义与说明
整体信息 architectures Qwen3_5ForConditionalGeneration 模型主类,支持多模态条件生成
整体信息 model_type qwen3_5 Qwen3.5 专用模型类型
整体信息 transformers_version 4.57.0.dev0 需要较新版本的 Transformers 支持
整体信息 tie_word_embeddings true 词嵌入与输出层参数共享,节省显存
文本配置 num_hidden_layers 24 Transformer 总层数
文本配置 hidden_size 1024 模型隐藏层维度(较小规模版本)
文本配置 intermediate_size 3584 MLP 中间层维度
文本配置 num_attention_heads 8 全注意力层 Query Heads 数量
文本配置 num_key_value_heads 2 GQA 分组查询注意力,显著减少 KV-Cache
文本配置 head_dim 256 注意力头维度
文本配置 vocab_size 248320 词表大小(较大,支持多模态 token)
文本配置 max_position_embeddings 262144 最大上下文长度 ≈ 262K tokens(极强)
文本配置 use_cache true 支持 KV-Cache,用于流式生成
文本配置 hidden_act silu 激活函数
混合注意力核心 layer_types 3×linear_attention + 1×full_attention(重复) Hybrid Attention 机制(最重要创新)
混合注意力核心 full_attention_interval 4 每 4 层出现 1 次传统全注意力
混合注意力核心 linear_conv_kernel_dim 4 线性注意力卷积核尺寸
RoPE 配置 rope_theta 10000000 超大 theta,适合超长上下文
RoPE 配置 mrope_interleaved true 支持多模态 RoPE(图像/视频位置编码)
RoPE 配置 mrope_section [11, 11, 10] 多模态 RoPE 分段设置
多模态 Token image_token_id 248056 图像占位 token
多模态 Token video_token_id 248057 视频占位 token
多模态 Token vision_start_token_id 248053 视觉内容开始标记
多模态 Token vision_end_token_id 248054 视觉内容结束标记
视觉配置 vision_config.depth 12 Vision Transformer 层数
视觉配置 vision_config.hidden_size 768 视觉编码器隐藏维度
视觉配置 vision_config.num_heads 12 视觉注意力头数
视觉配置 vision_config.patch_size 16 图像 Patch 大小
视觉配置 vision_config.temporal_patch_size 2 视频时间维度 Patch 大小(减少视频 token)
视觉配置 vision_config.spatial_merge_size 2 空间合并尺寸,降低分辨率 token 数量
视觉配置 vision_config.out_hidden_size 1024 视觉特征输出维度(与文本对齐)

Qwen3.5 核心技术亮点:

参数名称 值 如何理解参数 说明
layer_types 大部分是 linear_attention,少部分是 full_attention 模型大部分层用了“轻量模式”,每4层才用一次“完整模式” 这是 Qwen3.5 最聪明的地方。 轻量模式速度快、吃显存少;完整模式思考更仔细。 两者搭配,让模型又快又聪明,特别适合处理很长的内容。
max_position_embeddings 262144(约 26 万 tokens) 模型支持的上下文 长上下文能力。 意味着它可以一次性处理很长很长的文章、整本书、长时间视频等,而不会轻易“忘掉”前面内容。
num_key_value_heads 2 模型在记录“记忆”时用了更节省的方式 省显存的关键。 长对话或长文章时,模型需要记住很多内容,这个参数让它记住的东西占用的显存大幅减少,跑起来更省资源。
hidden_size 1024 模型的“脑容量”大小 决定模型整体大小。 1024 属于中等偏小的脑容量,模型不算特别大,因此部署时相对容易,对显卡要求没那么高。
num_hidden_layers 24 模型一共有 24 层 模型的深度。 层数越多通常思考能力越强,24 层属于中等深度,平衡了能力和效率。
mrope_interleaved + mrope_section 开启多模态位置编码 模型能正确理解图片和视频在什么位置 让图片和视频更好用。 没有这个,模型很难把图片、视频和文字正确对应起来。
vision_config(视觉部分) patch_size=16, temporal_patch_size=2 等 模型看图片和视频的方式 让模型原生支持看图和看视频。 尤其是 temporal_patch_size=2,让视频不会产生太多 token,处理视频更高效。

# 4.3 模型权重文件

# 4.3.1 权重格式详解

模型权重是模型最核心的部分,存储了神经网络中所有参数的值。常见的权重格式有:

SafeTensors格式(.safetensors ):

  • Hugging Face推出的新格式
  • 优点:加载快(无需反序列化整个文件)、内存安全(按需加载)、安全性高
  • 强烈推荐使用此格式

PyTorch格式(.bin, .pt):

  • 传统的PyTorch模型存储格式
  • 优点:兼容性好
  • 缺点:文件大,安全性一般

GGUF格式(.gguf):

  • 由llama.cpp团队推出
  • 专为CPU推理设计
  • 支持多种量化精度
  • 适合在消费级硬件上运行

# 4.3.2 小参数模型 vs 大参数模型的权重

小参数模型

model.safetensors  # 单个文件,约1.7GB
1

大参数模型

model-00001-of-00002.safetensors  # 分片1
model-00002-of-00002.safetensors  # 分片2
model.safetensors.index.json       # 索引文件
1
2
3

Git LFS对单个文件大小有限制(通常5GB),因此大模型的权重会被分成多个文件。

model.safetensors.index.json 文件记录了每个分片包含哪些层的权重:

{
  "metadata": {
    "total_size": 13989145600
  },
  "weight_map": {
    "model.embed_tokens.weight": "model-00001-of-00002.safetensors",
    "model.layers.0.self_attn.q_proj.weight": "model-00001-of-00002.safetensors",
    "model.layers.0.self_attn.k_proj.weight": "model-00001-of-00002.safetensors",
    ...
    "model.layers.31.lm_head.weight": "model-00002-of-00002.safetensors"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 4.3.3 权重张量结构

模型权重本质上是一个个多维张量(Tensor)。以Qwen3.5为例,主要包含:

  • embedding表:model.embed_tokens.weight,形状为 [151936, 896]
  • 注意力QKV权重:每个attention层有q_proj、k_proj、v_proj
    • Q投影:[896, 896](14个头 × 64维)
    • K投影:[128, 896](2个头 × 64维)
    • V投影:[128, 896](2个头 × 64维)
  • 注意力输出权重:o_proj.weight,形状为 [896, 896]
  • FFN权重:包含gate_proj、up_proj、down_proj
  • 层归一化权重:input_layernorm和post_attention_layernorm
  • LM Head权重:lm_head.weight,形状为 [151936, 896]

# 4.4 分词器(Tokenizer)相关文件

分词器是将文本转换为模型可以处理的数字序列的关键组件。Qwen3.5使用的是BBPE(Byte-level BPE)分词器,基于SentencePiece框架实现。

# 4.4.1 Qwen分词器的特点

BBPE(Byte-level BPE):

  • 基于字节的BPE
  • 避免OOV(Out of Vocabulary)问题
  • 可以处理任意Unicode字符,包括中文、emoji等
  • Qwen系列使用

与LLaMA BPE的区别:

  • LLaMA:基于原始UTF-8字节
  • Qwen:基于Unicode码点,更适合多语言

# 4.4.2 tokenizer.json

这是分词器的完整配置,包含词表和分词规则。

  • 决定了文字是怎么被切成 token 的。
  • 里面存着模型认识的所有“单词”(词表)和切词的规则。
  • 如果没有这个文件,模型就不知道该怎么把你的中文、英文切成数字。
看具体文件
1

# 4.4.3 tokenizer_config.json

这个文件包含分词器的运行时配置:

  • 告诉 Transformers 库应该怎么使用上面的 tokenizer。
  • 比如:对话时要在开头加什么 token?结束时加什么?聊天格式用什么模板?是否要自动加空格清理?
看具体文件
1

# 4.4.4 vocab.json 和 merges.txt

vocab.json:

  • 词表文件,包含所有token到ID的映射
  • Qwen3.5有248043个token

merges.txt:

  • BPE合并规则
  • 定义哪些字节对应该合并为一个token

# 4.4.5 中文和tokens之间的关系

  • 很多常用中文词(如“你好”、“今天”、“人工”、"智能")会被整词或较大子词作为一个 Token(效率高)。
  • 生僻字或长词可能会被拆成 2~3 个子 Token。
  • Qwen3.5 对中文优化较好,平均 1 个 Token ≈ 1.5~1.8 个中文字符(比英文更高效)。

# 4.5 generation_config.json - 生成配置

Qwen3.5不再带有这个配置,让推理层去控制参数

Qwen3有这个配置文件,这个文件定义了模型推理时的默认参数。

{
  "bos_token_id": 151643,
  "do_sample": true,
  "eos_token_id": 151645,
  "max_length": 32768,
  "max_new_tokens": 2048,
  "min_length": 1,
  "pad_token_id": 151643,
  "repetition_penalty": 1.1,
  "temperature": 0.6,
  "top_k": 20,
  "top_p": 0.95,
  "transformers_version": "4.48.0",
  "use_cache": true
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

关键参数解释:

参数 含义 Qwen3.5-0.8B的默认值
temperature 控制随机性,值越大越随机 0.6
top_k 限制采样范围到概率最高的k个token 20
top_p 核采样,累积概率达到p的token 0.95
repetition_penalty 惩罚重复生成 1.1
max_new_tokens 最大生成token数 2048
max_length 输入+输出的最大长度 32768

# 4.6 特殊文件类型

# 4.6.1 Qwen3.5新增文件:chat_template.jinja

Qwen3.5 使用新的 Jinja 格式对话模板:

https://huggingface.co/Qwen/Qwen3.5-0.8B/blob/main/chat_template.jinja
1

# 4.6.2 多模态模型特有文件

对于视觉语言模型(VLM),还会有额外的配置文件:

// preprocessor_config.json
{
  "image_processor": {...}
}
//video_preprocessor_config.json
1
2
3
4
5

# 5. 显存评估方法

# 5.1 显存消耗的三个主要部分

运行大模型时,GPU显存主要被三个部分占用:

模块 作用 占用特点 典型占比(仅参考) 备注
📦 模型权重 (Model Weights) 存储所有神经网络参数 固定占用,与模型大小成正比 60%–70%(短上下文) 7B FP16 ≈ 14GB;上下文变长时占比会下降
📦 KV Cache (键值缓存) 存储 Attention 的 Key / Value 随 batch size 和 序列长度 线性增长 20%–30%(短上下文) 长上下文 / 高并发时可达 50%–70%+
📦 激活值 (Activations) 前向传播中的临时计算结果 推理阶段占用较小 5%–10% 训练时会大幅增加(可达 30%–60%)

# 5.2 模型权重的显存计算

# 5.2.1 基础公式

模型权重的显存消耗由参数数量和数据类型决定:

显存(GB) = (参数总量 × 精度字节数) / 1024³
1

精度类型对照表:

精度名称 数据类型 字节数 数值范围 适用场景
FP32 float32 4 ±3.4e38 训练(高精度)
FP16 float16 2 ±65504 推理 / 混合精度训练
BF16 bfloat16 2 ±3.39e38 推理(更稳定,推荐)
FP8 float8 1 非固定(取决于格式) 推理加速(H100等)
INT8 int8 1 -128 ~ 127 量化推理
INT4 int4 0.5 -8 ~ 7 高压缩量化推理

# 5.2.3 常见模型规模的显存需求

模型规模 FP16 (2字节) BF16 (2字节) INT8 (1字节) INT4 (0.5字节)
1B 1.86 GB 1.86 GB 0.93 GB 0.47 GB
3B 5.59 GB 5.59 GB 2.79 GB 1.40 GB
7B 13.04 GB 13.04 GB 6.52 GB 3.26 GB
13B 24.22 GB 24.22 GB 12.11 GB 6.06 GB
34B 63.35 GB 63.35 GB 31.68 GB 15.84 GB
70B 130.39 GB 130.39 GB 65.19 GB 32.60 GB
100B 186.26 GB 186.26 GB 93.13 GB 46.57 GB

# 5.3 KV Cache 显存计算

KV Cache是自回归模型推理特有的内存消耗。在生成过程中,每个新token都需要关注之前所有token的Key和Value向量。

# 5.3.1 计算公式

KV Cache显存 ≈ 2 × batch_size × seq_len × num_layers × (head_dim × num_kv_heads) × dtype_bytes

其中:
- head_dim = hidden_size / num_attention_heads
- 2 表示 K 和 V 两个矩阵
1
2
3
4
5

# 5.3.2 简化估算

对于标准Transformer模型,可以用一个经验公式快速估算:

KV ≈ batch × seq_len × num_layers × hidden_size × (2 × dtype_bytes)
1

# 5.3.3 具体示例

以LLaMA 2 7B为例:

  • num_layers = 32
  • hidden_size = 4096
  • num_attention_heads = 32
  • head_dim = 4096 / 32 = 128
  • num_kv_heads = 32

单token的KV Cache:

单token KV = 2 × 32 × 128 × 2 / 1024³ ≈ 0.00049 GB ≈ 0.5 MB
1

不同上下文长度的KV Cache:

上下文长度 Batch=1 Batch=4 Batch=16
512 0.25 GB 1 GB 4 GB
1024 0.5 GB 2 GB 8 GB
2048 1 GB 4 GB 16 GB
4096 2 GB 8 GB 32 GB

# 5.4 激活值显存

激活值是前向传播过程中产生的临时结果,其大小取决于:

推理阶段:
激活值显存 ≪ KV Cache
通常可以忽略(<10%)

训练阶段:
激活值显存 ≈ batch × seq × hidden × layers × dtype_bytes × 多倍系数

# 5.5 完整推理显存估算

# 5.5.1 综合公式

总显存 = 模型权重 + KV Cache + 激活值(推理时可忽略) + 预留空间
      ≈ 参数 × dtype
        + batch × seq × layers × hidden × (2 × dtype)
        + 预留(1~3GB)
1
2
3
4

# 5.5.2 实用估算表

上下文 4K

模型 FP16 INT8 INT4
7B 14GB + 1~2GB KV 8~10GB 5~7GB
13B 26GB + 2~4GB KV 14~18GB 9~12GB
34B 68GB + 4~8GB KV 35~45GB 18~25GB
70B 140GB + 8~16GB KV 70~90GB 40~60GB

上下文 128K

模型 FP16 INT8 INT4
7B 14GB + ~32~64GB KV 总计 约 50~85GB 8~10GB + ~16~32GB KV 总计 约 25~45GB 5~7GB + ~8~16GB KV 总计 约 15~25GB
13B 26GB + ~64~128GB KV 总计 约 100~160GB 14~18GB + ~32~64GB KV 总计 约 50~85GB 9~12GB + ~16~32GB KV 总计 约 30~50GB
34B 68GB + ~128~256GB KV 总计 约 200~330GB 35~45GB + ~64~128GB KV 总计 约 100~180GB 18~25GB + ~32~64GB KV 总计 约 55~95GB
70B 140GB + ~256~512GB KV 总计 约 400~670GB 70~90GB + ~128~256GB KV 总计 约 200~350GB 40~60GB + ~64~128GB KV 总计 约 110~200GB

Qwen3.5 采用了 混合(Hybrid)注意力机制,在相同上下文长度下,KV Cache 占用显著降低(有时能省 50%~80% 以上。

#

# 6. 本地部署方案:vLLM

# 6.1 vLLM 简介

vLLM 是目前最主流的高吞吐量大模型推理引擎,由加州大学伯克利分校开发并持续维护(2026年已迭代至 v0.18.x 版本)。

其核心创新包括:

  • PagedAttention(分页注意力):将 KV Cache 像操作系统内存分页一样管理,避免内存碎片,大幅提升显存利用率(通常提升 2-4 倍)。
  • Continuous Batching(连续批处理):动态添加请求,无需等待整个批次完成,大幅提高并发吞吐量。
  • CUDA Graph + FlashInfer 内核优化:减少内核启动开销,进一步加速推理。

2026年重要支持:

  • 原生 MoE 模型(Qwen3.5-MoE、DeepSeek、Llama 4 等)
  • 多模态模型(图像 + 文本、视频、音频,支持 Qwen3.5-VL、Llama 4 等)
  • 结构化输出(JSON 模式、工具调用)
  • Multi-LoRA(同时服务多个微调适配器,尤其适合 MoE 模型)

优势:生态成熟、模型支持最广泛、生产环境稳定、跨硬件支持较好(NVIDIA / AMD ROCm 等)。

# 6.2 安装与启动

基础安装:

pip install vllm
1

命令行启动 OpenAI 兼容 API 服务:

vllm serve Qwen/Qwen3.5-0.8B-Instruct \
    --dtype auto \                    # 自动选择 BF16/FP16
    --max-model-len 262144 \          # 支持 Qwen3.5 的 262K 上下文
    --gpu-memory-utilization 0.9 \    # 显存利用率,建议 0.85~0.95
    --port 8000 \
    --quantization awq \              # 常用量化:awq / gptq / fp8
    --enable-prefix-caching           # 开启前缀缓存(2026新增增强)
1
2
3
4
5
6
7

常用参数说明:

  • --dtype auto:推荐,自动使用 BF16(更稳定)或 FP16。
  • --quantization fp8:2026年新卡(H100/Blackwell/RTX 50系列)强烈推荐,质量接近 BF16,速度和显存都有明显优势。
  • --tensor-parallel-size 2:多 GPU 张量并行。
  • --max-num-seqs 256:最大并发请求数。

Python API 使用示例(支持多模态):

Python

from vllm import LLM, SamplingParams
from vllm.multimodal import MultiModalData

llm = LLM(
    model="Qwen/Qwen3.5-0.8B-Instruct",
    dtype="auto",
    max_model_len=262144,
    gpu_memory_utilization=0.9,
    quantization="awq",        # 或 "fp8"
    trust_remote_code=True
)

sampling_params = SamplingParams(temperature=0.7, max_tokens=512)

# 多模态输入示例
prompts = [{
    "prompt": "描述这张图片的内容",
    "multi_modal_data": {"image": "https://example.com/image.jpg"}   # 或本地路径
}]

outputs = llm.generate(prompts, sampling_params)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

多 GPU 部署:支持 tensor-parallel-size(张量并行)和 pipeline-parallel-size(流水线并行)。

量化支持:AWQ、GPTQ、FP8(W8A8)、SqueezeLLM 等。

轻松搞定:Qwen3-32B 生产环境离线部署全流程

← 轻松搞定:Qwen3-32B 生产环境离线部署全流程

最近更新
01
视频资料汇总
03-30
02
PostgreSQL表的继承及分区
10-23
03
PostgreSQL中如何建好一张表
10-16
更多文章>
Theme by Vdoing | Copyright © 2023-2026 备案图标 浙公网安备33021202002405 | 浙ICP备2023040452号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式