貢獻 vLLM¶
感謝您對貢獻 vLLM 的興趣!我們的社群對所有人開放,歡迎各種形式的貢獻,無論大小。您可以透過以下幾種方式為專案做出貢獻:
- 識別並報告任何問題或錯誤。
- 請求或新增對新模型的支援。
- 建議或實現新功能。
- 改進文件或貢獻操作指南。
我們還相信社群支援的力量;因此,回答疑問、提供 PR 審查和協助他人也是備受推崇和有益的貢獻。
最後,支援我們最有影響力的方式之一是提高 vLLM 的知名度。在您的部落格文章中談論它,並強調它如何推動您的出色專案。如果您正在使用 vLLM,請在社交媒體上表達您的支援,或者只需透過給我們倉庫點星來表達您的感謝!
招聘¶
不確定從何開始?檢視以下連結以獲取可進行的工作:
許可證¶
參見 LICENSE。
開發¶
根據您想要進行的開發型別(例如 Python、CUDA),您可以選擇編譯或不編譯 vLLM。有關詳細資訊,請檢視從原始碼構建文件。
對於在 C++/CUDA 核心上迭代的最佳化工作流,請參閱增量編譯工作流中的建議。
使用 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.10/site-packages/mkdocs (Python 3.10)
克隆 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/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 成為一個對每個人都非常有用的工具和社群!