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