跳到内容

Llama.cpp

Outlines 通过使用 llama-cpp-python 库提供了与 Llama.cpp 的集成。Llamacpp 允许在计算能力有限的机器上运行量化模型。

安装

您需要安装 llama-cpp-python 库才能使用 llama.cpp 集成。有关使用 CUDA、Metal、ROCm 和其他后端安装 llama-cpp-python 的说明,请参阅安装部分。为了快速入门,您还可以运行

pip install "outlines[llamacpp]"

加载模型

您可以通过传递 HuggingFace Hub 上的仓库名称以及文件名(或 glob 模式)来初始化模型

from outlines import models

model = models.llamacpp("TheBloke/phi-2-GGUF", "phi-2.Q4_K_M.gguf")

这会将模型文件下载到 Hub 缓存文件夹并加载到内存中。

您还可以通过传递模型权重在您机器上的路径来初始化模型。假设 Phi2 的权重位于当前目录

from outlines import models
from llama_cpp import Llama

llm = Llama("./phi-2.Q4_K_M.gguf")
model = models.LlamaCpp(llm)

如果您需要更多控制,可以将与传递给 llama-ccp 库 相同的关键字参数传递给模型。

from outlines import models

model = models.llamacpp(
    "TheBloke/phi-2-GGUF",
    "phi-2.Q4_K_M.gguf"
    n_ctx=512,  # to set the context length value
)

主要参数

参数 类型 描述 默认值
n_gpu_layers int 卸载到 GPU 的层数。如果为 -1,则所有层都被卸载 0
split_mode int 如何在 GPU 之间分割模型。1 表示按层分割,2 表示按行分割 1
main_gpu int 主 GPU 0
tensor_split Optional[List[float]] 分割的张量应如何在 GPU 之间分布。如果为 None,则模型不分割。 None
n_ctx int 文本上下文。如果设置为 0,则从模型推理。 0
n_threads Optional[int] 用于生成的线程数。如果设置为 None,则使用所有可用线程。 None
verbose bool 将详细输出打印到 stderr False

有关参数的完整列表,请参阅 llama-cpp-python 文档

在 GPU 上加载模型

注意

请确保您安装 llama-cpp-python 时支持 GPU。

要在 GPU 上加载模型,请传递 n_gpu_layers=-1

from outlines import models

model = models.llamacpp(
    "TheBloke/phi-2-GGUF",
    "phi-2.Q4_K_M.gguf",
    n_gpu_layers=-1,  # to use GPU acceleration
)

这也适用于使用 generate.regexgenerate.jsongenerate.cfggenerate.formatgenerate.choice 构建的生成器。

加载 LoRA 适配器

您可以动态加载 LoRA 适配器

from outlines import models, generate

model = models.llamacpp("TheBloke/phi-2-GGUF", "phi-2.Q4_K_M.gguf")
generator = generate.text(model)
answer_1 = generator("prompt")

model.load_lora("./path/to/adapter.gguf")
answer_2 = generator("prompt")

要加载另一个适配器,您需要重新初始化模型。否则,新适配器将添加到前一个适配器之上。

from outlines import models

model = models.llamacpp("TheBloke/phi-2-GGUF", "phi-2.Q4_K_M.gguf")
model.load_lora("./path/to/adapter1.gguf")  # Load first adapter

model = models.llamacpp("TheBloke/phi-2-GGUF", "phi-2.Q4_K_M.gguf")
model.load_lora("./path/to/adapter2.gguf")  # Load second adapter

生成文本

除了文本生成部分中描述的参数外,您还可以传递额外的关键字参数,例如设置 Outlines 公共 API 中未公开的采样参数

from outlines import models, generate


model = models.llamacpp("TheBloke/phi-2-GGUF", "phi-2.Q4_K_M.gguf")
generator = generate.text(model)

answer = generator("A prompt", presence_penalty=0.8)

额外关键字参数

您传递给生成器的关键字参数值将覆盖初始化采样器或生成器时设置的值。默认情况下,所有额外的采样方法和重复惩罚都被禁用。

参数 类型 描述 默认值
suffix Optional[str] 要附加到生成文本的后缀。如果为 None,则不添加后缀。 None
echo bool 是否将提示词前置到完成结果中。 False
seed int 用于采样的随机种子。 None
max_tokens Optional[int] 要生成的最大 token 数。如果为 None,最大 token 数取决于 n_ctx 16
frequence_penalty float 根据 token 在过去 64 个 token 中的频率对其应用的惩罚。 0.0
presence_penalty float 根据 token 在过去 64 个 token 中的存在情况对其应用的惩罚。 0.0
repeat_penalty float 根据 token 在过去 64 个 token 中的重复情况对其应用的惩罚。 1.
stopping_criteria Optional[StoppingCriteriaList] 要使用的停止条件列表。 None
logits_processor Optional[LogitsProcessorList] 要使用的 logits 处理器列表。用于结构化生成的 logits 处理器将添加到此列表中。 None
temperature float 用于采样的温度 1.0
top_p float 用于 核采样 (nucleus sampling) 的 top-p 值。 1.
min_p float 用于 最小-p 采样 (minimum-p sampling) 的 min-p 值。 0.
typical_p float 用于 局部典型采样 (locally typical sampling) 的 p 值。 1.0
stop Optional[Union[str, List[str]]] 遇到时停止生成的字符串列表。 []
top_k int 用于 top-k 采样的 top-k 值。负值表示考虑所有 logit 值。 -1.
tfs_z float 无尾采样 (tail-free sampling) 参数。 1.0
mirostat_mode int Mirostat 采样模式。 0
mirostat_tau float Mirostat 采样的目标交叉熵。 5.0
mirostat_eta float Mirostat 采样中用于更新 mu 的学习率。 0.1

有关参数的完整和最新列表,请参阅 llama-cpp-python 文档,有关其他采样参数的默认值,请参阅 llama.cpp 代码

流式生成

安装

您需要安装 llama-cpp-python 库才能使用 llama.cpp 集成。

CPU

对于*仅限 CPU* 的安装,运行

pip install llama-cpp-python

警告

如果您需要支持 BLAS、Metal 或 CUDA,请勿运行此命令。请遵循下面的说明。

CUDA

CMAKE_ARGS="-DLLAMA_CUDA=on" pip install llama-cpp-python

也可以安装支持 CUDA 的预构建 wheels(Python 3.10 及以上)

pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/<cuda-version>

其中 <cuda-version> 是以下之一,取决于您系统上安装的 CUDA 版本

  • cu121 用于 CUDA 12.1
  • cu122 用于 CUDA 12.2
  • cu123 用于 CUDA 12.3

Metal

CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python

也可以安装支持 Metal 的预构建 wheels(Python 3.10 及以上,MacOS 11.0 及以上)

pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/metal

OpenBLAS

CMAKE_ARGS="-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS" pip install llama-cpp-python

其他后端

llama.cpp 支持许多其他后端。请参阅 llama.cpp 文档以使用以下后端

  • CLBast (OpenCL)
  • hipBLAS (ROCm)
  • Vulkan
  • Kompute
  • SYCL