跳到内容

使用 CoreWeave 的 Tensorizer 加载模型

vLLM 支持使用 CoreWeave 的 Tensorizer 加载模型。已序列化到磁盘、HTTP/HTTPS 端点或 S3 端点的 vLLM 模型张量可以在运行时极速反序列化,并直接加载到 GPU 中,从而显著缩短 Pod 启动时间并降低 CPU 内存占用。同时支持张量加密。

vLLM 将 Tensorizer 完全集成到了其模型加载机制中。以下内容将简要介绍如何在 vLLM 上开始使用 Tensorizer。

安装 Tensorizer

要安装 tensorizer,请运行 pip install vllm[tensorizer]

基础知识

要使用 Tensorizer 加载模型,模型首先需要由 Tensorizer 进行序列化。 示例脚本 负责处理此过程。

让我们通过一个基本示例:使用脚本序列化 facebook/opt-125m,然后加载它进行推理。

使用 Tensorizer 序列化 vLLM 模型

要使用 Tensorizer 序列化模型,请调用带有必要 CLI 参数的示例脚本。该脚本本身的文档字符串非常详细地解释了 CLI 参数及其正确用法,我们将直接使用其中的一个示例,假设我们要序列化模型并将其保存到我们的 S3 存储桶 s3://my-bucket 中。

python examples/features/tensorize_vllm_model.py \
   --model facebook/opt-125m \
   serialize \
   --serialized-directory s3://my-bucket \
   --suffix v1

这会将模型张量保存到 s3://my-bucket/vllm/facebook/opt-125m/v1。如果您打算对 Tensorized 模型应用 LoRA 适配器,可以在上述命令中传递 LoRA 适配器的 HF id,相关工件也将保存在该处。

python examples/features/tensorize_vllm_model.py \
   --model facebook/opt-125m \
   --lora-path <lora_id> \
   serialize \
   --serialized-directory s3://my-bucket \
   --suffix v1

使用 Tensorizer 部署模型

一旦模型序列化到目标位置,您就可以使用 vllm serveLLM 入口点加载模型。您可以将模型保存的目录传递给 LLM()vllm servemodel 参数。例如,要部署之前使用 LoRA 适配器保存的 Tensorized 模型,您可以执行以下操作:

vllm serve s3://my-bucket/vllm/facebook/opt-125m/v1 \
    --load-format tensorizer \
    --enable-lora 

或者,使用 LLM()

from vllm import LLM
llm = LLM(
    "s3://my-bucket/vllm/facebook/opt-125m/v1", 
    load_format="tensorizer",
    enable_lora=True,
)

配置 Tensorizer 的选项

tensorizer 序列化和反序列化模型的核心对象分别是 TensorSerializerTensorDeserializer。为了将任意 kwargs 传递给这些对象(用于配置序列化和反序列化过程),您可以将它们分别作为 serialization_kwargsdeserialization_kwargs 的键提供给 model_loader_extra_config。详述上述对象所有参数的完整文档字符串可以在 tensorizerserialization.py 文件中找到。

举例来说,使用 tensorizer 序列化时,可以通过 TensorSerializer 初始化程序中的 limit_cpu_concurrency 参数来限制 CPU 并发。要将 limit_cpu_concurrency 设置为某个任意值,您可以在序列化时按如下方式操作:

python examples/features/tensorize_vllm_model.py \
   --model facebook/opt-125m \
   --lora-path <lora_id> \
   serialize \
   --serialized-directory s3://my-bucket \
   --serialization-kwargs '{"limit_cpu_concurrency": 2}' \
   --suffix v1

例如,通过 TensorDeserializer 自定义加载过程时,您可以通过 model_loader_extra_config 在初始化程序中使用 num_readers 参数来限制反序列化期间的并发读取器数量,如下所示:

vllm serve s3://my-bucket/vllm/facebook/opt-125m/v1 \
    --load-format tensorizer \
    --enable-lora \
    --model-loader-extra-config '{"deserialization_kwargs": {"num_readers": 2}}'

或者使用 LLM()

from vllm import LLM
llm = LLM(
    "s3://my-bucket/vllm/facebook/opt-125m/v1", 
    load_format="tensorizer",
    enable_lora=True,
    model_loader_extra_config={"deserialization_kwargs": {"num_readers": 2}},
)