大语言模型推理端概述
Large Language Model(LLM),即大语言模型,典型代表包括 ChatGPT、Llama 系列等。推理端是指模型训练完成后,用于模型应用和部署的接口层。它负责在本地或服务器环境中加载模型权重,处理用户输入,并生成预测结果。
推理端实现了大语言模型的基本功能,包括文本生成、自动摘要、语言翻译、代码生成、问答系统等。与训练端不同,推理端更关注延迟、吞吐量以及资源占用效率,特别是在资源受限的边缘设备上运行。
目前主流的开源推理库包括 Llama.cpp 和 Gemma.cpp。
- Llama.cpp:是 Meta 发布的 Llama 系列模型的 C++ 实现库,支持多种硬件后端(CPU, GPU, Metal, Vulkan 等)。
- Gemma.cpp:是 Google 基于 Gemma 模型推出的推理库,同样采用 C++ 实现,针对特定模型进行了优化。
工作流程详解
以 Llama.cpp 为例,LLM 推理端的工作流程大致相同,主要包含以下关键步骤。
1. 工程目录结构
|-- example
| |-- main
| |-- main.cpp # 推理 llama 2 的主函数入口
|-- ggml-alloc.c # 内存分配管理模块
|-- ggml-alloc.h
|-- llama.cpp # 整个 llama 的核心文件,包含所有重要 interface
|-- llama.h # 对外暴露的头文件
|-- ggml.c # 机器学习计算库,定义基础数据结构和函数
|-- ggml.h
|-- ggml-cuda.cu # CUDA 版本的 kernel 实现与调用
|-- ggml-cuda.h
|-- ggml-opencl.cpp # OpenCL 版本的 kernel 实现与调用
|-- ggml-metal.m # Apple Metal GPU 加速实现
|-- ... # 其他平台适配文件
2. 详细工作流
步骤一:参数解析与配置
参数控制推理过程的行为。例如,批量大小(batch size)影响吞吐量,温度(temperature)控制生成文本的随机性。
核心函数:gpt_params_parse()
常用用户参数:
--model: 指定模型文件路径。--color: 区分生成文本和输入文本的颜色。--interactive: 启用交互模式,允许连续对话。--prompt: 预设初始提示词。--file: 从文件读取提示词。
步骤二:加载模型
加载模型是推理的第一步。模型文件通常经过量化处理(如 GGUF 格式),包含权重参数。
- 根据输入参数构建模型参数结构体
llama_model_params。 - 调用
llama_load_model_from_file()加载模型文件到内存。 - 验证模型完整性,检查上下文长度限制。
步骤三:创建上下文
llama_context 是整个推理过程的核心数据结构,存储了当前会话的状态。
- 存储内容:模型指针、Prompt 缓存、KV Cache、Backend 信息(CPU/GPU)。
- 初始化函数:
llama_new_context_with_model(model, params)。 - 注意:需根据显存/内存大小合理设置
n_ctx(上下文长度)和n_batch(批处理大小)。
步骤四:处理输入 Prompt
将输入的文本数据转换为模型可理解的数值格式。
-
分词 (Tokenization):
- 使用 对输入文本进行分词。


