跳到內容

在 vLLM OSS CI/CD 上更新 PyTorch 版本

vLLM 當前的策略是在 CI/CD 中始終使用最新的 PyTorch 穩定版。當新的 PyTorch 穩定版可用時,儘早提交 PR 來更新 PyTorch 版本是一種標準做法。由於 PyTorch 釋出週期之間存在的時間差,這個過程並非易事。以 Pull Request #16859 為例,本文件概述了實現此更新的常見步驟,以及潛在問題及其解決方案。

測試 PyTorch 釋出候選版(RC)

在 PyTorch 正式釋出後才更新 vLLM 中的 PyTorch 並非理想選擇,因為屆時發現的任何問題只能透過等待下一個版本釋出或在 vLLM 中實現臨時的變通方法來解決。更好的解決方案是測試 vLLM 與 PyTorch 釋出候選版(RC)的相容性,以確保在每次釋出前都相容。

PyTorch 釋出候選版可以從 PyTorch 測試索引下載。例如,可以使用以下命令安裝 torch2.7.0+cu12.8 RC。

uv pip install torch torchvision torchaudio \
    --index-url https://download.pytorch.org/whl/test/cu128

當最終 RC 版本準備好進行測試時,將在 PyTorch dev-discuss 論壇上向社群釋出。在此公告後,我們可以透過遵循以下 3 步流程起草一個 pull request 來開始測試 vLLM 整合:

  1. 更新 requirements 檔案,將 torchtorchvisiontorchaudio 指向新版本。

  2. 使用以下選項獲取最終釋出候選版的 wheel。一些常見平臺是 cpucu128rocm6.2.4

    --extra-index-url https://download.pytorch.org/whl/test/<PLATFORM>
    
  3. 由於 vLLM 使用 uv,請確保應用以下索引策略:

    • 透過環境變數
    export UV_INDEX_STRATEGY=unsafe-best-match
    
    • 或透過 CLI 標誌
    --index-strategy unsafe-best-match
    

如果在 pull request 中發現失敗,請在 vLLM 上將其作為 issue 提出,並抄送 PyTorch 釋出團隊,以啟動關於如何解決這些問題的討論。

更新 CUDA 版本

PyTorch 釋出矩陣包含穩定版和實驗版 CUDA 版本。由於限制,只有最新的穩定 CUDA 版本(例如,torch 2.7.1+cu126)會上傳到 PyPI。但是,vLLM 可能需要不同的 CUDA 版本,例如 12.8 以支援 Blackwell。這使得過程變得複雜,因為我們無法使用開箱即用的 pip install torch torchvision torchaudio 命令。解決方案是在 vLLM 的 Dockerfiles 中使用 --extra-index-url

  • 目前重要的索引包括:
平臺 --extra-index-url
CUDA 12.8 https://download.pytorch.org/whl/cu128
CPU https://download.pytorch.org/whl/cpu
ROCm 6.2 https://download.pytorch.org/whl/rocm6.2.4
ROCm 6.3 https://download.pytorch.org/whl/rocm6.3
XPU https://download.pytorch.org/whl/xpu
  • 更新以下檔案以匹配步驟 1 中的 CUDA 版本。這確保了 vLLM wheel 的釋出能在 CI 上進行測試。
    • .buildkite/release-pipeline.yaml
    • .buildkite/scripts/upload-wheels.sh

手動在 BuildKiteCI 上執行 vLLM 構建

使用新的 PyTorch/CUDA 版本構建 vLLM 時,vLLM sccache S3 儲存桶中將沒有任何快取的偽影,這可能導致 CI 構建作業超過 5 小時。此外,vLLM 的 fastcheck 管道在只讀模式下執行,並且不填充快取,使其無法用於快取預熱。

為了解決這個問題,手動觸發 Buildkite 上的構建,以實現兩個目標:

  1. 透過設定環境變數:RUN_ALL=1NIGHTLY=1,針對 PyTorch RC 構建執行完整的測試套件。
  2. 填充 vLLM sccache S3 儲存桶,包含編譯後的偽影,從而加快後續構建速度。

Buildkite new build popup

更新所有不同的 vLLM 平臺

與其試圖在一個 pull request 中更新所有 vLLM 平臺,不如單獨處理某些平臺更容易管理。vLLM CI/CD 中不同平臺的需求和 Dockerfiles 的分離,允許我們選擇性地更新哪些平臺。例如,更新 XPU 需要 Intel Extension for PyTorch 來自 Intel 的相應釋出。雖然 Pull Request #16859 在 CPU、CUDA 和 ROCm 上將 vLLM 更新到 PyTorch 2.7.0, Pull Request #17444 完成了 XPU 的更新。