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",
)
有關向您的包新增入口點的更多資訊,請查閱 官方文件。
每個外掛都包含三個部分
- 外掛組:入口點組的名稱。vLLM 使用入口點組
vllm.general_plugins
來註冊通用外掛。這是setup.py
檔案中entry_points
的鍵。vLLM 的通用外掛始終使用vllm.general_plugins
。 - 外掛名稱:外掛的名稱。這是
entry_points
字典中字典的值。在上面的示例中,外掛名稱是register_dummy_model
。可以使用VLLM_PLUGINS
環境變數按名稱過濾外掛。要僅載入特定外掛,請將VLLM_PLUGINS
設定為外掛名稱。 - 外掛值:要在外掛系統中註冊的函式的完全限定名稱。在上面的示例中,外掛值是
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 開發過程中可能會發生變化。