推理管道#

管道#

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) –

    模型的路径。 它可以是以下选项之一:

      1. 一个本地目录路径,该路径是一个turbomind模型,

      通过lmdeploy convert命令转换或从 ii) 和 iii) 下载。

      1. 托管在huggingface.co上的lmdeploy量化模型的model_id,

      例如“InternLM/internlm-chat-20b-4bit”, “lmdeploy/llama2-chat-70b-4bit”等。

      1. 托管在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) –

    模型的路径。 它可以是以下选项之一:

      1. 一个本地目录路径,该路径指向一个由

      lmdeploy convert 命令转换或从 ii) 和 iii) 下载的 turbomind 模型。

      1. 托管在 huggingface.co 上的 lmdeploy-quantized 模型的 model_id,例如

      “InternLM/internlm-chat-20b-4bit”, “lmdeploy/llama2-chat-70b-4bit” 等。

      1. 托管在 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) – 可以是 turbomindpytorch 后端。默认为 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)
lmdeploy.client(api_server_url: str = 'http://0.0.0.0:23333', api_key: str | None = None, **kwargs)[源代码]#
Parameters:
  • api_server_url (str) – api_server的通信地址‘http://:

  • api_key (str | None) – API密钥。默认为None,这意味着不会使用API密钥。

Returns:

使用turbomind作为推理引擎的LLaMA系列模型聊天机器人。

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),awqgptq 分别表示由 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.0v0.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