📖 文本生成(GPT)
📖 文本生成(GPT)
LocalAI 支持使用 llama.cpp 和其他后端(如 rwkv.cpp)生成 GPT 文本,具体支持的模型家族请参考模型兼容性。
注意:
- 您还可以将模型名称作为 OpenAI 令牌的一部分指定。
- 如果只有一个模型可用,API 将为所有请求使用它。
API 参考手册
聊天完成
https://platform.openai.com/docs/api-reference/chat
例如,要生成聊天完成,您可以向 /v1/chat/completions 端点发送一个 POST 请求,并将指令作为请求体:
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "ggml-koala-7b-model-q4_0-r2.bin",
"messages": [{"role": "user", "content": "这是一个测试!"}],
"temperature": 0.7
}'可用的附加参数:top_p、top_k、max_tokens
编辑完成
https://platform.openai.com/docs/api-reference/edits
要生成编辑完成,您可以向 /v1/edits 端点发送一个 POST 请求,并将指令作为请求体:
curl http://localhost:8080/v1/edits -H "Content-Type: application/json" -d '{
"model": "ggml-koala-7b-model-q4_0-r2.bin",
"instruction": "rephrase",
"input": "黑猫从窗户跳了出来",
"temperature": 0.7
}'可用的附加参数:top_p、top_k、max_tokens
完成生成
https://platform.openai.com/docs/api-reference/completions
要生成完成,您可以向 /v1/completions 端点发送一个 POST 请求,并将指令作为请求体:
curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{
"model": "ggml-koala-7b-model-q4_0-r2.bin",
"prompt": "很久很久以前,在遥远的星系中",
"temperature": 0.7
}'可用的附加参数:top_p、top_k、max_tokens
列出模型
您可以通过以下命令列出所有可用模型:
curl http://localhost:8080/v1/models后端
AutoGPTQ
AutoGPTQ 是一个基于 GPTQ 算法的易于使用的 LLMs 量化包,具有用户友好的 API。
先决条件
这是一个额外的后端 - 在容器镜像中已经可用,无需进行设置。
如果您在本地构建 LocalAI,则需要手动安装 AutoGPTQ。
模型设置
如果模型不存在,第一次会自动从 huggingface 下载模型。可以通过 YAML 配置文件或直接通过查询端点与 huggingface 存储库模型名称定义模型。例如,在 models/ 中创建一个 YAML 配置文件:
name: orca
backend: autogptq
model_base_name: "orca_mini_v2_13b-GPTQ-4bit-128g.no-act.order"
parameters:
model: "TheBloke/orca_mini_v2_13b-GPTQ"
# ...测试:
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "orca",
"messages": [{"role": "user", "content": "你好吗?"}],
"temperature": 0.1
}'RWKV
有关如何运行 rwkv 模型的完整示例,请参见 示例。
注意:rwkv 模型需要在 YAML 配置文件中指定后端 rwkv 并提供一个与之关联的标记器:
36464540 -rwkv_small
36464543rwkv_small.tokenizer.jsonllama.cpp
llama.cpp 是 Facebook 的 LLaMA 模型在 C/C++ 中的流行端口。
ggml 文件格式已被弃用。如果您使用 ggml 模型并通过 YAML 文件配置模型,请指定使用早于 v2.25.0 的 LocalAI 版本。对于 gguf 模型,请使用 llama 后端。go 后端也已弃用,但仍然可以作为 go-llama 使用。
功能
llama.cpp 模型支持以下功能:
设置
LocalAI 开箱即支持 llama.cpp 模型。您可以使用 llama.cpp 模型与其他模型一样的方式。
手动设置
将 ggml 或 gguf 模型文件复制到 models 文件夹中。您可以在 API 调用中的 model 参数中引用模型。
[您可以选择创建一个关联的 YAML](https://relref "docs/advanced" %}) 模型配置文件来调整模型参数或将模板应用于提示。
提示模板对于针对特定提示进行微调的模型非常有用。
自动设置
LocalAI 支持模型库,这是模型的索引。例如,huggingface 库包含来自 huggingface 模型库的 ggml 或 gguf 模型的大量索引。
例如,如果启用了库并且 LocalAI 已经运行,您可以通过运行以下命令开始使用 huggingface 中的模型进行聊天:
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "TheBloke/WizardLM-13B-V1.2-GGML/wizardlm-13b-v1.2.ggmlv3.q2_K.bin",
"messages": [{"role": "user", "content": "这是一个测试!"}],
"temperature": 0.1
}'LocalAI 将自动下载并配置 model 目录中的模型。
模型也可以预加载或按需下载。要了解模型库,请查看模型库文档。
YAML 配置
要使用 llama.cpp 后端,请在 YAML 文件中指定 llama 作为后端:
name: llama
backend: llama
parameters:
# 相对于模型路径
model: file.gguf参考文献
exllama/2
Exllama 是 "一个更内存高效的 Llama 的 HF 变压器实现的重写,用于量化权重"。exllama 和 exllama2 都受支持。
模型设置
将模型下载为文件夹放入 model 目录中,并创建一个 YAML 文件指定 exllama 后端。例如使用 TheBloke/WizardLM-7B-uncensored-GPTQ 模型:
$ git lfs install
$ cd models && git clone https://huggingface.co/TheBloke/WizardLM-7B-uncensored-GPTQ
$ ls models/
.keep WizardLM-7B-uncensored-GPTQ/ exllama.yaml
$ cat models/exllama.yaml
name: exllama
parameters:
model: WizardLM-7B-uncensored-GPTQ
backend: exllama
# 注意:如果是 exllama2 模型,您也可以在这里指定 "exllama2"
# ...测试:
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "exllama",
"messages": [{"role": "user", "content": "你好吗?"}],
"temperature": 0.1
}'vLLM
vLLM 是一个快速且易于使用的 LLM 推断库。
LocalAI 与 vLLM 有内置集成,可以用来运行模型。您可以在 这里 查看有关 vllm 性能的信息。
设置
为要使用的模型创建一个 YAML 文件。
要设置模型,您只需在 YAML 配置文件中指定模型名称:
name: vllm
backend: vllm
parameters:
model: "facebook/opt-125m"
# 取消注释以指定量化方法(可选)
# quantization: "awq"
# 取消注释以限制 GPU 内存利用率(vLLM 默认为 0.9,即 90%)
# gpu_memory_utilization: 0.5
# 取消注释以信任来自 huggingface 的远程代码
# trust_remote_code: true
# 取消注释以启用急切执行
# enforce_eager: true
# 取消注释以指定每个 GPU 的 CPU 交换空间大小(以 GiB 为单位)
# swap_space: 2
# 取消注释以指定序列的最大长度(包括提示和输出)
# max_model_len: 32768
# 取消注释并指定 Tensor 分区的数量。
# 允许您分区并运行大型模型。性能提升有限。
# https://github.com/vllm-project/vllm/issues/1435
# tensor_parallel_size: 2后端将自动下载运行模型所需的文件。
使用
通过指定 vllm 后端使用 completions 端点:
curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{
"model": "vllm",
"prompt": "你好,我的名字是",
"temperature": 0.1, "top_p": 0.1
}'Transformers
Transformers 是一个用于 PyTorch、TensorFlow 和 JAX 的最先进的机器学习库。
LocalAI 与 Transformers 有内置集成,可以用来运行模型。
这是一个额外的后端 - 在容器镜像(extra 镜像已包含 Transformers 的 Python 依赖项)中已经可用,无需进行设置。
设置
为要使用的模型创建一个 YAML 文件。
要设置模型,您只需在 YAML 配置文件中指定模型名称:
name: transformers
backend: transformers
parameters:
model: "facebook/opt-125m"
``````markdown
# 模型参数
## 类型
| 类型 | 描述 |
| --- | --- |
| `AutoModelForCausalLM` | `AutoModelForCausalLM` 是一个可以用来生成序列的模型。适用于带有 NVIDIA CUDA 和 Intel GPU 加速的 Intel 扩展的 Pytorch |
| `OVModelForCausalLM` | 用于 Intel CPU/GPU/NPU OpenVINO 文本生成模型 |
| `OVModelForFeatureExtraction` | 用于 Intel CPU/GPU/NPU OpenVINO 嵌入加速 |
| N/A | 默认为 `AutoModel` |
- `OVModelForCausalLM` 需要来自 Hugging face 的 OpenVINO IR [文本生成](https://huggingface.co/models?library=openvino&pipeline_tag=text-generation) 模型
- `OVModelForFeatureExtraction` 与任何来自 Huggingface 的 Safetensors Transformer [特征提取](https://huggingface.co/models?pipeline_tag=feature-extraction&library=transformers,safetensors) 模型兼容(嵌入模型)
请注意,`AutoModelForCausalLM` 在 Intel GPU 上目前尚未实现流式处理。
AMD GPU 支持尚未实现。
尽管 AMD CPU 不是 OpenVINO 官方支持的,但有报告称它有效:效果因机器而异。
## 嵌入
如果模型是嵌入模型,请使用 `embeddings: true`
## 推理设备选择
Transformer 后端会尝试自动选择最佳的推理设备,不过您可以通过 `main_gpu` 参数手动覆盖决策。
| 推理引擎 | 适用值 |
| --- | --- |
| CUDA | `cuda`, `cuda.X` 其中 X 是 GPU 设备,如 `nvidia-smi -L` 输出 |
| OpenVINO | 任何来自 [推理模式](https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes.html) 的适用值,如 `AUTO`、`CPU`、`GPU`、`NPU`、`MULTI`、`HETERO` |
CUDA 示例:
`main_gpu: cuda.0`
OpenVINO 示例:
`main_gpu: AUTO:-CPU`
此参数适用于文本生成和特征提取(即嵌入)模型。
## 推理精度
Transformer 后端会自动选择最快的适用推理精度,根据设备支持。
CUDA 后端可以手动启用 *bfloat16*,如果您的硬件支持,可以使用以下参数:
`f16: true`
## 量化
| 量化 | 描述 |
| --- | --- |
| `bnb_8bit` | 8 位量化 |
| `bnb_4bit` | 4 位量化 |
| `xpu_8bit` | 为 Intel XPUs 的 8 位量化 |
| `xpu_4bit` | 为 Intel XPUs 的 4 位量化 |
## 信任远程代码
某些模型(如 Microsoft Phi-3)需要比 Transformer 库提供的外部代码。
默认情况下出于安全考虑禁用。
可以手动启用:
`trust_remote_code: true`
## 最大上下文大小
可以指定最大上下文大小(以字节为单位)的参数:`context_size`。不要使用高于模型支持的值。
使用示例:
`context_size: 8192`
## 自动提示模板
通常,聊天模板由模型作者在 `tokenizer_config.json` 文件中定义。
要启用它,请在 `template` 部分使用 `use_tokenizer_template: true` 参数。
使用示例:
```yaml
template:
use_tokenizer_template: true自定义停止词
停止词通常在 tokenizer_config.json 文件中定义。
如果需要(例如在 llama3-Instruct 模型中),可以用 stopwords 参数覆盖。
使用示例:
stopwords:
- "<|eot_id|>"
- "<|end_of_text|>"使用
通过指定 transformers 模型使用 completions 端点:
curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{
"model": "transformers",
"prompt": "Hello, my name is",
"temperature": 0.1, "top_p": 0.1
}'示例
OpenVINO
OpenVino 和 Starling 模型的模型配置文件:
name: starling-openvino
backend: transformers
parameters:
model: fakezeta/Starling-LM-7B-beta-openvino-int8
context_size: 8192
threads: 6
f16: true
type: OVModelForCausalLM
stopwords:
- <|end_of_turn|>
prompt_cache_path: "cache"
prompt_cache_all: true
template:
chat_message: |
{{if eq .RoleName "system"}}{{.Content}}<|end_of_turn|>{{end}}{{if eq .RoleName "assistant"}}<|end_of_turn|>GPT4 Correct Assistant: {{.Content}}<|end_of_turn|>{{end}}{{if eq .RoleName "user"}}GPT4 Correct User: {{.Content}}{{end}}
chat: |
{{.Input}}<|end_of_turn|>GPT4 Correct Assistant:
completion: |
{{.Input}}