跳到内容

贡献 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.git-scm.cn/#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 成为一个对每个人都非常有用的工具和社区!