與 Hugging Face 整合¶
本文件描述了 vLLM 如何與 Hugging Face 庫整合。我們將逐步解釋當我們在執行時 vllm serve 幕後會發生什麼。
假設我們想透過執行 vllm serve Qwen/Qwen2-7B 來服務流行的 Qwen 模型。
-
model引數是Qwen/Qwen2-7B。vLLM 透過檢查相應的配置檔案config.json來確定該模型是否存在。有關實現,請參閱此程式碼片段。在此過程中- 如果
model引數對應於現有的本地路徑,vLLM 將直接從該路徑載入配置檔案。 - 如果
model引數是一個包含使用者名稱和模型名稱的 Hugging Face 模型 ID,vLLM 將首先嚐試使用 Hugging Face 本地快取中的配置檔案,使用model引數作為模型名稱,--revision引數作為修訂版本。有關 Hugging Face 快取工作原理的更多資訊,請參閱他們的網站。 - 如果
model引數是 Hugging Face 模型 ID,但在快取中未找到,vLLM 將從 Hugging Face 模型中心下載配置檔案。有關實現,請參閱此函式。輸入引數包括作為模型名稱的model引數、作為修訂版本的--revision引數,以及作為訪問模型中心的令牌的環境變數HF_TOKEN。在本例中,vLLM 將下載config.json 檔案。
- 如果
-
在確認模型存在後,vLLM 載入其配置檔案並將其轉換為字典。有關實現,請參閱此程式碼片段。
-
接下來,vLLM 檢查配置字典中的
model_type欄位以生成要使用的配置物件。vLLM 直接支援一些model_type值;請參閱此處獲取列表。如果model_type不在列表中,vLLM 將使用 AutoConfig.from_pretrained 來載入配置類,並將model、--revision和--trust_remote_code作為引數。請注意- Hugging Face 也有自己的邏輯來確定要使用的配置類。它將再次使用
model_type欄位在 transformers 庫中搜索類名;有關支援的模型列表,請參閱此處。如果找不到model_type,Hugging Face 將使用配置檔案中的auto_map欄位來確定類名。具體來說,它是auto_map下的AutoConfig欄位。例如,請參閱DeepSeek。 auto_map下的AutoConfig欄位指向模型儲存庫中的模組路徑。要建立配置類,Hugging Face 將匯入模組並使用from_pretrained方法載入配置類。這通常可能導致任意程式碼執行,因此只有在啟用了--trust_remote_code時才會執行。
- Hugging Face 也有自己的邏輯來確定要使用的配置類。它將再次使用
-
隨後,vLLM 對配置物件應用了一些歷史補丁。這些主要與 RoPE 配置相關;有關實現,請參閱此處。
-
最後,vLLM 可以訪問我們要初始化的模型類。vLLM 使用配置物件中的
architectures欄位來確定要初始化的模型類,因為它在其登錄檔中維護從體系結構名稱到模型類的對映。如果登錄檔中找不到體系結構名稱,則表示 vLLM 不支援此模型體系結構。對於Qwen/Qwen2-7B,architectures欄位是["Qwen2ForCausalLM"],它對應於vLLM 程式碼中的Qwen2ForCausalLM類。此類將根據各種配置自行初始化。
除此之外,vLLM 還有另外兩項依賴於 Hugging Face。
-
分詞器:vLLM 使用 Hugging Face 的分詞器對輸入文字進行分詞。分詞器使用
AutoTokenizer.from_pretrained載入,並將model引數作為模型名稱,--revision引數作為修訂版本。還可以透過在vllm serve命令中指定--tokenizer引數來使用另一個模型的分詞器。其他相關引數是--tokenizer-revision和--tokenizer-mode。請查閱 Hugging Face 的文件以瞭解這些引數的含義。這部分邏輯可以在 get_tokenizer 函式中找到。獲得分詞器後,值得注意的是,vLLM 會在 vllm.tokenizers.hf.get_cached_tokenizer 中快取分詞器的一些昂貴屬性。 -
模型權重:vLLM 使用
model引數作為模型名稱,--revision引數作為修訂版本,從 Hugging Face 模型中心下載模型權重。vLLM 提供--load-format引數來控制要從模型中心下載哪些檔案。預設情況下,它將嘗試載入 safetensors 格式的權重,如果 safetensors 格式不可用,則回退到 PyTorch bin 格式。我們也可以透過傳遞--load-format dummy來跳過下載權重。
至此,vLLM 和 Hugging Face 的整合完成。
總而言之,vLLM 從 Hugging Face 模型中心或本地目錄讀取配置檔案 config.json、分詞器和模型權重。它使用來自 vLLM、Hugging Face transformers 的配置類,或者從模型儲存庫載入配置類。