Llama.cpp
Outlines 通过使用 llama-cpp-python 库提供了与 Llama.cpp 的集成。Llamacpp 允许在计算能力有限的机器上运行量化模型。
安装
您需要安装 llama-cpp-python
库才能使用 llama.cpp 集成。有关使用 CUDA、Metal、ROCm 和其他后端安装 llama-cpp-python
的说明,请参阅安装部分。为了快速入门,您还可以运行
加载模型
您可以通过传递 HuggingFace Hub 上的仓库名称以及文件名(或 glob 模式)来初始化模型
这会将模型文件下载到 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.regex
、generate.json
、generate.cfg
、generate.format
和 generate.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* 的安装,运行
警告
如果您需要支持 BLAS、Metal 或 CUDA,请勿运行此命令。请遵循下面的说明。
CUDA
也可以安装支持 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.1cu122
用于 CUDA 12.2cu123
用于 CUDA 12.3
Metal
也可以安装支持 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
其他后端
llama.cpp
支持许多其他后端。请参阅 llama.cpp 文档以使用以下后端
- CLBast (OpenCL)
- hipBLAS (ROCm)
- Vulkan
- Kompute
- SYCL