Skip to content
Draft
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
10 changes: 5 additions & 5 deletions .github/workflows/gpu-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,17 @@ jobs:
# this is evaluated before any step runs.
name: GPU Tests (${{ matrix.label }} · ${{ inputs.suite || 'full' }})
# granite-switch supports two mutually-exclusive vLLM lines and both must be
# tested. They cannot share a venv (pyproject declares vllm19/vllm20 as
# tested. They cannot share a venv (pyproject declares vllm19/vllm28 as
# conflicting groups), so each gets its own cluster pod. Only the dev* groups
# used because the bare vllm19/vllm20 groups omit pytest.
# used because the bare vllm19/vllm28 groups omit pytest.
strategy:
fail-fast: false # a vllm19 failure must not hide the vllm20 result
fail-fast: false # a vllm19 failure must not hide the vllm28 result
matrix:
include:
- label: vllm19
dep_group: dev
- label: vllm20
dep_group: dev-vllm20
- label: vllm28
dep_group: dev-vllm28
runs-on: [self-hosted, gpu]

# MUST be set explicitly. GitHub's default is 360 minutes, which is exactly the
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ Other install options depending on your use case:
```bash
pip install "granite-switch[compose]" # Compose modular models
pip install "granite-switch[hf]" # HuggingFace inference
pip install "granite-switch[vllm20]" # vLLM 0.20+ (requires CUDA 13+)
pip install "granite-switch[vllm28]" # vLLM 0.28+ (requires CUDA 13+)
pip install "granite-switch[dev]" # Everything
```

Requires Python 3.10+ and PyTorch 2.0+.

> **vLLM version note:** This project currently defaults to vLLM 0.19.1 due to vLLM 0.20's
> dependency on CUDA 13.0+ (via PyTorch 2.11), which is incompatible with many existing
> environments running CUDA 12.x drivers. Use `.[vllm20]` if your environment supports CUDA 13+.
> **vLLM version note:** This project currently defaults to vLLM 0.19.1 due to vLLM 0.28's
> dependency on CUDA 13.0+ (via PyTorch 2.13), which is incompatible with many existing
> environments running CUDA 12.x drivers. Use `.[vllm28]` if your environment supports CUDA 13+.

### Compose a Model

Expand Down
4 changes: 2 additions & 2 deletions docs/AUDIO.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ non-16 kHz input:

```bash
# Serving an audio-enabled checkpoint
uv sync --extra vllm --extra audio # or --extra vllm20 --extra audio
uv sync --extra vllm --extra audio # or --extra vllm28 --extra audio

# Development / running the test suite (the dev groups include audio already)
uv sync --group dev # vLLM 0.19.x
uv sync --group dev-vllm20 # vLLM 0.20.x
uv sync --group dev-vllm28 # vLLM 0.28.x
```

## Building an audio-enabled checkpoint
Expand Down
32 changes: 16 additions & 16 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ license = "Apache-2.0"
requires-python = ">=3.11,<3.14"
dependencies = [
"torch>=2.10.0",
"transformers>=5.5.1,<5.10.0",
"transformers>=5.5.1,<5.16.0",
]

[project.urls]
Expand All @@ -21,7 +21,7 @@ Documentation = "https://github.com/generative-computing/granite-switch/tree/mai
[project.optional-dependencies]
hf = ["accelerate>=0.20.0"]
vllm = ["vllm>=0.19.1,<0.20.0"]
vllm20 = ["vllm>=0.20.0,<0.21.0"]
vllm28 = ["vllm>=0.28.0,<0.29.0"]
compose = ["huggingface_hub", "pyyaml", "tqdm", "safetensors"]
build = ["huggingface_hub", "pyyaml", "tqdm", "safetensors"] # Backward compatibility alias for compose
# Audio (ASR) decode + resample. Reuse vLLM's own audio deps (unversioned, so it
Expand Down Expand Up @@ -57,32 +57,32 @@ markers = [

[dependency-groups]
vllm19 = ["vllm>=0.19.1,<0.20.0"]
vllm20 = ["vllm>=0.20.0,<0.21.0"]
vllm28 = ["vllm>=0.28.0,<0.29.0"]
# `audio` is included so the audio tests can actually run: the ASR path needs
# vLLM's audio deps (av/soundfile/resampy) at runtime, and no group pulled them
# in before (integration tests failed with ModuleNotFoundError on a synced pod).
dev = ["pytest", "pytest-cov", { include-group = "vllm19" }, "granite-switch[hf,compose,audio]"]
dev-vllm20 = ["pytest", "pytest-cov", { include-group = "vllm20" }, "granite-switch[hf,compose,audio]"]
dev-vllm28 = ["pytest", "pytest-cov", { include-group = "vllm28" }, "granite-switch[hf,compose,audio]"]
test = ["pytest", "pytest-cov", "bitsandbytes", "optimum-quanto", { include-group = "dev" }]

[tool.uv]
default-groups = ["vllm19"]
conflicts = [
# group-vs-group
[{ group = "vllm19" }, { group = "vllm20" }],
[{ group = "dev" }, { group = "vllm20" }],
[{ group = "dev" }, { group = "dev-vllm20" }],
[{ group = "dev-vllm20" }, { group = "vllm19" }],
[{ group = "vllm19" }, { group = "vllm28" }],
[{ group = "dev" }, { group = "vllm28" }],
[{ group = "dev" }, { group = "dev-vllm28" }],
[{ group = "dev-vllm28" }, { group = "vllm19" }],
# group-vs-extra
[{ group = "vllm19" }, { extra = "vllm20" }],
[{ group = "vllm20" }, { extra = "vllm" }],
[{ group = "vllm20" }, { extra = "tutorials" }],
[{ group = "dev" }, { extra = "vllm20" }],
[{ group = "dev-vllm20" }, { extra = "vllm" }],
[{ group = "dev-vllm20" }, { extra = "tutorials" }],
[{ group = "vllm19" }, { extra = "vllm28" }],
[{ group = "vllm28" }, { extra = "vllm" }],
[{ group = "vllm28" }, { extra = "tutorials" }],
[{ group = "dev" }, { extra = "vllm28" }],
[{ group = "dev-vllm28" }, { extra = "vllm" }],
[{ group = "dev-vllm28" }, { extra = "tutorials" }],
# extra-vs-extra
[{ extra = "vllm" }, { extra = "vllm20" }],
[{ extra = "tutorials" }, { extra = "vllm20" }],
[{ extra = "vllm" }, { extra = "vllm28" }],
[{ extra = "tutorials" }, { extra = "vllm28" }],
]

[tool.coverage.run]
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/test_audio_uncached_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def _cache_disabling_kwargs():
"""LLM kwargs that turn off the multimodal processor cache.

The knob was renamed across the vLLM range this project supports (0.19.x and
0.20.x are both allowed in pyproject): older builds expose
0.28.x are both allowed in pyproject): older builds expose
``disable_mm_preprocessor_cache``, newer ones ``mm_processor_cache_gb``.
Returns an empty dict when neither exists, so the caller can skip rather than
silently exercise the cached path.
Expand Down
2 changes: 1 addition & 1 deletion tutorials/PREREQUISITES.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ For production inference with vLLM:

```bash
pip install "granite-switch[vllm]" # CUDA 12.x
pip install "granite-switch[vllm20]" # CUDA 13+ (requires PyTorch 2.11+)
pip install "granite-switch[vllm28]" # CUDA 13+ (requires PyTorch 2.13+)
```

This includes:
Expand Down
Loading
Loading