跳到內容

貢獻 vLLM

感謝您對貢獻 vLLM 感興趣!我們的社群對所有人開放,歡迎各種形式的貢獻,無論大小。您可以透過以下幾種方式為專案做出貢獻:

  • 發現並報告任何問題或錯誤。
  • 請求或新增對新模型的支援。
  • 建議或實現新功能。
  • 改進文件或貢獻操作指南。

我們也相信社群支援的力量;因此,回答疑問、提供 PR 審查和幫助他人也是非常受重視和有益的貢獻。

最後,支援我們最有影響力的方式之一是提高 vLLM 的知名度。在您的部落格文章中談論它,並強調它如何推動您的卓越專案。如果您正在使用 vLLM,請在社交媒體上表達您的支援,或者只需給我們的倉庫加星表示感謝!

招聘資訊

不確定從哪裡開始?請檢視以下連結,瞭解可以著手處理的任務:

許可協議

參閱 LICENSE

開發

根據您希望進行的開發型別(例如 Python、CUDA),您可以選擇帶編譯或不帶編譯地構建 vLLM。詳情請查閱從原始碼構建 文件。

使用 MkDocs 構建文件

MkDocs 簡介

MkDocs 是一個快速、簡單且非常漂亮的靜態站點生成器,專用於構建專案文件。文件原始檔以 Markdown 格式編寫,並使用單個 YAML 配置檔案進行配置。

安裝 MkDocs 和外掛

安裝 MkDocs 以及 vLLM 文件中使用的外掛和所需依賴項

pip install -r requirements/docs.txt

注意: 確保您的 Python 版本與外掛相容(例如,mkdocs-awesome-nav 需要 Python 3.10+)

驗證安裝

確認 MkDocs 已正確安裝:

mkdocs --version

輸出示例

mkdocs, version 1.6.1 from /opt/miniconda3/envs/mkdoc/lib/python3.9/site-packages/mkdocs (Python 3.9)

克隆 vLLM 倉庫

git clone https://github.com/vllm-project/vllm.git
cd vllm

啟動開發伺服器

MkDocs 帶有內建的開發伺服器,您可以在編寫文件時預覽文件。確保您位於包含 mkdocs.yml 配置檔案的目錄中,然後執行 mkdocs serve 命令啟動伺服器

mkdocs serve

輸出示例

INFO    -  Documentation built in 106.83 seconds
INFO    -  [22:02:02] Watching paths for changes: 'docs', 'mkdocs.yaml'
INFO    -  [22:02:02] Serving on http://127.0.0.1:8000/

在瀏覽器中檢視

在瀏覽器中開啟 http://127.0.0.1:8000/ 以檢視即時預覽。

瞭解更多

有關附加功能和高階配置,請參考官方 MkDocs 文件

測試

pip install -r requirements/dev.txt

# Linting, formatting and static type checking
pre-commit install --hook-type pre-commit --hook-type commit-msg

# You can manually run pre-commit with
pre-commit run --all-files

# To manually run something from CI that does not run
# locally by default, you can run:
pre-commit run mypy-3.9 --hook-stage manual --all-files

# Unit tests
pytest tests/

提示

由於 docker/Dockerfile 包含 Python 3.12,因此 CI 中的所有測試(mypy 除外)都使用 Python 3.12 執行。

因此,我們建議使用 Python 3.12 進行開發,以最大程度地減少本地環境與我們的 CI 環境發生衝突的可能性。

注意

目前,倉庫尚未完全透過 mypy 檢查。

注意

目前,並非所有單元測試在 CPU 平臺上執行時都能透過。如果您無法訪問 GPU 平臺在本地執行單元測試,目前請依賴持續整合系統執行測試。

問題

如果您遇到錯誤或有功能請求,請先搜尋現有問題,檢視是否已報告。如果沒有,請提交新問題,並提供儘可能多的相關資訊。

警告

如果您發現安全漏洞,請遵循 此處 的說明。

拉取請求與程式碼審查

感謝您對 vLLM 的貢獻!在提交拉取請求之前,請確保 PR 符合以下標準。這有助於 vLLM 保持程式碼質量並提高審查流程的效率。

DCO 和 Signed-off-by

向本專案貢獻更改時,您必須同意 DCO。提交必須包含 Signed-off-by: 頭部,以證明同意 DCO 的條款。

使用 git commit 時帶上 -s 引數將自動新增此頭部。

PR 標題和分類

只有特定型別的 PR 會被審查。PR 標題應帶有適當的字首以表明更改型別。請使用以下字首之一:

  • [Bugfix] 用於錯誤修復。
  • [CI/Build] 用於構建或持續整合改進。
  • [Doc] 用於文件修復和改進。
  • [Model] 用於新增新模型或改進現有模型。模型名稱應出現在標題中。
  • [Frontend] 用於 vLLM 前端的更改(例如 OpenAI API 伺服器、LLM 類等)
  • [Kernel] 用於影響 CUDA 核心或其他計算核心的更改。
  • [Core] 用於 vLLM 核心邏輯的更改(例如 LLMEngineAsyncLLMEngineScheduler 等)
  • [Hardware][Vendor] 用於硬體特定的更改。供應商名稱應出現在字首中(例如 [Hardware][AMD])。
  • [Misc] 用於不符合上述類別的 PR。請謹慎使用。

注意

如果 PR 涵蓋多個類別,請包含所有相關的字尾。

程式碼質量

PR 需要滿足以下程式碼質量標準:

  • 我們遵循 Google Python 編碼規範Google C++ 編碼規範
  • 透過所有 linter 檢查。請使用 pre-commit 格式化您的程式碼。如果您不熟悉 pre-commit,請參閱 https://pre-commit.com/#usage
  • 程式碼需要有良好的文件,以確保未來的貢獻者能夠輕鬆理解程式碼。
  • 包含足夠的測試以確保專案保持正確和健壯。這包括單元測試和整合測試。
  • 如果 PR 修改了 vLLM 面向使用者的行為,請在 docs/ 中新增文件。這有助於 vLLM 使用者理解和使用新功能或更改。

新增或更改核心

每個自定義核心都需要一個 schema 和一個或多個實現,以便在 PyTorch 中註冊。

  • 請確保自定義操作按照 PyTorch 指南註冊:自定義 C++ 和 CUDA 操作 以及 自定義操作手冊
  • 返回 Tensors 的自定義操作需要 meta-functions。應在 Python 中實現和註冊 meta-functions,以便自動處理動態維度。有關 meta-functions 的描述,請參閱上述文件。
  • 使用 torch.library.opcheck() 測試已註冊操作的函式註冊和 meta-function。請參閱 tests/kernels 瞭解示例。
  • 更改現有操作的 C++ 簽名時,必須更新 schema 以反映更改。
  • 如果需要新的自定義型別,請參閱以下文件:PT2 中的自定義類支援

大型更改的注意事項

請保持更改儘可能簡潔。對於主要的架構更改(不包括 kernel/data/config/test,超過 500 行程式碼),我們希望在 GitHub issue 中(以 RFC 形式)討論技術設計和理由。否則,我們將標記為 rfc-required,並且可能不會處理該 PR。

程式碼審查預期

vLLM 團隊的目標是成為一個透明的審查機器。我們希望使審查流程透明高效,並確保所有貢獻者不會感到困惑或沮喪。然而,vLLM 團隊規模較小,因此我們需要對某些 PR 進行優先順序排序。以下是您可以從審查流程中預期的內容:

  • 提交 PR 後,將分配給一名審查者。每位審查者將根據其專業知識和可用時間選擇 PR 進行審查。
  • 分配 PR 後,審查者會每隔 2-3 天提供狀態更新。如果 PR 在 7 天內未被審查,請隨時提醒審查者或 vLLM 團隊。
  • 審查後,如果需要進行更改,審查者會在 PR 上新增 action-required 標籤。貢獻者應處理評論並提醒審查者重新審查 PR。
  • 請在合理的時間範圍內回覆所有評論。如果某個評論不清楚或您不同意某個建議,請隨時要求澄清或討論該建議。
  • 請注意,由於計算資源有限,並非所有 CI 檢查都會執行。當 PR 準備好合併或需要完整的 CI 執行時,審查者會給 PR 新增 ready 標籤。

感謝

最後,感謝您抽出時間閱讀這些指南並對貢獻 vLLM 感興趣。您的所有貢獻都幫助 vLLM 成為一個對所有人來說都很棒的工具和社群!