推理管道#
管道#
- lmdeploy.pipeline(model_path: str, backend_config: TurbomindEngineConfig | PytorchEngineConfig | None = None, chat_template_config: ChatTemplateConfig | None = None, log_level: str = 'WARNING', max_log_len: int | None = None, **kwargs)[source]#
- Parameters:
model_path (str) –
模型的路径。 它可以是以下选项之一:
一个本地目录路径,该路径是一个turbomind模型,
通过lmdeploy convert命令转换或从 ii) 和 iii) 下载。
托管在huggingface.co上的lmdeploy量化模型的model_id,
例如“InternLM/internlm-chat-20b-4bit”, “lmdeploy/llama2-chat-70b-4bit”等。
托管在huggingface.co上的模型的model_id,
例如“internlm/internlm-chat-7b”, “Qwen/Qwen-7B-Chat “, “baichuan-inc/Baichuan2-7B-Chat” 等等。
backend_config (TurbomindEngineConfig | PytorchEngineConfig) – 后端配置实例。默认为 None。
chat_template_config (ChatTemplateConfig) – 聊天模板配置。 默认为 None。
log_level (str) – 设置日志级别,其值在 [CRITICAL, ERROR, WARNING, INFO, DEBUG] 中
max_log_len (int) – 日志中打印的提示字符或提示令牌的最大数量
示例
>>> # LLM >>> import lmdeploy >>> pipe = lmdeploy.pipeline('internlm/internlm-chat-7b') >>> response = pipe(['hi','say this is a test']) >>> print(response) >>> >>> # VLM >>> from lmdeploy.vl import load_image >>> from lmdeploy import pipeline, TurbomindEngineConfig, ChatTemplateConfig >>> pipe = pipeline('liuhaotian/llava-v1.5-7b', ... backend_config=TurbomindEngineConfig(session_len=8192), ... chat_template_config=ChatTemplateConfig(model_name='vicuna')) >>> im = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/demo/resources/human-pose.jpg') >>> response = pipe([('describe this image', [im])]) >>> print(response)
服务#
- lmdeploy.serve(model_path: str, model_name: str | None = None, backend: Literal['turbomind', 'pytorch'] = 'turbomind', backend_config: TurbomindEngineConfig | PytorchEngineConfig | None = None, chat_template_config: ChatTemplateConfig | None = None, server_name: str = '0.0.0.0', server_port: int = 23333, log_level: str = 'ERROR', api_keys: str | List[str] | None = None, ssl: bool = False, **kwargs)[source]#
这将在子进程中运行api_server。
- Parameters:
model_path (str) –
模型的路径。 它可以是以下选项之一:
一个本地目录路径,该路径指向一个由
lmdeploy convert 命令转换或从 ii) 和 iii) 下载的 turbomind 模型。
托管在 huggingface.co 上的 lmdeploy-quantized 模型的 model_id,例如
“InternLM/internlm-chat-20b-4bit”, “lmdeploy/llama2-chat-70b-4bit” 等。
托管在 huggingface.co 上的模型的 model_id,例如
“internlm/internlm-chat-7b”, “Qwen/Qwen-7B-Chat “, “baichuan-inc/Baichuan2-7B-Chat” 等等。
model_name (str) – 所服务模型的名称。可以通过RESTful API /v1/models访问。如果未指定,将采用model_path
后端 (str) – 可以是 turbomind 或 pytorch 后端。默认为 turbomind 后端。
backend_config (TurbomindEngineConfig | PytorchEngineConfig) – 后端配置实例。默认为无。
chat_template_config (ChatTemplateConfig) – 聊天模板配置。 默认为 None。
server_name (str) – 用于服务的主机IP
server_port (int) – 服务器端口
log_level (str) – 设置日志级别,其值在 [CRITICAL, ERROR, WARNING, INFO, DEBUG] 中
api_keys (List[str] | str | None) – 可选的API密钥列表。接受字符串类型作为单个api_key。默认为None,表示不应用任何API密钥。
ssl (bool) – 启用SSL。需要操作系统环境变量‘SSL_KEYFILE’和‘SSL_CERTFILE’。
- Returns:
一个用于LLaMA系列模型的客户端聊天机器人。
- Return type:
APIClient
示例
>>> import lmdeploy >>> client = lmdeploy.serve('internlm/internlm-chat-7b', 'internlm-chat-7b') >>> for output in client.chat('hi', 1): ... print(output)
PytorchEngineConfig#
- class lmdeploy.PytorchEngineConfig(dtype: str = 'auto', tp: int = 1, session_len: int | None = None, max_batch_size: int | None = None, cache_max_entry_count: float = 0.8, prefill_interval: int = 16, block_size: int = 64, num_cpu_blocks: int = 0, num_gpu_blocks: int = 0, adapters: Dict[str, str] | None = None, max_prefill_token_num: int = 4096, thread_safe: bool = False, enable_prefix_caching: bool = False, device_type: str = 'cuda', eager_mode: bool = False, custom_module_map: Dict[str, str] | None = None, download_dir: str | None = None, revision: str | None = None, quant_policy: Literal[0, 4, 8] = 0)[source]#
PyTorch 引擎配置。
- Parameters:
dtype (str) – 模型权重和激活的数据类型。它可以是以下值之一,[‘auto’, ‘float16’, ‘bfloat16’] auto 选项将对 FP32 和 FP16 模型使用 FP16 精度,对 BF16 模型使用 BF16 精度。
tp (int) – 张量并行度。默认值为1。
session_len (int) – 最大会话长度。默认值为 None。
max_batch_size (int) – 最大批量大小。如果未指定,引擎将根据设备自动设置。
cache_max_entry_count (float) – 表示k/v缓存占用的GPU内存百分比。对于大于v0.2.1的lmdeploy版本,默认值为0.8,表示为k/v缓存保留的可用GPU内存的百分比。
prefill_interval (int) – 执行预填充的间隔,默认值为16。
block_size (int) – 分页缓存块大小,默认为64。
num_cpu_blocks (int) – CPU块的数量。如果数量为0,缓存将根据当前环境进行分配。
num_gpu_blocks (int) – GPU块的数量。如果数量为0,缓存将根据当前环境进行分配。
adapters (dict) – lora适配器的路径配置。
max_prefill_token_num (int) – 每次迭代的tokens数量。
thread_safe (bool) – 线程安全的引擎实例。
enable_prefix_caching (bool) – 启用令牌匹配和共享缓存。
device_type (str) – 推理设备类型,选项 [‘cuda’]
eager_mode (bool) – 是否启用“eager”模式
custom_module_map (Dict) – 用户自定义的nn模块映射。一旦提供,模型的原始nn模块将被映射的模块替换。
download_dir (str) – 下载和加载权重的目录,默认为huggingface的默认缓存目录。
revision (str) – 要使用的特定模型版本。 它可以是分支名称、标签名称或提交ID。 如果未指定,将使用默认版本。
quant_policy (int) – 默认为0。当k/v被量化为4或8位时,分别设置为4或8
Turbomind引擎配置#
- class lmdeploy.TurbomindEngineConfig(dtype: str = 'auto', model_format: str | None = None, tp: int = 1, session_len: int | None = None, max_batch_size: int = None, cache_max_entry_count: float = 0.8, cache_chunk_size: int = -1, cache_block_seq_len: int = 64, enable_prefix_caching: bool = False, quant_policy: int = 0, rope_scaling_factor: float = 0.0, use_logn_attn: bool = False, download_dir: str | None = None, revision: str | None = None, max_prefill_token_num: int = 8192, num_tokens_per_iter: int = 0, max_prefill_iters: int = 1)[来源]#
TurboMind 引擎配置。
- Parameters:
dtype (str) – 模型权重和激活的数据类型。它可以是以下值之一,[‘auto’, ‘float16’, ‘bfloat16’] auto 选项将对 FP32 和 FP16 模型使用 FP16 精度,对 BF16 模型使用 BF16 精度。
model_format (str) – 部署模型的布局。它可以是以下值之一 [hf, meta_llama, awq, gptq],`hf` 表示 huggingface 模型(.bin, .safetensors),meta_llama 表示 meta llama 的格式(.pth),awq 和 gptq 分别表示由 AWQ 和 GPTQ 量化的模型。如果未指定,即 None,它将从输入模型中提取。
tp (int) – 在张量并行中使用的GPU卡数量,默认为1
session_len (int) – 序列的最大会话长度,默认为 None
max_batch_size (int) – 推理期间的最大批量大小。如果未指定,引擎将根据设备自动设置它。
cache_max_entry_count (float) – 由k/v缓存占用的GPU内存百分比。 对于v0.2.0到v0.2.1之间的lmdeploy版本,默认值为0.5,表示分配给k/v缓存的GPU总内存的百分比。 对于大于v0.2.1的lmdeploy版本,默认值为0.8,表示为k/v缓存保留的GPU空闲内存的百分比。
cache_chunk_size (int) – 从块管理器应用KV块的策略,默认为-1。
cache_block_seq_len (int) – 一个k/v块中的令牌序列长度,默认为64
enable_prefix_caching (bool) – 启用缓存提示以重用块,默认为 False
quant_policy (int) – 默认为0。当k/v被量化为4或8位时,分别设置为4或8
rope_scaling_factor (float) – 用于动态ntk的缩放因子,默认为0。TurboMind遵循transformer LlamaAttention的实现
use_logn_attn (bool) – 是否使用log attn:默认为False
download_dir (str) – 下载和加载权重的目录,默认为huggingface的默认缓存目录。
修订版本 (str) – 要使用的特定模型版本。它可以是分支名称、标签名称或提交ID。如果未指定,将使用默认版本。
max_prefill_token_num (int) – 预填充期间每次迭代的令牌数量,默认为8192
num_tokens_per_iter (int) – 每次前向传递中处理的令牌数量。与max_prefill_iters一起工作,可以实现类似“动态SplitFuse”的调度。
max_prefill_iters (int) – 预填充阶段的最大前向传递次数
生成配置#
- class lmdeploy.GenerationConfig(n: int = 1, max_new_tokens: int = 512, do_sample: bool = False, top_p: float = 1.0, top_k: int = 50, min_p: float = 0.0, temperature: float = 0.8, repetition_penalty: float = 1.0, ignore_eos: bool = False, random_seed: int | None = None, stop_words: List[str] | None = None, bad_words: List[str] | None = None, stop_token_ids: List[int] | None = None, bad_token_ids: List[int] | None = None, min_new_tokens: int | None = None, skip_special_tokens: bool = True, logprobs: int | None = None, response_format: Dict | None = None, logits_processors: List[Callable[[torch.Tensor, torch.Tensor], torch.Tensor]] | None = None)[source]#
推理引擎使用的生成参数。
- Parameters:
n (int) – 定义每个输入消息生成多少个聊天完成选项。目前仅支持1。
max_new_tokens (int) – 在聊天完成中可以生成的最大令牌数
do_sample (bool) – 是否使用采样,否则使用贪婪解码。默认为 False。
top_p (float) – 一种替代温度采样的方法,称为核采样,模型会考虑具有top_p概率质量的标记结果
top_k (int) – 作为温度采样的替代方案,模型会考虑概率最高的前k个标记
min_p (float) – 最小令牌概率,该值将通过最可能令牌的概率进行缩放。它必须是一个介于0和1之间的值。典型值在0.01-0.2范围内,与将top_p设置在0.99-0.8范围内相当选择性(使用与正常top_p值相反的值)
温度 (float) – 采样温度
repetition_penalty (float) – 用于防止模型生成重复单词或短语的惩罚。大于1的值会减少重复
ignore_eos (bool) – 指示是否忽略eos_token_id
random_seed (int) – 采样令牌时使用的种子
stop_words (List[str]) – 阻止生成更多标记的单词
bad_words (List[str]) – 引擎永远不会生成的单词
stop_token_ids (List[int]) – 生成时停止生成的令牌列表。返回的输出将不包含这些停止令牌。
bad_token_ids (List[str]) – 引擎永远不会生成的令牌列表。
min_new_tokens (int) – 生成的最小令牌数,忽略提示中的令牌数。
skip_special_tokens (bool) – 是否在解码过程中移除特殊标记。默认为True。
logprobs (int) – 每个输出令牌返回的对数概率数量。
response_format (Dict) – 仅pytorch后端支持格式化
示例 (响应.) –
- {
“类型”: “json_schema”, “json_schema”: {
”名称”: “测试”, “模式”: { “属性”: {
”名称”: { “类型”: “字符串” }
}, “必需”: [“名称”], “类型”: “对象” }
}
}
或 –
- {
“类型”: “正则表达式模式”, “正则表达式模式”: “叫我 [A-Za-z]{1,10}”
}
- :param :
- {
“type”: “regex_schema”, “regex_schema”: “叫我 [A-Za-z]{1,10}”
}
- Parameters:
logits_processors (List[Callable]) – 自定义的logit处理器。
ChatTemplateConfig#
- class lmdeploy.ChatTemplateConfig(model_name: str, system: str | None = None, meta_instruction: str | None = None, eosys: str | None = None, user: str | None = None, eoh: str | None = None, assistant: str | None = None, eoa: str | None = None, tool: str | None = None, eotool: str | None = None, separator: str | None = None, capability: Literal['completion', 'infilling', 'chat', 'python'] | None = None, stop_words: List[str] | None = None)[source]#
聊天模板的参数。
- Parameters:
model_name (str) – 部署模型的名称。确定将应用哪个聊天模板。 所有聊天模板名称:lmdeploy list
system (str | None) – 系统提示的开始
meta_instruction (str | None) – 系统提示
eosys (str | None) – 系统提示的结束
用户 (str | None) – 用户提示的开始
eoh (str | None) – 用户提示的结束
assistant (str | None) – 助手提示的开始
eoa (str | None) – 助手提示的结束
工具 (str | None) – 工具提示的开始
eotool (str | None) – 工具提示的结束
能力 – (‘completion’ | ‘infilling’ | ‘chat’ | ‘python’) = None