Skip to content

필사 모드: 开源 LLM 生态完全指南:2026 年的模型、工具与部署策略

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

目录

  1. 为什么选择开源 LLM?
  2. 主要模型家族
  3. 模型架构深入剖析
  4. 本地推理工具
  5. 用 vLLM 做生产级服务
  6. 用 LoRA 与 QLoRA 做微调
  7. Hugging Face 生态
  8. 量化技术
  9. 选对模型
  10. 开源 vs 闭源:何时用什么

1. 为什么选择开源 LLM?

1.1 为什么要用开放模型

几年前,GPT-4、Claude 这类闭源模型在质量上还占绝对优势。但这个差距正在急剧缩小。到 2025~2026 年,最顶尖的开源模型在大多数基准测试上已经能与闭源模型分庭抗礼,在部分专业领域甚至反超。

选择开源 LLM 的理由:

理由说明
数据隐私数据不会离开自己的基础设施
大规模成本没有按 token 计费;GPU 成本可分摊
可定制性可用自有领域数据做微调
合规要求医疗、金融、法律领域常有本地部署的要求
延迟可控可将模型与应用部署在同一基础设施上
摆脱厂商锁定无需改动 API 即可切换模型
研究与透明性可直接检视权重、架构与训练数据

1.2 定义:Open vs Open-Weight vs 真正的开源

在 LLM 社区里,"开源"这个词的用法相当宽松。

  • 真正的开源:权重、训练代码、训练数据全部公开的模型(例:OLMo、Pythia)
  • 开放权重(Open-Weight):权重可下载,但训练数据或代码不公开的模型(例:Llama 3、Mistral、Gemma)
  • 有限制的开放权重:权重公开,但使用目的受到限制的模型(例:Llama 的社区许可证将大型商业提供商排除在外)

大多数所谓"开源"模型实际上是开放权重模型。在法律和研究层面,这个区分很重要。


2. 主要模型家族

2.1 Meta Llama

Llama 系列是 Meta AI 公开的最具统治力的开放权重模型系列。

Llama 3.1 / 3.2 / 3.3(2024~2025)

模型参数量上下文备注
Llama 3.1 8B8B128K小型模型中的最佳选择
Llama 3.1 70B70B128K在多种任务上可与 GPT-4o 匹敌
Llama 3.1 405B405B128K最大规模,接近前沿水准的品质
Llama 3.2 1B / 3B1B、3B128K边缘端部署,多模态
Llama 3.2 11B / 90B11B、90B128K视觉-语言模型
Llama 3.3 70B70B128K相较 3.1 70B 有所改进

核心优势:强大的推理能力、代码能力、多语言支持(8 种语言)。70B 模型在大多数应用中都是值得信赖的选择。

许可证:Llama 社区许可证 — 在大多数使用场景下免费。月活跃用户超过 7 亿的产品需要获得 Meta 批准。

2.2 Mistral AI

Mistral 推出的高效模型,以更少的参数量实现出色的性能。

模型参数量备注
Mistral 7B v0.37B初代高效模型,经过指令微调
Mistral NeMo 12B12B与 NVIDIA 合作,编程能力突出
Mistral Small 324B高效的商用级模型
Codestral22B代码专用,支持 80 余种语言
Mixtral 8x7B56B(激活 12.9B)混合专家模型,推理速度快
Mixtral 8x22B141B(激活 39B)最强的 MoE 通用模型

许可证:基础模型采用 Apache 2.0(宽松,对商业友好)。

Mistral 的核心创新:混合专家(Mixture of Experts, MoE) 架构在每个 token 只激活部分参数,能以 7B 活跃参数的推理成本,逼近 70B 模型的品质。

2.3 Google Gemma

Gemma 是 Google 基于 Gemini 技术推出的开放权重模型系列。

模型参数量备注
Gemma 2 2B2B2B 级别中的最佳选择
Gemma 2 9B9B在多项基准测试上超过 Llama 3.1 8B
Gemma 2 27B27B强大且高效的 27B 模型
CodeGemma 7B7B代码专用
PaliGemma3B视觉-语言模型

许可证:Gemma 使用条款 — 宽松,但不是 Apache 2.0。允许商业使用。

2.4 Qwen(阿里巴巴)

阿里云的 Qwen 系列已经成为顶级的开放权重家族之一。

模型参数量备注
Qwen2.5 0.5B~72B多种规格强大的多语言支持(中文/英文)
Qwen2.5-Coder 7B~32B7B、32B出色的代码生成能力
Qwen2.5-Math 7B~72B7B、72B数学推理
QwQ 32B32B推理模型,o1 风格的思维链
Qwen2-VL7B、72B强大的视觉-语言能力

许可证:大多数模型采用 Apache 2.0。

Qwen 模型在中文任务和多语言应用中格外突出。

2.5 DeepSeek

DeepSeek 用高效的训练方式,交出了令人惊叹的模型。

模型参数量备注
DeepSeek-V2236B MoE(激活 21B)推理成本极其划算
DeepSeek-V3671B MoE(激活 37B)接近 GPT-4 的品质,开放权重
DeepSeek-R1多种规格展示思考过程的推理模型
DeepSeek-Coder-V2236B MoE强大的代码生成能力

许可证:DeepSeek 模型许可证 — 对大多数商业用途宽松。

DeepSeek 的核心成就:以远低于竞争对手的算力成本,训练出前沿级品质的模型。

2.6 其他值得关注的模型

模型组织优势
Phi-3 / Phi-4Microsoft在小尺寸(3.8B~14B)上表现强劲
Command R+Cohere检索增强类任务
Falcon 180BTII大型开放模型
Yi 34B01.AI强大的多语言能力
Orca 3Microsoft指令遵循
SOLAR 10.7BUpstage韩语/英语双语

3. 模型架构深入剖析

3.1 分组查询注意力(Grouped Query Attention, GQA)

大多数现代 LLM 用 GQA 取代了标准的多头注意力(MHA)。GQA 通过对查询分组、共享键值头,在不明显损失品质的前提下大幅降低 KV 缓存内存占用。

Multi-Head Attention (MHA):
Q heads: 32    K heads: 32    V heads: 32
KV cache: 2 × 32 × seq_len × d_head

Grouped Query Attention (GQA):
Q heads: 32    K heads: 8    V heads: 8
KV cache: 2 × 8 × seq_len × d_head   (4× 减少!)

Multi-Query Attention (MQA):
Q heads: 32    K heads: 1    V heads: 1
KV cache: 2 × 1 × seq_len × d_head   (32× 减少,有一定品质损失)

3.2 旋转位置编码(Rotary Position Embeddings, RoPE)

RoPE 不是把位置嵌入加到 token 嵌入上,而是通过旋转变换,把位置信息编码进查询、键向量中。主要优点:

  • 可以外推到训练时未见过的更长序列
  • 高效的相对位置计算
  • 可通过 YaRN、LongRoPE 扩展到极长的上下文

3.3 混合专家(Mixture of Experts, MoE)

MoE 用多个"专家"网络取代密集的前馈层,由路由器为每个 token 只挑选其中一部分。

# MoE 层的概念示意(简化版)
class MoELayer:
    def __init__(self, num_experts=8, top_k=2, d_model=4096, d_ff=14336):
        self.experts = [FeedForward(d_model, d_ff) for _ in range(num_experts)]
        self.router = nn.Linear(d_model, num_experts)
        self.top_k = top_k  # 每个 token 只激活 top_k 个专家

    def forward(self, x):
        # 路由器选出 top-k 个专家
        logits = self.router(x)
        weights, indices = logits.topk(self.top_k)
        weights = F.softmax(weights, dim=-1)

        # 对被选中专家的输出做加权求和
        output = sum(
            weights[:, i] * self.experts[indices[:, i]](x)
            for i in range(self.top_k)
        )
        return output

Mixtral 8x7B 每层拥有 8 个专家,每个 token 激活其中 2 个。总参数量达到 56B,但推理时的活跃参数只有约 12.9B——比一个 56B 的密集模型快得多。

3.4 KV 缓存与上下文长度

KV(键-值)缓存保存此前 token 的注意力键、值,让自回归生成时不必重新计算整个序列。

KV 缓存内存占用:

KV cache size = 2 × num_layers × num_kv_heads × head_dim × seq_len × dtype_bytes

示例:Llama 3.1 8B,fp16,128K 上下文
= 2 × 32 × 8 × 128 × 131072 × 2 bytes
=17.2 GB(KV 缓存)

这正是长上下文请求会消耗大量内存的原因,也是量化 KV 缓存、滑动窗口注意力如此重要的原因。


4. 本地推理工具

4.1 Ollama

Ollama 是在本地运行 LLM 最简单的方式。一条命令就能下载并运行模型。

# 安装(macOS/Linux)
curl -fsSL https://ollama.com/install.sh | sh

# 交互式运行模型
ollama run llama3.1:8b

# 运行特定量化版本
ollama run llama3.1:70b-instruct-q4_K_M

# 仅下载不运行
ollama pull mistral:7b

# 列出已安装的模型
ollama list

# 作为 API 服务器运行(兼容 OpenAI!)
ollama serve  # 在 localhost:11434 启动

Ollama 提供兼容 OpenAI 的 API,因此可以直接使用 OpenAI SDK:

from openai import OpenAI

# 连接本地 Ollama
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # 必填,但会被忽略
)

response = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "简单说明一下 Transformer。"}]
)
print(response.choices[0].message.content)

4.2 llama.cpp

llama.cpp 是用于 GGUF 量化模型的 C++ 推理引擎。它可以运行在 CPU、GPU 或两者之上,同时也是 Ollama 底层的推理引擎。

# 构建
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DLLAMA_CUDA=ON  # 支持 CUDA GPU
cmake --build build --config Release -j

# 下载 GGUF 模型(示例)
# 来自 Hugging Face:bartowski/Meta-Llama-3.1-8B-Instruct-GGUF

# 运行推理
./build/bin/llama-cli \
  -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  -n 512 \
  --prompt "说明一下 Transformer 中的注意力机制。"

# 作为兼容 OpenAI 的服务器运行
./build/bin/llama-server \
  -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8080 \
  -c 4096 \
  -ngl 35  # 加载到 GPU 上的层数

4.3 Transformers(Hugging Face)

Hugging Face 的 transformers 库是在 Python 中运行模型最灵活的方式:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",          # 自动分散到可用 GPU 上
)

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "什么是 Transformer 架构?"}
]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

with torch.no_grad():
    outputs = model.generate(
        input_ids,
        max_new_tokens=512,
        temperature=0.7,
        do_sample=True,
        pad_token_id=tokenizer.eos_token_id,
    )

response = tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True)
print(response)

4.4 本地推理工具对比

工具最适合场景是否需要 GPU上手难度性能
Ollama开发者、快速上手不需要(CPU 也可)非常简单良好
llama.cppCPU 推理、embedding可选中等优秀
Transformers研究、自定义代码建议使用简单~中等良好
vLLM生产级服务需要中等优秀
TGI生产级服务需要中等优秀
ExLlamaV2高吞吐量 GPU 场景需要中等~困难优秀

5. 用 vLLM 做生产级服务

5.1 为什么选 vLLM?

vLLM 是面向生产场景的领先开源 LLM 服务引擎。其核心创新:

  • PagedAttention:像操作系统虚拟内存一样管理 KV 缓存,大幅提升吞吐量。
  • 连续批处理(Continuous Batching):动态地把新请求加入正在运行的批次,最大化 GPU 利用率。
  • 张量并行:把模型无缝拆分到多个 GPU 上。
  • 兼容 OpenAI 的 API:可直接替换 OpenAI API。

5.2 启动 vLLM 服务器

# 安装
pip install vllm

# 启动服务器(单 GPU)
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Meta-Llama-3.1-8B-Instruct \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --port 8000

# 用张量并行做多 GPU(4 块 GPU)
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Meta-Llama-3.1-70B-Instruct \
  --dtype bfloat16 \
  --tensor-parallel-size 4 \
  --max-model-len 32768 \
  --port 8000

# 应用量化(AWQ)
python -m vllm.entrypoints.openai.api_server \
  --model TheBloke/Llama-3-70B-Instruct-AWQ \
  --quantization awq \
  --dtype float16 \
  --tensor-parallel-size 2

5.3 使用 vLLM 服务器

vLLM 提供兼容 OpenAI 的 API,因此客户端代码完全一致:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3.1-8B-Instruct",
    messages=[{"role": "user", "content": "什么是 PagedAttention?"}],
    max_tokens=256,
    temperature=0.7,
)
print(response.choices[0].message.content)

# 流式输出
with client.chat.completions.stream(
    model="meta-llama/Meta-Llama-3.1-8B-Instruct",
    messages=[{"role": "user", "content": "详细说明一下 RAG。"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

5.4 在 Docker 中运行 vLLM

# Dockerfile
FROM vllm/vllm-openai:latest

ENV HUGGING_FACE_HUB_TOKEN=""

CMD ["--model", "meta-llama/Meta-Llama-3.1-8B-Instruct", \
     "--dtype", "bfloat16", \
     "--max-model-len", "16384"]
docker run --gpus all \
  -p 8000:8000 \
  -e HUGGING_FACE_HUB_TOKEN=hf_xxx \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  my-vllm-server

6. 用 LoRA 与 QLoRA 做微调

6.1 什么时候需要微调

微调并不总是必要的。先尝试提示词工程和 RAG。以下情况可以考虑微调:

  • 需要一种很难通过提示词诱导出来的特定输出格式
  • 领域中存在基础模型没能充分体现的术语或惯例
  • 延迟很关键,希望把指令内化进模型权重
  • 拥有数千个高质量样本,希望获得一致的行为

6.2 LoRA:低秩适配(Low-Rank Adaptation)

LoRA 冻结预训练模型权重,在每个注意力层中加入小规模的可训练矩阵(适配器)。可训练参数量减少 1000 倍以上。

from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

# LoRA 配置
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,               # 适配矩阵的秩
    lora_alpha=32,      # 缩放因子
    lora_dropout=0.05,
    target_modules=[    # 要适配的层
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ],
    bias="none",
)

peft_model = get_peft_model(model, lora_config)
peft_model.print_trainable_parameters()
# trainable params: 83,886,080 || all params: 8,114,474,240 || trainable%: 1.03%

6.3 QLoRA:量化版 LoRA

QLoRA 把 4 比特量化与 LoRA 结合,让单块 A100 GPU 就能微调 70B 模型:

from transformers import BitsAndBytesConfig
from peft import prepare_model_for_kbit_training

# 4 比特量化配置
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto"
)

# 为 k 比特训练做准备(将层归一化转为 fp32 等)
model = prepare_model_for_kbit_training(model)

# 在量化后的模型上应用 LoRA
peft_model = get_peft_model(model, lora_config)

6.4 用 SFTTrainer 做全量微调

from trl import SFTTrainer, SFTConfig
from datasets import load_dataset

dataset = load_dataset("your-org/your-dataset", split="train")

def format_example(example):
    return {
        "text": f"<|user|>\n{example['instruction']}\n<|assistant|>\n{example['output']}"
    }

dataset = dataset.map(format_example)

trainer = SFTTrainer(
    model=peft_model,
    tokenizer=tokenizer,
    train_dataset=dataset,
    args=SFTConfig(
        output_dir="./checkpoints",
        num_train_epochs=3,
        per_device_train_batch_size=4,
        gradient_accumulation_steps=4,
        warmup_ratio=0.03,
        learning_rate=2e-4,
        fp16=True,
        logging_steps=10,
        save_steps=100,
        dataset_text_field="text",
        max_seq_length=2048,
    ),
)

trainer.train()
trainer.model.save_pretrained("./fine-tuned-model")

6.5 把 LoRA 适配器合并回基础模型

from peft import PeftModel

# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="cpu"
)

# 加载并合并 LoRA 权重
model = PeftModel.from_pretrained(base_model, "./fine-tuned-model")
merged_model = model.merge_and_unload()

# 保存合并后的模型(标准 HF 格式,可配合 vLLM 等使用)
merged_model.save_pretrained("./merged-model")
tokenizer.save_pretrained("./merged-model")

7. Hugging Face 生态

7.1 Hub:探索模型

Hugging Face Hub 托管了 80 万个以上的模型。几个关键的查找技巧:

from huggingface_hub import list_models, model_info

# 搜索模型
models = list_models(
    filter="text-generation",
    sort="downloads",
    direction=-1,
    limit=10
)
for m in models:
    print(m.id, m.downloads)

# 查看模型信息
info = model_info("meta-llama/Meta-Llama-3.1-8B-Instruct")
print(info.tags)
print(info.cardData)

7.2 模型卡与许可证

在生产环境中使用模型之前,务必先阅读模型卡。需要确认的内容:

  • 许可证类型(Apache 2.0、Llama 社区许可证、MIT、自定义)
  • 预期用途,以及超出范围的用途
  • 已知的偏见与局限性
  • 评测结果

7.3 GGUF 模型仓库

面向 llama.cpp / Ollama,可以找可信量化提供者发布的 GGUF 模型:

  • bartowski — 高质量 GGUF 模型,提供多种量化档位
  • TheBloke — 目录规模庞大,目前维护活跃度有所下降
  • lmstudio-community — 面向 LM Studio 精选的模型

GGUF 命名规则:

Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf
│                            │
└─ 模型名                    └─ 量化方式

常见的量化后缀:
Q4_K_M  - 4 比特,品质/速度的均衡选择(多数场景下推荐)
Q5_K_M  - 5 比特,品质更高,占用更多内存
Q6_K    - 6 比特,接近无损,内存占用较高
Q8_0    - 8 比特,几乎无损
Q2_K    - 2 比特,品质很低,内存占用极小
IQ4_XS  - 4 比特"重要性量化",品质优于 Q4_K_M

7.4 Spaces:在浏览器中运行模型

通过 Hugging Face Spaces,可以在下载前先体验模型:

# 通过 API 调用 Space
from gradio_client import Client

client = Client("meta-llama/Llama-3.1-8B-Instruct")
result = client.predict(
    message="说明一下 Transformer 的注意力机制",
    api_name="/chat"
)
print(result)

8. 量化技术

8.1 为什么要量化

用 bfloat16 运行 Llama 3.1 70B 需要约 140GB 的 GPU 内存——单张消费级 GPU 根本无法承载。量化以轻微的品质损失为代价,减少内存占用并加快推理速度。

Llama 3.1 70B 的内存对比:

精度内存品质使用场景
bfloat16约 140GB基准多卡 A100
int8约 70GB-0.1%1 张 A100 80GB
Q4_K_M(GGUF)约 43GB-0.5%2 张 24GB 消费级 GPU
int4(AWQ/GPTQ)约 35GB-1.0%1 张 A100 40GB
Q2_K约 24GB-5%+不建议用于生产环境

8.2 GPTQ:训练后量化

from transformers import AutoModelForCausalLM, GPTQConfig

# 一次性量化(需要校准数据)
quantization_config = GPTQConfig(
    bits=4,
    dataset="c4",
    block_size=128
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Meta-Llama-3.1-8B-Instruct",
    quantization_config=quantization_config,
    device_map="auto"
)

model.save_pretrained("./llama-3.1-8b-gptq")

8.3 AWQ:感知激活的权重量化

在准确率上,AWQ 通常比 GPTQ 更受青睐:

# 安装
pip install autoawq

# 量化
python -c "
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_path = 'meta-llama/Meta-Llama-3.1-8B-Instruct'
quant_path = './llama-3.1-8b-awq'

model = AutoAWQForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)

quant_config = {'zero_point': True, 'q_group_size': 128, 'w_bit': 4, 'version': 'GEMM'}
model.quantize(tokenizer, quant_config=quant_config)

model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)
print('量化完成')
"

8.4 用 bitsandbytes(BnB)做训练时量化

对于微调场景(尤其是 QLoRA),bitsandbytes 提供无需单独量化步骤的运行时量化:

# 已在上面的 QLoRA 小节中展示
# 使用 load_in_4bit=True 的 BitsAndBytesConfig
# NF4 量化最适合 QLoRA 微调

9. 选对模型

9.1 决策框架

                 ┌──────────────────────┐
                 │      你的任务是?      │
                 └──────────┬───────────┘
          ┌─────────────────┼─────────────────┐
          ▼                 ▼                 ▼
      代码生成            多语言处理          通用对话
          │                │                  │
    Qwen2.5-Coder     Qwen2.5 / Llama    Llama 3.1 8B
    DeepSeek-Coder    / Mistral NeMo     Mistral 7B
    CodeGemma                            Gemma 2 9B

      是否需要
      本地运行?
    ┌─────┴─────┐
    │是         │否
    ▼           ▼
 内存够吗?   使用 vLLM
+ Llama 70B
  ┌─┴──┐    或 405B
  │    │
 <=8GB >8GB
  │    │
 8B   70B
 Q4   Q4_K_M

9.2 硬件要求

模型最低 GPU 内存建议配置量化方式
Gemma 2 2B3GBRTX 3060fp16
Llama 3.1 8B5GBRTX 3060 12GBQ4_K_M
Mistral 7B5GBRTX 3060 12GBQ4_K_M
Gemma 2 27B16GBRTX 3090Q4_K_M
Llama 3.1 70B40GB2 张 A6000Q4_K_M
Mixtral 8x7B26GBA100 40GBQ4_K_M
Llama 3.1 405B200GB4 张 A100 80GBQ4_K_M

9.3 基于基准测试的选型(2026 年 3 月)

选择生产模型时,可把 LMSYS Chatbot Arena 和 Open LLM Leaderboard 当作起点,但一定要自己跑领域内的评测。每有新模型发布,基准排名就会变化。

大致的指引:

  • 最佳小型模型(8B 以下):Llama 3.1 8B 或 Gemma 2 9B
  • 最佳中型模型(7B~30B):Llama 3.3 70B 或 Mistral Small 3
  • 最佳开放权重整体表现:DeepSeek-V3 或 Llama 3.1 405B
  • 最佳代码模型:Qwen2.5-Coder 32B 或 DeepSeek-Coder-V2
  • 最佳推理模型:QwQ 32B 或 DeepSeek-R1

10. 开源 vs 闭源:何时用什么

10.1 正面对比

维度开源闭源
品质上限略低(2026 年差距已经很小)在前沿任务上更高
大规模成本低(只需承担硬件成本)按 token 计费,成本较高
数据隐私完全掌控数据会离开自己的基础设施
部署复杂度低(只需 API key)
可定制性完整(微调、提示词)有限(提示词,部分微调)
可靠性自行负责由服务商提供 SLA
延迟取决于自有基础设施不固定(共享资源)
上下文窗口最长 128K+最长 200K+
多模态有限(最强模型多为纯文本)强大(GPT-4o、Claude 3.5)

10.2 什么时候该选开源

强烈建议选开源的情况:

  • 处理敏感数据(医疗、法律、金融、个人信息)
  • 大规模、成本敏感型应用(日均超过 100 万 token)
  • 合规要求数据留在本地
  • 需要针对特定领域做微调
  • 想要避免厂商锁定

强烈建议选闭源的情况:

  • 开箱即用的最高品质至关重要
  • 需要最新的多模态能力
  • 团队缺乏 MLOps 经验
  • 需要快速做原型(API 上手更快)
  • 任务需要极长的上下文(超过 128K token)

10.3 混合策略

许多生产系统会把两者结合起来使用:

def route_request(request: dict) -> str:
    """根据需求把请求路由到开源或闭源模型。"""

    # 敏感数据始终使用开源
    if request.get("contains_pii") or request.get("confidential"):
        return "local_llama_70b"

    # 大规模的简单任务使用开源
    if request.get("task_type") in ["classification", "extraction", "summarization"]:
        if request.get("volume") == "high":
            return "local_llama_8b"

    # 复杂推理或多模态使用闭源
    if request.get("requires_vision") or request.get("complexity") == "high":
        return "gpt_4o"

    # 默认:为控制成本使用本地模型
    return "local_llama_70b"

总结

2026 年的开源 LLM 生态提供了前所未有的能力水准:

层级最佳选择
小型模型(8B 以下)Llama 3.1 8B、Gemma 2 9B、Phi-4
中型(8B~30B)Mistral Small 3、Qwen2.5 32B、Gemma 2 27B
大型(70B+)Llama 3.1 70B、Qwen2.5 72B
前沿DeepSeek-V3、Llama 3.1 405B
代码Qwen2.5-Coder 32B、DeepSeek-Coder-V2
推理DeepSeek-R1、QwQ 32B
本地推理Ollama、llama.cpp
生产级服务vLLM、TGI
微调LoRA + SFTTrainer、QLoRA

从 2024 年到 2026 年,最重要的变化是与闭源模型的品质差距被大幅拉近。在 RAG、聊天机器人、代码生成、信息抽取等大多数应用场景中,最顶尖的开源模型已经足以和 GPT-4 或 Claude 一较高下。隐私、成本、可定制性——选择开源的理由,比以往任何时候都更充分。

知识检验测验

Q1. "开放权重"模型和"真正的开源"模型有什么区别?

开放权重模型公开了模型权重,但不公开训练数据、训练代码或完整的训练方法(例:Llama 3、Mistral、Gemma)。真正的开源模型将权重、训练代码、训练数据全部公开(例:OLMo、Pythia)。这个区分在可复现性、研究,以及理解数据污染方面都很重要。

Q2. 什么是混合专家(MoE)?它对推理效率有什么影响?

MoE 用多个"专家"子网络取代密集的前馈层,路由器每次只为每个 token 挑选其中少数几个(例如 8 个里挑 2 个)。这意味着模型可以拥有比同等推理成本的密集模型多得多的总参数量。例如 Mixtral 8x7B 总参数量为 56B,但每个 token 的活跃参数只有约 12.9B,能以约 13B 的推理成本,获得接近 70B 水准的品质。

Q3. 什么是 QLoRA?它解决了什么硬件限制?

QLoRA 把 4 比特量化(通过 bitsandbytes 的 NF4)与 LoRA 适配器结合起来。基础模型被量化为 4 比特,内存占用降低 4 倍,而可训练的 LoRA 适配器仍保持较高精度。这使得在单张 80GB A100 GPU 上微调 70B 模型成为可能——若采用全精度微调,仅模型与优化器状态就需要约 280GB,根本无法实现。

Q4. vLLM 的 PagedAttention 是什么?它解决了什么问题?

PagedAttention 借鉴操作系统虚拟内存管理中的分页机制来管理 KV 缓存。传统的 LLM 服务器会为每个请求按最大长度预先分配固定的内存块,当序列比最大长度短时就会造成内存浪费。PagedAttention 按需以小页为单位分配内存,并且可以在请求之间共享页面,从而大幅提高 GPU 内存利用率,在相同硬件上实现更高的吞吐量。

현재 단락 (1/499)

1. [为什么选择开源 LLM?](#1-why-open-source)

작성 글자: 0원문 글자: 16,615작성 단락: 0/499