跳到內容

使用 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 引數呼叫示例指令碼。指令碼本身的 docstring 詳細解釋了 CLI 引數及其正確用法,我們將直接使用 docstring 中的一個示例,假設我們要將模型序列化並儲存到我們的 S3 儲存桶示例 s3://my-bucket

python examples/others/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/others/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 傳遞給這些物件以配置序列化和反序列化過程,您可以將它們作為鍵提供給 model_loader_extra_config,並分別使用 serialization_kwargsdeserialization_kwargs。有關上述物件的全部引數的完整 docstrings 可以在 tensorizerserialization.py 檔案中找到。

例如,在透過 tensorizer 序列化時,可以透過 TensorSerializer 初始化器中的 limit_cpu_concurrency 引數限制 CPU 併發。要將 limit_cpu_concurrency 設定為任意值,您在序列化時可以這樣做:

python examples/others/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}},
)