Appearance
批量解码 (Batch Decode) 是 llama.cpp 的批处理机制,允许在一次
llama_decode调用中同时处理多个 token 或多个序列。
为什么需要 batch-decode
单 token 解码(每次处理 1 个 token)无法充分利用 GPU 的并行计算能力。批量解码将多个 token 或多个序列的推理合并到一次调用中,提高硬件利用率。
核心原理
c
struct llama_batch {
llama_token * token; // token IDs 数组
int32_t * pos; // 每个 token 的位置
int32_t * n_seq_id; // 每个 token 的序列数
llama_seq_id ** seq_id; // 每个 token 的序列 ID
int32_t n_tokens; // 总 token 数
};使用场景:
- Prefill — 将整个 prompt(多个 token)一次处理
- Parallel Decoding — 多个请求的 token 合并到一个 batch
- Speculative Decoding — 候选 token 批量验证
Prefill vs Decode:
- Prefill: batch 中包含同一序列的多个 token(矩阵 × 矩阵)
- Decode: batch 中包含不同序列的单个 token(矩阵 × 多向量)
在源码中的实现
src/llama-batch.cpp— batch 构建工具src/llama-context.cpp—llama_decode()执行 batchinclude/llama.h—llama_batch结构体定义tools/server/— server 的并发请求合并到 batch