llama.cpp 是一个主要用 C++ 编写的开源软件库,用于在各种大型语言模型(LLMs)上进行推理,例如 Llama。它的主要目标是提供最先进的 LLM 推理性能,适用于各种硬件,且设置要求极低。此外,该库还提供 Python 绑定,提供用于文本补全的高级 API 以及兼容 OpenAI 的 Web 服务器。
llama.cpp 的主要目标是通过最小的设置和最先进的性能,在各种硬件上实现 LLM 推理——无论是本地还是在云端。
- 纯 C/C++ 实现,无任何依赖
- 苹果硅作为一等公民——通过 ARM NEON、Accelerate 和 Metal 框架进行优化
- 支持 x86 架构的 AVX、AVX2 和 AVX512
- 支持 1.5 位、2 位、3 位、4 位、5 位、6 位和 8 位整数量化,以加快推理速度并减少内存使用
- 自定义 CUDA 内核,用于在 NVIDIA GPU 上运行 LLM(通过 HIP 支持 AMD GPU)
- 支持 Vulkan 和 SYCL 后端
- CPU+GPU 混合推理,以部分加速超过总 VRAM 容量的模型
Phi-3.5-Instruct 模型可以使用 llama.cpp 进行量化,但 Phi-3.5-Vision 和 Phi-3.5-MoE 尚不支持。llama.cpp 转换的格式是 gguf,这也是最广泛使用的量化格式。
在 Hugging Face 上有大量量化的 GGUF 格式模型。AI Foundry、Ollama 和 LlamaEdge 依赖于 llama.cpp,因此 GGUF 模型也经常被使用。
GGUF 是一种二进制格式,经过优化可快速加载和保存模型,使其在推理方面高度高效。GGUF 设计用于与 GGML 及其他执行器一起使用。GGUF 由 @ggerganov 开发,他也是 llama.cpp 的开发者,这是一个流行的 C/C++ LLM 推理框架。在 PyTorch 等框架中开发的模型可以转换为 GGUF 格式,以便与这些引擎一起使用。
ONNX 是一种传统的机器学习/深度学习格式,在不同的 AI 框架中有很好的支持,并在边缘设备中有很好的使用场景。至于 GGUF,它基于 llama.cpp,可以说是在生成 AI 时代产生的。两者用途相似。如果你希望在嵌入式硬件和应用层中获得更好的性能,ONNX 可能是你的选择。如果你使用 llama.cpp 的衍生框架和技术,那么 GGUF 可能会更好。
1. 环境配置
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j8
2. 量化
使用 llama.cpp 将 Phi-3.5-Instruct 转换为 FP16 GGUF
./convert_hf_to_gguf.py <Your Phi-3.5-Instruct Location> --outfile phi-3.5-128k-mini_fp16.gguf
将 Phi-3.5 量化为 INT4
./llama.cpp/llama-quantize <Your phi-3.5-128k-mini_fp16.gguf location> ./gguf/phi-3.5-128k-mini_Q4_K_M.gguf Q4_K_M
3. 测试
安装 llama-cpp-python
pip install llama-cpp-python -U
注意
如果你使用苹果硅,请这样安装 llama-cpp-python
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python -U
测试
llama.cpp/llama-cli --model <Your phi-3.5-128k-mini_Q4_K_M.gguf location> --prompt "<|user|>\nCan you introduce .NET<|end|>\n<|assistant|>\n" --gpu-layers 10
-
了解更多关于 llama.cpp 的信息 https://onnxruntime.ai/docs/genai/
-
了解更多关于 GGUF 的信息 https://huggingface.co/docs/hub/en/gguf
免责声明: 本文件使用基于机器的AI翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应将原文档视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用此翻译而产生的任何误解或误读,我们概不负责。