Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 75 additions & 66 deletions docs/contributing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,113 +26,123 @@ See <gh-file:LICENSE>.

## Developing

--8<-- "docs/getting_started/installation/python_env_setup.inc.md"

Depending on the kind of development you'd like to do (e.g. Python, CUDA), you can choose to build vLLM with or without compilation.
Check out the [building from source][build-from-source] documentation for details.
The first step of contributing to vLLM is to clone the GitHub repository:

For an optimized workflow when iterating on C++/CUDA kernels, see the [Incremental Compilation Workflow](./incremental_build.md) for recommendations.
```bash
git clone https://github.com/vllm-project/vllm.git
cd vllm
```

### Building the docs with MkDocs
Then, configure your Python virtual environment.

#### Introduction to MkDocs
--8<-- "docs/getting_started/installation/python_env_setup.inc.md"

[MkDocs](https://github.com/mkdocs/mkdocs) is a fast, simple and downright gorgeous static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file.
If you are only developing vLLM's Python code, install vLLM using:

#### Install MkDocs and Plugins
```bash
VLLM_USE_PRECOMPILED=1 uv pip install -e .
```

Install MkDocs along with the [plugins](https://github.com/vllm-project/vllm/blob/main/mkdocs.yaml) used in the vLLM documentation, as well as required dependencies:
If you are developing vLLM's Python and CUDA/C++ code, install vLLM using:

```bash
uv pip install -r requirements/docs.txt
uv pip install -e .
```

!!! note
Ensure that your Python version is compatible with the plugins (e.g., `mkdocs-awesome-nav` requires Python 3.10+)
For more details about installing from source and installing for other hardware, check out the [installation instructions](../getting_started/installation/README.md) for your hardware and head to the "Build wheel from source" section.

#### Verify Installation
For an optimized workflow when iterating on C++/CUDA kernels, see the [Incremental Compilation Workflow](./incremental_build.md) for recommendations.

Confirm that MkDocs is correctly installed:
!!! tip
vLLM is compatible with Python versions 3.9 to 3.12. However, vLLM's default [Dockerfile](gh-file:docker/Dockerfile) ships with Python 3.12 and tests in CI (except `mypy`) are run with Python 3.12.

```bash
mkdocs --version
```
Therefore, we recommend developing with Python 3.12 to minimise the chance of your local environment clashing with our CI environment.

Example output:
### Linting

```console
mkdocs, version 1.6.1 from /opt/miniconda3/envs/mkdoc/lib/python3.10/site-packages/mkdocs (Python 3.10)
```

#### Clone the `vLLM` repository
vLLM uses `pre-commit` to lint and format the codebase. See <https://pre-commit.com/#usage> if `pre-commit` is new to you. Setting up `pre-commit` is as easy as:

```bash
git clone https://github.com/vllm-project/vllm.git
cd vllm
uv pip install pre-commit
pre-commit install
```

#### Start the Development Server
vLLM's `pre-commit` hooks will now run automatically every time you commit.

MkDocs comes with a built-in dev-server that lets you preview your documentation as you work on it. Make sure you're in the same directory as the `mkdocs.yml` configuration file, and then start the server by running the `mkdocs serve` command:
!!! tip "Tips"
You can manually run the `pre-commit` hooks using:

```bash
mkdocs serve
```
```bash
pre-commit run # runs on staged files
pre-commit run -a # runs on all files (short for --all-files)
```

Example output:
---

```console
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/
```
Some `pre-commit` hooks only run in CI. If you need to, you can run them locally with:

#### View in Your Browser
```bash
pre-commit run --hook-stage manual markdownlint
pre-commit run --hook-stage manual mypy-3.9
```

Open up [http://127.0.0.1:8000/](http://127.0.0.1:8000/) in your browser to see a live preview:.
### Documentation

#### Learn More
MkDocs is a fast, simple and downright gorgeous static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file, <gh-file:mkdocs.yaml>.

For additional features and advanced configurations, refer to the official [MkDocs Documentation](https://www.mkdocs.org/).
Get started with:

## Testing
```bash
uv pip install -r requirements/docs.txt
```

??? console "Commands"
!!! tip
Ensure that your Python version is compatible with the plugins
(e.g., `mkdocs-awesome-nav` requires Python 3.10+)

```bash
# These commands are only for Nvidia CUDA platforms.
uv pip install -r requirements/common.txt -r requirements/dev.txt --torch-backend=auto
MkDocs comes with a built-in dev-server that lets you preview your documentation as you work on it.
From the root of the repository, run:

# Linting, formatting and static type checking
pre-commit install
```bash
mkdocs serve # with API ref (~10 minutes)
API_AUTONAV_EXCLUDE=vllm mkdocs serve # API ref off (~15 seconds)
```

# You can manually run pre-commit with
pre-commit run --all-files --show-diff-on-failure
Once you see `Serving on http://127.0.0.1:8000/` in the logs, the live preview is ready!
Open <http://127.0.0.1:8000/> in your browser to see it.

# 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
For additional features and advanced configurations, refer to the:

# Unit tests
pytest tests/
- [MkDocs documentation](https://www.mkdocs.org/)
- [Material for MkDocs documentation](https://squidfunk.github.io/mkdocs-material/) (the MkDocs theme we use)

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

!!! tip
Since the <gh-file:docker/Dockerfile> ships with Python 3.12, all tests in CI (except `mypy`) are run with Python 3.12.
vLLM uses `pytest` to test the codebase.

Therefore, we recommend developing with Python 3.12 to minimise the chance of your local environment clashing with our CI environment.
```bash
# Install the test dependencies used in CI (CUDA only)
uv pip install -r requirements/common.txt -r requirements/dev.txt --torch-backend=auto

# Install some common test dependencies (hardware agnostic)
uv pip install pytest pytest-asyncio

# Run all tests
pytest tests/

!!! note "Install python3-dev if Python.h is missing"
# Run tests for a single test file with detailed output
pytest -s -v tests/test_logger.py
```

!!! tip "Install python3-dev if Python.h is missing"
If any of the above commands fails with `Python.h: No such file or directory`, install
`python3-dev` with `sudo apt install python3-dev`.

!!! note
!!! warning "Warnings"
Currently, the repository is not fully checked by `mypy`.

!!! note
---

Currently, not all unit tests pass when run on CPU platforms. If you don't have access to a GPU
platform to run unit tests locally, rely on the continuous integration system to run the tests for
now.
Expand Down Expand Up @@ -194,8 +204,7 @@ appropriately to indicate the type of change. Please use one of the following:
The PR needs to meet the following code quality standards:

- We adhere to [Google Python style guide](https://google.github.io/styleguide/pyguide.html) and [Google C++ style guide](https://google.github.io/styleguide/cppguide.html).
- Pass all linter checks. Please use `pre-commit` to format your code. See
<https://pre-commit.com/#usage> if `pre-commit` is new to you.
- Pass all linter checks.
- The code needs to be well-documented to ensure future contributors can easily
understand the code.
- Include sufficient tests to ensure the project stays correct and robust. This
Expand Down
2 changes: 1 addition & 1 deletion docs/getting_started/installation/python_env_setup.inc.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
It's recommended to use [uv](https://docs.astral.sh/uv/), a very fast Python environment manager, to create and manage Python environments. Please follow the [documentation](https://docs.astral.sh/uv/#getting-started) to install `uv`. After installing `uv`, you can create a new Python environment and install vLLM using the following commands:
It's recommended to use [uv](https://docs.astral.sh/uv/), a very fast Python environment manager, to create and manage Python environments. Please follow the [documentation](https://docs.astral.sh/uv/#getting-started) to install `uv`. After installing `uv`, you can create a new Python environment using the following commands:

```bash
uv venv --python 3.12 --seed
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ plugins:
- "re:vllm\\._.*" # Internal modules
- "vllm.third_party"
- "vllm.vllm_flash_attn"
- !ENV [API_AUTONAV_EXCLUDE, ""]
- mkdocstrings:
handlers:
python:
Expand Down