貢獻 vLLM¶
感謝您對貢獻 vLLM 感興趣!我們的社群對所有人開放,歡迎各種形式的貢獻,無論大小。您可以透過以下幾種方式為專案做出貢獻:
- 發現並報告任何問題或錯誤。
- 請求或新增對新模型的支援。
- 建議或實現新功能。
- 改進文件或貢獻操作指南。
我們也相信社群支援的力量;因此,回答疑問、提供 PR 審查和幫助他人也是非常受重視和有益的貢獻。
最後,支援我們最有影響力的方式之一是提高 vLLM 的知名度。在您的部落格文章中談論它,並強調它如何推動您的卓越專案。如果您正在使用 vLLM,請在社交媒體上表達您的支援,或者只需給我們的倉庫加星表示感謝!
招聘資訊¶
不確定從哪裡開始?請檢視以下連結,瞭解可以著手處理的任務:
許可協議¶
參閱 LICENSE。
開發¶
根據您希望進行的開發型別(例如 Python、CUDA),您可以選擇帶編譯或不帶編譯地構建 vLLM。詳情請查閱從原始碼構建 文件。
使用 MkDocs 構建文件¶
MkDocs 簡介¶
MkDocs 是一個快速、簡單且非常漂亮的靜態站點生成器,專用於構建專案文件。文件原始檔以 Markdown 格式編寫,並使用單個 YAML 配置檔案進行配置。
安裝 MkDocs 和外掛¶
安裝 MkDocs 以及 vLLM 文件中使用的外掛和所需依賴項
注意: 確保您的 Python 版本與外掛相容(例如,mkdocs-awesome-nav 需要 Python 3.10+)
驗證安裝¶
確認 MkDocs 已正確安裝:
輸出示例
mkdocs, version 1.6.1 from /opt/miniconda3/envs/mkdoc/lib/python3.9/site-packages/mkdocs (Python 3.9)
克隆 vLLM
倉庫¶
啟動開發伺服器¶
MkDocs 帶有內建的開發伺服器,您可以在編寫文件時預覽文件。確保您位於包含 mkdocs.yml
配置檔案的目錄中,然後執行 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 核心邏輯的更改(例如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 使用者理解和使用新功能或更改。
新增或更改核心¶
每個自定義核心都需要一個 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 成為一個對所有人來說都很棒的工具和社群!