跳到內容

vLLM 的外掛系統

社群經常要求能夠透過自定義功能擴充套件 vLLM。為方便起見,vLLM 包含一個外掛系統,允許使用者在不修改 vLLM 程式碼庫的情況下新增自定義功能。本文件解釋了外掛在 vLLM 中的工作方式以及如何為 vLLM 建立外掛。

vLLM 中外掛的工作方式

外掛是使用者註冊的、由 vLLM 執行的程式碼。考慮到 vLLM 的架構(參見 架構概述),可能會涉及多個程序,尤其是在使用各種並行技術進行分散式推理時。為了成功啟用外掛,vLLM 建立的每個程序都需要載入外掛。這透過 vllm.plugins 模組中的 load_general_plugins 函式完成。vLLM 建立的每個程序在開始任何工作之前都會呼叫此函式。

vLLM 如何發現外掛

vLLM 的外掛系統使用標準的 Python entry_points 機制。該機制允許開發人員在其 Python 包中註冊函式,供其他包使用。外掛示例

程式碼
# inside `setup.py` file
from setuptools import setup

setup(name='vllm_add_dummy_model',
    version='0.1',
    packages=['vllm_add_dummy_model'],
    entry_points={
        'vllm.general_plugins':
        ["register_dummy_model = vllm_add_dummy_model:register"]
    })

# inside `vllm_add_dummy_model.py` file
def register():
    from vllm import ModelRegistry

    if "MyLlava" not in ModelRegistry.get_supported_archs():
        ModelRegistry.register_model(
            "MyLlava",
            "vllm_add_dummy_model.my_llava:MyLlava",
        )

有關向您的包新增入口點的更多資訊,請查閱 官方文件

每個外掛都包含三個部分

  1. 外掛組:入口點組的名稱。vLLM 使用入口點組 vllm.general_plugins 來註冊通用外掛。這是 setup.py 檔案中 entry_points 的鍵。vLLM 的通用外掛始終使用 vllm.general_plugins
  2. 外掛名稱:外掛的名稱。這是 entry_points 字典中字典的值。在上面的示例中,外掛名稱是 register_dummy_model。可以使用 VLLM_PLUGINS 環境變數按名稱過濾外掛。要僅載入特定外掛,請將 VLLM_PLUGINS 設定為外掛名稱。
  3. 外掛值:要在外掛系統中註冊的函式的完全限定名稱。在上面的示例中,外掛值是 vllm_add_dummy_model:register,它指的是 vllm_add_dummy_model 模組中名為 register 的函式。

支援的外掛型別

  • 通用外掛(組名 vllm.general_plugins):這些外掛的主要用例是將自定義的、非原生模型註冊到 vLLM 中。這是透過在外掛函式內部呼叫 ModelRegistry.register_model 來註冊模型完成的。

  • 平臺外掛(組名 vllm.platform_plugins):這些外掛的主要用例是將自定義的、非原生平臺註冊到 vLLM 中。噹噹前環境不支援該平臺時,外掛函式應返回 None;當支援該平臺時,應返回平臺類的完全限定名稱。

編寫外掛的指南

  • 可重入性:入口點中指定的函式應該是可重入的,這意味著它可以被多次呼叫而不會導致問題。這是必要的,因為該函式可能在某些程序中被多次呼叫。

相容性保證

vLLM 保證文件中描述的外掛介面(例如 ModelRegistry.register_model)將始終可用於外掛註冊模型。但是,外掛開發者有責任確保其外掛與他們所針對的 vLLM 版本相容。例如,"vllm_add_dummy_model.my_llava:MyLlava" 應該與外掛所針對的 vLLM 版本相容。模型介面在 vLLM 開發過程中可能會發生變化。