高级使用
高级使用
使用YAML文件进行高级配置
为了定义默认提示符、模型参数(如自定义默认 top_p
或 top_k
),LocalAI 可以配置为使用一组默认参数和模板来服务用户定义的模型。
要配置模型,您可以在模型路径下创建多个 yaml
文件,或者指定一个 YAML 配置文件。考虑以下位于 example/chatbot-ui
的 models
文件夹:
base ❯ ls -liah examples/chatbot-ui/models
36487587 drwxr-xr-x 2 mudler mudler 4.0K May 3 12:27 .
36487586 drwxr-xr-x 3 mudler mudler 4.0K May 3 10:42 ..
36465214 -rw-r--r-- 1 mudler mudler 10 Apr 27 07:46 completion.tmpl
36464855 -rw-r--r-- 1 mudler mudler ?G Apr 27 00:08 luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin
36464537 -rw-r--r-- 1 mudler mudler 245 May 3 10:42 gpt-3.5-turbo.yaml
36467388 -rw-r--r-- 1 mudler mudler 180 Apr 27 07:46 chat.tmpl
在 gpt-3.5-turbo.yaml
文件中定义了 gpt-3.5-turbo
模型,这是一个使用预定义选项的 luna-ai-llama2
的别名。
例如,以下内容声明了由 luna-ai-llama2
模型支持的 gpt-3.5-turbo
:
name: gpt-3.5-turbo
# 默认模型参数
parameters:
# 相对于模型路径
model: luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin
# 温度
temperature: 0.3
# 所有 OpenAI 请求选项...
# 默认上下文大小
context_size: 512
threads: 10
# 定义后端(可选)。默认情况下,模型第一次交互时会尝试猜测后端。
backend: llama-stable # 可用:llama, stablelm, gpt2, gptj rwkv
# 启用提示符缓存
prompt_cache_path: "alpaca-cache"
prompt_cache_all: true
# 停用词(如果后端支持)
stopwords:
- "HUMAN:"
- "### Response:"
# 定义聊天角色
roles:
assistant: '### Response:'
system: '### System Instruction:'
user: '### Instruction:'
template:
# 默认情况下在端点调用时使用的提示模板的模板文件 ".tmpl"。注意文件中没有扩展名
completion: completion
chat: chat
通过 CLI 指定 config-file
允许在单个文件中声明模型列表,例如:
- name: list1
parameters:
model: testmodel
context_size: 512
threads: 10
stopwords:
- "HUMAN:"
- "### Response:"
roles:
user: "HUMAN:"
system: "GPT:"
template:
completion: completion
chat: chat
- name: list2
parameters:
model: testmodel
context_size: 512
threads: 10
stopwords:
- "HUMAN:"
- "### Response:"
roles:
user: "HUMAN:"
system: "GPT:"
template:
completion: completion
chat: chat
也请参见 chatbot-ui 作为如何使用配置文件的示例。
可以通过指定完整 URL 或简写 URL 到 YAML 模型配置文件,并在启动时使用 local-ai 来使用它,例如使用 phi-2:
local-ai github://mudler/LocalAI/examples/configurations/phi-2.yaml@master
完整配置模型文件参考
# 模型、模板和系统特性的主要配置。
name: "" # 模型名称,用于 API 调用中识别模型。
# 模型的精度设置,降低精度可以在某些硬件上提高性能。
f16: null # 是否使用 16 位浮点精度。
embeddings: true # 为模型启用嵌入。
# 应用的并发设置。
threads: null # 用于处理的线程数。
# 角色定义了不同实体在对话模型中的交互方式。
# 它可以用来将角色映射到对话的特定部分。
roles: {} # 实体(如用户、系统、助手等)的角色。
# 用于计算的后端(如 llama-cpp、diffusers、whisper)。
backend: "" # AI 计算的后端。
# 各种类型的模型交互的模板。
template:
chat: "" # 聊天交互的模板。使用带有 Sprig 函数的 Go 模板。
chat_message: "" # 单个聊天消息的模板。使用带有 Sprig 函数的 Go 模板。
completion: "" # 生成文本完成的模板。使用带有 Sprig 函数的 Go 模板。
edit: "" # 编辑操作的模板。使用带有 Sprig 函数的 Go 模板。
function: "" # 函数调用的模板。使用带有 Sprig 函数的 Go 模板。
use_tokenizer_template: false # 是否使用特定的分词器模板。 (vLLM)
join_chat_messages_by_character: null # 如果适用,用于连接聊天消息的字符。默认为换行符。
# 控制特定函数调用行为的函数相关设置。
function:
disable_no_action: false # 是否禁用无操作行为。
grammar:
parallel_calls: false # 允许返回并行工具
disable_parallel_new_lines: false # 禁用语法检查中的并行处理新行。
mixed_mode: false # 允许混合模式语法强制
no_mixed_free_string: false # 在混合模式下禁用自由字符串。
disable: false # 完全禁用语法强制功能。
prefix: "" # 在语法规则之前添加的前缀。
expect_strings_after_json: false # 预期 JSON 数据之后的字符串。
no_action_function_name: "" # 无操作时调用的函数名称。
no_action_description_name: "" # 无操作函数的描述名称。
response_regex: [] # 匹配响应的正则表达式。
argument_regex: [] # 从响应中提取函数参数的命名正则表达式。
argument_regex_key_name: "key" # 命名正则表达式捕获键的名称。
argument_regex_value_name: "value" # 命名正则表达式捕获值的名称。
json_regex_match: [] # 在工具模式下匹配 JSON 数据的正则表达式。
replace_function_results: [] # 占位符,用于将函数调用结果替换为任意字符串或模式。
replace_llm_results: [] # 将语言模型结果替换为任意字符串或模式。
capture_llm_results: [] # 在函数调用中捕获语言模型结果作为文本结果,例如,如果模型返回一个“思考”块和一个“响应”块,这将允许您捕获思考块。
function_name_key: "name"
function_arguments_key: "arguments"
# 启用实验性或可选特性的特性门控标志。
feature_flags: {}
# 默认使用的系统提示符。
system_prompt: ""
# 用于在 GPU 之间分割张量的配置。
tensor_split: ""
# 在多 GPU 设置中用作主 GPU 的标识符。
main_gpu: ""
# 添加到 RMS 归一化分母中的小值,以防止除以零。
rms_norm_eps: 0
# 自然问题生成模型参数。
ngqa: 0
# 提示符缓存存储的路径。
prompt_cache_path: ""
# 是否缓存所有提示符。
prompt_cache_all: false
# 提示符缓存是否为只读。
prompt_cache_ro: false
# Mirostat 采样设置。
mirostat_eta: null
mirostat_tau: null
mirostat: null
# GPU 特定的层配置。
gpu_layers: null
# 用于高效 I/O 操作的内存映射。
mmap: null
# 确保数据保持在 RAM 中的内存锁定。
mmlock: null
# 为 GPU 操作使用最小 VRAM 的模式。
low_vram: null
# 中止处理的关键词或短语。
stopwords: []
# 从响应中剪切以保持上下文或相关性的字符串。
cutstrings: []
# 从响应中剪切以获得更干净输出的字符串。
trimspace: []
trimsuffix: []
# 模型理解对话或文本的默认上下文大小。
context_size: null
# 针对具有多个 CPU 的系统的非统一内存访问设置。
numa: false
# LoRA 配置
lora_adapter: ""
lora_base: ""
lora_scale: 0
# 在 GPU 操作中禁用矩阵乘法队列。
no_mulmatq: false
# 生成草稿响应的模型。
draft_model: ""
n_draft: 0
# 影响内存和处理速度的模型量化设置。
quantization: ""
# 为模型分配的 GPU 内存利用率。(vLLM)
gpu_memory_utilization: 0
# 是否信任并执行远程代码。
trust_remote_code: false
# 如果适用,强制执行 TensorFlow 操作的急切执行。(vLLM)
enforce_eager: false
# 用于在内存和外部存储之间交换数据的空间。(vLLM)
swap_space: 0
# 最大模型长度,可能指的是令牌数或参数数。(vLLM)
max_model_len: 0
# 分布式计算环境中张量并行的大小。(vLLM)
tensor_parallel_size: 0
# 用于多模态的视觉模型。
mmproj: ""
# 禁止在变换器模型中将键/值对卸载到内存以节省内存。
no_kv_offloading: false
# 绳子惩罚的缩放因子。
rope_scaling: ""
# 配置类型,通常与任务类型或模型架构相关。
type: ""
# YARN 设置
yarn_ext_factor: 0
yarn_attn_factor: 0
yarn_beta_fast: 0
yarn_beta_slow: 0
# AutoGPT-Q 设置,针对 GPT 模型的特定配置。
autogptq:
model_base_name: "" # 模型的基本名称。
device: "" # 运行模型的设备。
triton: false # 是否使用 Triton 推断服务器。
use_fast_tokenizer: false # 是否使用快速分词器以加快处理速度。
# 用于扩散模型的配置
diffusers:
cuda: false # 是否使用 CUDA
pipeline_type: "" # 要使用的管道类型。
scheduler_type: "" # 控制操作的调度器类型。
enable_parameters: "" # 在扩散器中启用的参数。
cfg_scale: 0 # CFG 在扩散器设置中的比例。
img2img: false # 是否支持图像到图像的转换。
clip_skip: 0 # 在 CLIP 操作中要跳过的步骤数。
clip_model: "" # 在 CLIP 操作中使用的模型。
CLIP 操作使用
clip_subfolder: "" # 存储CLIP相关数据的子文件夹。
control_net: "" # 使用的控制网
步骤计数,通常用于图像处理模型
step: 0
gRPC通信配置。
grpc:
attempts: 0 # gRPC调用重试次数。
attempts_sleep_time: 0 # 重试间隔时间。
文本转语音(TTS)配置。
tts:
voice: "" # TTS的语音设置。
vall-e:
audio_path: "" # Vall-E音频文件的路径。
是否为基于GPU的操作使用CUDA。
cuda: false
作为设置或操作的一部分需要下载的文件列表。
download_files: []
提示模板
API不会为与模型对话注入默认提示。您必须使用类似于斯坦福alpaca文档中描述的提示:
https://github.com/tatsu-lab/stanford_alpaca#data-release。
下面的指示描述了一个任务。编写一个响应,适当地完成请求。
### 指示:
{{.Input}}
### 响应:
查看这个仓库中的prompt-templates目录,了解一些最受欢迎模型的模板。
对于编辑端点,alpaca基础模型的示例模板可以是:
下面是一个指示,描述了一个任务,附带一个输入,提供进一步上下文。编写一个响应,适当地完成请求。
### 指示:
{{.Instruction}}
### 输入:
{{.Input}}
### 响应:
使用API安装模型
您可以使用LocalAI API端点和模型定义在运行时通过API程序化地安装模型,而不是手动安装模型。
在model-gallery中有一个经过策划的模型文件集合(进行中!)。模型画廊的文件与用于配置LocalAI模型的文件不同。模型画廊文件包含模型设置信息和在本地运行模型所需的文件。
例如,要安装lunademo
,您可以将POST调用发送到/models/apply
端点,并带上模型定义的URL(url
)和LocalAI中模型的名称(name
,可选):
curl --location 'http://localhost:8080/models/apply' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "TheBloke/Luna-AI-Llama2-Uncensored-GGML/luna-ai-llama2-uncensored.ggmlv3.q5_K_M.bin",
"name": "lunademo"
}'
启动时预加载模型
为了允许API在首次启动时加载所有所需模型,启动期间可以使用模型画廊文件。
PRELOAD_MODELS='[{"url": "https://raw.githubusercontent.com/go-skynet/model-gallery/main/gpt4all-j.yaml","name": "gpt4all-j"}]' local-ai
PRELOAD_MODELS
(或--preload-models
)接受一个JSON格式的列表,参数与/models/apply
端点的API调用相同。
同样,可以通过指定包含模型列表的YAML配置文件的路径来指定PRELOAD_MODELS_CONFIG
(或--preload-models-config
):
- url: https://raw.githubusercontent.com/go-skynet/model-gallery/main/gpt4all-j.yaml
name: gpt4all-j
# ...
自动提示缓存
LocalAI可以自动缓存提示,以加快提示加载速度。如果您的模型需要一个带有前缀文本的提示模板,在输入之前,这可能会很有用。
要启用提示缓存,您可以在模型配置的YAML文件中控制设置:
# 启用提示缓存
prompt_cache_path: "cache"
prompt_cache_all: true
prompt_cache_path
是相对于模型文件夹的路径。如果将prompt_cache_all
设置为true
,则在此处输入文件名,在首次加载时将自动创建此文件。
为模型配置特定后端
默认情况下,LocalAI将尝试通过尝试所有后端来自动加载模型。这对于大多数模型来说可能有效,但有些后端没有配置为自动加载。
可用的后端列表在[模型兼容性表]中列出。
为了为您的模型指定后端,请在models
目录中创建一个模型配置文件,指定后端:
name: gpt-3.5-turbo
# 默认模型参数
parameters:
# 相对于模型路径
model: ...
backend: llama-stable
# ...
连接外部后端
LocalAI后端内部使用gRPC
服务实现。这也允许LocalAI
在启动时连接到外部gRPC
服务,并通过第三方二进制文件扩展LocalAI功能。
CLI中的--external-grpc-backends
参数可以用来指定本地后端(一个文件)或远程URL。语法是<BACKEND_NAME>:<BACKEND_URI>
。一旦LocalAI用这个参数启动,新的后端名称将可用于所有API端点。
例如,要注册一个新的本地文件后端:
./local-ai --debug --external-grpc-backends "my-awesome-backend:/path/to/my/backend.py"
或者一个远程URI:
./local-ai --debug --external-grpc-backends "my-awesome-backend:host:port"
例如,要在编译LocalAI后手动启动vllm(也假设从仓库根目录运行命令):
./local-ai --external-grpc-backends "vllm:$PWD/backend/python/vllm/run.sh"
注意,首先需要创建环境:
make -C backend/python/vllm
环境变量
当LocalAI在容器中运行时,还有一些额外的环境变量可以修改LocalAI在启动时的行为:
环境变量 | 默认值 | 描述 |
---|---|---|
REBUILD | false | 启动时重建LocalAI |
BUILD_TYPE | 构建类型。可用:cublas , openblas , clblas | |
GO_TAGS | Go标签。可用:stablediffusion | |
HUGGINGFACEHUB_API_TOKEN | 与HuggingFace推理API交互的特殊令牌,仅在使用langchain-huggingface 后端时需要 | |
EXTRA_BACKENDS | 要准备的后端空格分隔列表。例如EXTRA_BACKENDS="backend/python/diffusers backend/python/transformers" 在启动时准备python环境 | |
DISABLE_AUTODETECT | false | 启动时禁用CPU标志集自动检测 |
LLAMACPP_GRPC_SERVERS | 分布工作负载的llama.cpp工作者列表。例如LLAMACPP_GRPC_SERVERS="address1:port,address2:port" |
以下是如何配置这些变量的示例:
# 选项1:命令行
docker run --env REBUILD=true localai
# 选项2:在env文件中设置
docker run --env-file .env localai
CLI参数
您可以使用命令行参数来控制LocalAI,指定绑定地址或线程数。任何命令行参数都可以通过环境变量来指定。
以下帮助文本中,BASEPATH是local-ai正在执行的位置
全局标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
-h, --help | 显示上下文相关帮助。 | ||
--log-level | info | 设置输出日志级别 [error,warn,info,debug] | $LOCALAI_LOG_LEVEL |
存储标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--models-path | BASEPATH/models | 包含用于推理的模型的路径 | $LOCALAI_MODELS_PATH |
--backend-assets-path | /tmp/localai/backend_data | 运行时提取一些后端所需库的路径 | $LOCALAI_BACKEND_ASSETS_PATH |
--image-path | /tmp/generated/images | 后端(如stablediffusion)生成的图像位置 | $LOCALAI_IMAGE_PATH |
--audio-path | /tmp/generated/audio | 后端(如piper)生成的音频位置 | $LOCALAI_AUDIO_PATH |
--upload-path | /tmp/localai/upload | 从文件API存储上传的路径 | $LOCALAI_UPLOAD_PATH |
--config-path | /tmp/localai/config | $LOCALAI_CONFIG_PATH | |
--localai-config-dir | BASEPATH/configuration | 动态加载某些配置文件的目录(当前为api_keys.json和external_backends.json) | $LOCALAI_CONFIG_DIR |
--localai-config-dir-poll-interval | 通常配置路径会自动检测变化,但如果您的系统有损坏的fsnotify事件,设置此值为时间长度来轮询LocalAI配置目录(例如:1m) | $LOCALAI_CONFIG_DIR_POLL_INTERVAL | |
--models-config-file | 字符串 | 包含模型后端配置列表的YAML文件 | $LOCALAI_MODELS_CONFIG_FILE |
模型标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--galleries | 字符串 | 图库列表的JSON | $LOCALAI_GALLERIES |
--autoload-galleries | $LOCALAI_AUTOLOAD_GALLERIES | ||
--remote-library | "https://raw.githubusercontent.c# 配置参数 |
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--preload-models | STRING | 启动时应用的一组模型,以JSON格式 | $LOCALAI_PRELOAD_MODELS |
--models | MODELS,... | 要加载的模型配置URL列表 | $LOCALAI_MODELS |
--preload-models-config | STRING | 启动时应用的一组模型。指向一个YAML配置文件的路径 | $LOCALAI_PRELOAD_MODELS_CONFIG |
性能标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--f16 | 启用GPU加速 | $LOCALAI_F16 | |
-t, --threads | 4 | 并行计算使用的线程数。建议使用系统中的物理核心数 | $LOCALAI_THREADS |
--context-size | 512 | 模型的默认上下文大小 | $LOCALAI_CONTEXT_SIZE |
API标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--address | ":8080" | API服务器的绑定地址 | $LOCALAI_ADDRESS |
--cors | $LOCALAI_CORS | ||
--cors-allow-origins | $LOCALAI_CORS_ALLOW_ORIGINS | ||
--upload-limit | 15 | 默认上传限制,单位为MB | $LOCALAI_UPLOAD_LIMIT |
--api-keys | API-KEYS,... | 启用API认证的API密钥列表。设置后,所有请求都必须使用这些API密钥之一进行认证 | $LOCALAI_API_KEY |
--disable-welcome | 禁用欢迎页面 | $LOCALAI_DISABLE_WELCOME | |
--machine-tag | 如果不为空 - 将该字符串放入每个响应的Machine-Tag头中。用于跟踪使用多个P2P联邦节点时不同机器的响应 | $LOCALAI_MACHINE_TAG |
后端标志
参数 | 默认值 | 描述 | 环境变量 |
---|---|---|---|
--parallel-requests | 如果支持,允许后端并行处理多个请求(例如:llama.cpp 或 vllm) | $LOCALAI_PARALLEL_REQUESTS | |
--single-active-backend | 只允许运行一个后端 | $LOCALAI_SINGLE_ACTIVE_BACKEND | |
--preload-backend-only | 不启动API服务,只启动预加载的模型/后端(对于多节点设置很有用) | $LOCALAI_PRELOAD_BACKEND_ONLY | |
--external-grpc-backends | EXTERNAL-GRPC-BACKENDS,... | 外部gRPC后端列表 | $LOCALAI_EXTERNAL_GRPC_BACKENDS |
--enable-watchdog-idle | 启用看门狗以停止空闲时间超过看门狗空闲超时的后端 | $LOCALAI_WATCHDOG_IDLE | |
--watchdog-idle-timeout | 15m | 超过此时间阈值的空闲后端应被停止 | $LOCALAI_WATCHDOG_IDLE_TIMEOUT, $WATCHDOG_IDLE_TIMEOUT |
--enable-watchdog-busy | 启用看门狗以停止繁忙时间超过看门狗繁忙超时的后端 | $LOCALAI_WATCHDOG_BUSY | |
--watchdog-busy-timeout | 5m | 超过此时间阈值的繁忙后端应被停止 | $LOCALAI_WATCHDOG_BUSY_TIMEOUT |
.env文件
任何通过环境变量提供的设置也可以从.env文件中提供。将检查以下位置的.env文件。优先级顺序为:
- 当前目录下的.env文件
- 当前目录下的localai.env文件
- 家目录下的localai.env文件
- 家目录下的.config/localai.env文件
- /etc/localai.env
列表前面的文件中的环境变量将覆盖后面文件中定义的环境变量。
一个.env文件的示例:
LOCALAI_THREADS=10
LOCALAI_MODELS_PATH=/mnt/storage/localai/models
LOCALAI_F16=true
请求头
您可以使用'Extra-Usage'请求头键的存在('Extra-Usage: true')来接收推断时间(单位为毫秒),在默认的OpenAI响应模型的usage字段中扩展:
...
{
"id": "...",
"created": ...,
"model": "...",
"choices": [
{
...
},
...
],
"object": "...",
"usage": {
"prompt_tokens": ...,
"completion_tokens": ...,
"total_tokens": ...,
// Extra-Usage头键将包括以下两个浮点字段:
"timing_prompt_processing: ...,
"timing_token_generation": ...,
},
}
...
额外后端
LocalAI可以通过额外的后端进行扩展。后端是实现为gRPC
服务,可以用任何语言编写。构建并发布在quay.io上的容器镜像包含一组分为核心和额外的图像。默认情况下,镜像包含LocalAI支持的所有依赖项和后端(我们称之为extra
图像)。而-core
图像只包含运行LocalAI所需的最必要的依赖项,仅包含一组核心后端。
如果您希望构建带有额外后端的自定义容器镜像,可以使用核心图像并仅构建您感兴趣的后端,或者在启动时使用EXTRA_BACKENDS
环境变量准备环境。例如,要使用diffusers后端:
FROM quay.io/go-skynet/local-ai:master-ffmpeg-core
RUN make -C backend/python/diffusers
记住还要设置EXTERNAL_GRPC_BACKENDS
环境变量(或--external-grpc-backends
作为CLI标志)以指向您使用的后端(EXTERNAL_GRPC_BACKENDS="backend_name:/path/to/backend"
),例如使用diffusers:
FROM quay.io/go-skynet/local-ai:master-ffmpeg-core
RUN make -C backend/python/diffusers
ENV EXTERNAL_GRPC_BACKENDS="diffusers:/build/backend/python/diffusers/run.sh"
运行时
当使用-core
容器镜像时,可以通过EXTRA_BACKENDS
变量准备您感兴趣的python后端,例如:
docker run --env EXTRA_BACKENDS="backend/python/diffusers" quay.io/go-skynet/local-ai:master-ffmpeg-core
并发请求
LocalAI支持对支持的后端进行并行请求。例如,vLLM和llama.cpp支持并行请求,因此LocalAI允许并行运行多个请求。
要启用并行请求,您需要传递--parallel-requests
或设置环境变量PARALLEL_REQUEST
为true。
以下是一组调整并发的环境变量:
### Python后端GRPC最大工作线程
### 默认的GRPC Python后端工作线程数。
### 实际上控制一个后端是否可以处理多个请求。
# PYTHON_GRPC_MAX_WORKERS=1
### 定义并行LLAMA.cpp工作线程数(默认为1)
# LLAMACPP_PARALLEL=1
### 启用并行请求
# LOCALAI_PARALLEL_REQUESTS=true
请注意,对于llama.cpp,您需要相应地设置LLAMACPP_PARALLEL
为GPU/CPU可以处理的并行进程数。对于基于python的后端(如vLLM),可以设置PYTHON_GRPC_MAX_WORKERS
为并行请求数。
在llama.cpp中禁用CPU标志集自动检测
LocalAI将自动检测主机上可用的CPU标志集,并使用最优化版本的后端。
如果您想禁用此行为,可以在环境变量中设置DISABLE_AUTODETECT
为true
。