text-generation-inference 文档

Llamacpp 后端

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Llamacpp 后端

Llamacpp 后端通过集成 llama.cpp(一个针对 CPU 和 GPU 计算优化的先进推理引擎)来促进大型语言模型(LLM)的部署。此后端是 Hugging Face 的 文本生成推理 (TGI) 套件的组成部分,专门用于简化 LLM 在生产环境中的部署。

主要功能

  • 完全兼容 GGUF 格式和所有量化格式(GGUF 相关限制可在未来更新中通过动态即时生成来缓解)
  • 在 CPU 和 GPU 架构上优化推理
  • 容器化部署,消除依赖复杂性
  • 与 Hugging Face 生态系统无缝互操作

模型兼容性

此后端利用 GGUF 格式的模型,在计算效率和模型精度之间提供最佳平衡。您可以在 Hugging Face 上找到最佳模型。

构建 Docker 镜像

为了获得最佳性能,Docker 镜像默认使用原生 CPU 指令进行编译。因此,强烈建议在与构建过程相同的宿主架构上运行容器。目前正在努力提高不同系统之间的可移植性,同时保持高计算效率。

要构建 Docker 镜像,请使用以下命令:

docker build \
    -t tgi-llamacpp \
    https://github.com/huggingface/text-generation-inference.git \
    -f Dockerfile_llamacpp

构建参数

参数(带 —build-arg) 描述
llamacpp_version=bXXXX llama.cpp 的特定版本
llamacpp_cuda=ON 启用 CUDA 加速
llamacpp_native=OFF 禁用自动 CPU 检测
llamacpp_cpu_arm_arch=ARCH[+FEATURE]... 特定的 ARM CPU 和功能
cuda_arch=ARCH 定义目标 CUDA 架构

例如,在其他 ARM 架构上构建时以 Graviton4 为目标

docker build \
    -t tgi-llamacpp \
    --build-arg llamacpp_native=OFF \
    --build-arg llamacpp_cpu_arm_arch=armv9-a+i8mm \
    https://github.com/huggingface/text-generation-inference.git \
    -f Dockerfile_llamacpp

运行 Docker 镜像

基于 CPU 的推理

docker run \
    -p 3000:3000 \
    -e "HF_TOKEN=$HF_TOKEN" \
    -v "$HOME/models:/app/models" \
    tgi-llamacpp \
    --model-id "Qwen/Qwen2.5-3B-Instruct"

GPU 加速推理

docker run \
    --gpus all \
    -p 3000:3000 \
    -e "HF_TOKEN=$HF_TOKEN" \
    -v "$HOME/models:/app/models" \
    tgi-llamacpp \
    --n-gpu-layers 99
    --model-id "Qwen/Qwen2.5-3B-Instruct"

使用自定义 GGUF

GGUF 文件是可选的,如果 models 目录中不存在,则会在启动时自动生成。但是,如果默认的 GGUF 生成不适合您的用例,您可以使用 --model-gguf 提供您自己的 GGUF 文件,例如:

docker run \
    -p 3000:3000 \
    -e "HF_TOKEN=$HF_TOKEN" \
    -v "$HOME/models:/app/models" \
    tgi-llamacpp \
    --model-id "Qwen/Qwen2.5-3B-Instruct" \
    --model-gguf "models/qwen2.5-3b-instruct-q4_0.gguf"

请注意,--model-id 仍然是必需的。

高级参数

所有可配置参数的完整列表可在 --help 中查看

docker run tgi-llamacpp --help

下表总结了关键选项

参数 描述
--n-threads 用于生成的线程数
--n-threads-batch 用于批处理的线程数
--n-gpu-layers 存储在 VRAM 中的层数
--split-mode 在多个 GPU 上拆分模型
--defrag-threshold 如果孔洞/大小 > 阈值,则碎片整理 KV 缓存
--numa 启用 NUMA 优化
--disable-mmap 禁用模型的内存映射
--use-mlock 使用内存锁定以防止交换
--disable-offload-kqv 禁用将 KQV 操作卸载到 GPU
--disable-flash-attention 禁用闪存注意力
--type-k K 缓存使用的数据类型
--type-v V 缓存使用的数据类型
--validation-workers 用于负载验证和截断的分词器工作器数量
--max-concurrent-requests 最大并发请求数
--max-input-tokens 每个请求的最大输入 token 数
--max-total-tokens 每个请求的最大总 token 数(输入 + 输出)
--max-batch-total-tokens 批处理中的最大 token 数
--max-physical-batch-total-tokens 物理批处理中的最大 token 数
--max-batch-size 每个批处理的最大请求数

< > 在 GitHub 上更新