跳到內容

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

vLLM目前的策略是在CI/CD中始終使用最新的PyTorch穩定版本。當新的PyTorch穩定版本釋出時,儘早提交PR更新PyTorch版本是標準做法。由於PyTorch版本釋出之間的間隔,這個過程並非易事。以 Pull Request #16859為例,本文件概述了實現此更新的常見步驟,以及潛在問題列表和如何解決這些問題。

測試PyTorch候選釋出版本 (RCs)

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

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論壇上向社群公佈。在此公告之後,我們可以透過遵循此三步流程起草拉取請求來開始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
    

如果在拉取請求中發現故障,請將其作為問題在vLLM上提出,並抄送PyTorch釋出團隊以啟動關於如何解決它們的討論。

更新CUDA版本

PyTorch釋出矩陣包括穩定版和實驗性CUDA版本。由於限制,只有最新的穩定版CUDA版本(例如,torch2.7.0+cu12.6)被上傳到PyPI。然而,vLLM可能需要不同的CUDA版本,例如用於Blackwell支援的12.8。這使得過程複雜化,因為我們不能使用現成的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

解決vLLM構建時間過長的問題

當使用新的PyTorch/CUDA版本構建vLLM時,vLLM sccache S3儲存桶中將不存在快取,這可能導致CI上的構建作業超過5小時並超時。此外,由於vLLM的fastcheck流水線以只讀模式執行,它不會填充快取,因此重新執行它來預熱快取是無效的。

儘管 #17419等持續努力從源頭解決構建時間過長的問題,目前的權宜之計是在Buildkite上手動觸發構建時,將VLLM_CI_BRANCH設定為@khluu提供的自定義分支(VLLM_CI_BRANCH=khluu/use_postmerge_q)。這個分支實現了兩件事:

  1. 將超時限制增加到10小時,以防止構建超時。
  2. 允許將編譯後的工件寫入vLLM sccache S3儲存桶以進行預熱,從而加快未來的構建速度。

更新依賴

幾個vLLM依賴項,例如FlashInfer,也依賴於PyTorch,需要相應地進行更新。與其等待所有依賴項都發布新版本(這會花費太多時間),不如從原始碼構建它們以解除更新過程的阻塞。

FlashInfer

以下是如何在vLLM的Dockerfile中,使用torch2.7.0+cu128從原始碼構建並安裝FlashInfer:

export TORCH_CUDA_ARCH_LIST='7.5 8.0 8.9 9.0 10.0+PTX'
export FLASHINFER_ENABLE_SM90=1
uv pip install --system \
    --no-build-isolation "git+https://github.com/flashinfer-ai/[email protected]"

一個注意事項是,從原始碼構建FlashInfer會使vLLM的構建時間增加大約30分鐘。因此,最好將wheel包快取到公共位置以進行即時安裝,例如此FlashInfer wheel連結。對於未來的版本,如果您希望在那裡釋出軟體包,請聯絡PyTorch釋出團隊。

xFormers

與FlashInfer類似,以下是如何從原始碼構建和安裝xFormers:

export TORCH_CUDA_ARCH_LIST='7.0 7.5 8.0 8.9 9.0 10.0+PTX'
MAX_JOBS=16 uv pip install --system \
    --no-build-isolation "git+https://github.com/facebookresearch/[email protected]"

Mamba

uv pip install --system \
    --no-build-isolation "git+https://github.com/state-spaces/[email protected]"

causal-conv1d

uv pip install 'git+https://github.com/Dao-AILab/[email protected]'

更新所有不同的vLLM平臺

與其嘗試在一個拉取請求中更新所有vLLM平臺,不如分別處理某些平臺更易於管理。vLLM CI/CD中不同平臺的需求檔案和Dockerfiles的分離允許我們有選擇地選擇要更新的平臺。例如,更新XPU需要來自Intel Extension for PyTorch(英特爾)的相應版本。雖然 Pull Request #16859將vLLM更新到PyTorch 2.7.0(CPU、CUDA和ROCm),但 Pull Request #17444完成了XPU的更新。