[sglang] CI에서 NVIDIA wheel 로컬 캐싱으로 830MB 반복 다운로드 방지
PR 링크: sgl-project/sglang#21778 상태: Merged | 변경: +36 / -6
들어가며
SGLang CI에서 매 실행마다 NVIDIA cudnn(~707MB)과 nvshmem(~125MB) wheel을 다시 다운로드하고 있었다. pypi.nvidia.com이 Cache-Control: no-store 헤더를 반환하기 때문에 pip의 일반 캐시가 작동하지 않는다. 이 PR은 이 wheel들을 로컬에 캐싱하여 CI 설치 시간을 크게 단축한다.
핵심 코드 분석
1. 캐시 스크립트 (새 파일)
#!/bin/bash
# scripts/ci/cuda/cache_nvidia_wheels.sh
NVIDIA_WHEEL_CACHE="/root/.cache/nvidia-wheels"
mkdir -p "$NVIDIA_WHEEL_CACHE"
for url in \
"https://pypi.nvidia.com/nvidia-cudnn-cu12/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl" \
"https://pypi.nvidia.com/nvidia-nvshmem-cu12/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.whl"; do
whl="$NVIDIA_WHEEL_CACHE/$(basename "$url")"
# 파일이 있고 무결성 검증 통과 시 건너뜀, 아니면 다운로드
[ -f "$whl" ] && unzip -tq "$whl" &>/dev/null || curl -fL -o "$whl" "$url"
done
pip install --no-deps "$NVIDIA_WHEEL_CACHE"/nvidia_cudnn_cu12-*.whl \
"$NVIDIA_WHEEL_CACHE"/nvidia_nvshmem_cu12-*.whl 2>/dev/null || true
unzip -t로 무결성 검사를 수행하여 부분 다운로드된 파일을 감지한다. --no-deps로 의존성 없이 설치하여 후속 pip install -e "python[dev]"에서 "Requirement already satisfied"로 건너뛴다.
2. 버전 변수 통합
Before:
# 하드코딩된 버전 번호가 여러 곳에 산재
if [ "$INSTALLED_NVSHMEM" = "3.4.5" ]; then
if [ "$INSTALLED_CUDNN" = "9.16.0.29" ]; then
After:
NVIDIA_CUDNN_VERSION="9.16.0.29"
NVIDIA_NVSHMEM_VERSION="3.4.5"
# 변수로 참조
if [ "$INSTALLED_NVSHMEM" = "$NVIDIA_NVSHMEM_VERSION" ]; then
if [ "$INSTALLED_CUDNN" = "$NVIDIA_CUDNN_VERSION" ]; then
버전 번호를 스크립트 상단 변수로 추출하여 업데이트 시 한 곳만 수정하면 된다.
왜 이게 좋은가
- CI 시간 절약: 매 실행마다 약 830MB 다운로드를 건너뛰어 수 분 절약
- 네트워크 안정성: pypi.nvidia.com 장애 시에도 캐시된 wheel로 설치 가능
- 무결성 보장:
unzip -t로 corrupt된 캐시 파일 자동 감지 및 재다운로드
정리
pip 캐시가 작동하지 않는 환경(no-store 헤더)에서의 실용적인 workaround다. 캐시 무결성 검증과 버전 변수 통합까지 포함하여 CI 안정성과 유지보수성을 함께 개선했다.
참고 자료
- sgl-project/sglang#21778 — 원본 PR
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [sglang] AMD에서 MoE Gate router gemm을 tgemm.mm으로 교체
- 현재글 : [sglang] CI에서 NVIDIA wheel 로컬 캐싱으로 830MB 반복 다운로드 방지
- 다음글 [sglang] DeepEP Low Latency FP8 Dispatch 변경 revert
댓글