跳到內容

貢獻 vLLM

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

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

我們還相信社群支援的力量;因此,回答疑問、提供 PR 審查和協助他人也是備受推崇和有益的貢獻。

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

招聘

不確定從何開始?檢視以下連結以獲取可進行的工作:

許可證

參見 LICENSE

開發

根據您想要進行的開發型別(例如 Python、CUDA),您可以選擇編譯或不編譯 vLLM。有關詳細資訊,請檢視從原始碼構建文件。

對於在 C++/CUDA 核心上迭代的最佳化工作流,請參閱增量編譯工作流中的建議。

使用 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.10/site-packages/mkdocs (Python 3.10)

克隆 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/common.txt -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/

# Run tests for a single test file with detailed output
pytest -s -v tests/test_logger.py

提示

由於 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 會自動新增此標頭。

提示

您可以透過 IDE 啟用自動簽名:

  • PyCharm:在 Commit 視窗中,點選 Commit and Push... 按鈕右側的 Show Commit Options 圖示。這將彈出一個 git 視窗,您可以在其中修改 Author 並啟用 Sign-off commit
  • VSCode:開啟設定編輯器並啟用 Git: Always Sign Off (git.alwaysSignOff) 欄位。

PR 標題和分類

只有特定型別的 PR 會被審查。PR 標題需要適當地加上字首,以表明更改型別。請使用以下字首之一:

  • [Bugfix] 用於錯誤修復。
  • [CI/Build] 用於構建或持續整合改進。
  • [Doc] 用於文件修復和改進。
  • [Model] 用於新增新模型或改進現有模型。模型名稱應出現在標題中。
  • [Frontend] 用於 vLLM 前端的變化(例如 OpenAI API 伺服器、LLM 類等)。
  • [Kernel] 用於影響 CUDA 核心或其他計算核心的更改。
  • [Core] 用於 vLLM 核心邏輯的更改(例如 LLMEngine, AsyncLLMEngine, Scheduler 等)。
  • [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 使用者理解和利用新功能或更改。

新增或修改核心

在積極開發或修改核心時,強烈建議使用增量編譯工作流以加快構建時間。每個自定義核心都需要一個模式和一個或多個實現才能在 PyTorch 中註冊。

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

關於重大更改的注意事項

請儘可能保持更改簡潔。對於重大的架構更改(不包括核心/資料/配置/測試的超過 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 成為一個對每個人都非常有用的工具和社群!