main
sh 71 lines 2.82 KB
Raw
1 #!/bin/bash
2 # SPDX-License-Identifier: Apache-2.0
3 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
4
5 set -euo pipefail
6
7 if python3 -c "import torch; raise SystemExit(0 if torch.version.hip is not None else 1)"; then
8 uv pip install --system -r /vllm-workspace/requirements/kv_connectors_rocm.txt
9 exit 0
10 fi
11
12 # Select requirements before optional packages can change the installed Torch.
13 CUDA_MAJOR=$(python3 -c 'import torch; print(torch.version.cuda.split(".", 1)[0])')
14 DEFAULT_REQUIREMENTS=/vllm-workspace/requirements/kv_connectors.txt
15 if [ "${CUDA_MAJOR}" = "12" ]; then
16 DEFAULT_REQUIREMENTS=/vllm-workspace/requirements/kv_connectors_cu12.txt
17 fi
18 REQUIREMENTS_FILE="${KV_CONNECTORS_REQUIREMENTS:-${DEFAULT_REQUIREMENTS}}"
19
20 CONSTRAINTS_DIR=$(mktemp -d)
21 trap 'rm -rf "${CONSTRAINTS_DIR}"' EXIT
22 uv pip freeze --system > "${CONSTRAINTS_DIR}/installed.txt"
23 grep -E '^(torch|torchaudio|torchvision|triton|cuda-bindings|cuda-python|cuda-toolkit)==' \
24 "${CONSTRAINTS_DIR}/installed.txt" > "${CONSTRAINTS_DIR}/constraints.txt"
25 uv pip install --system -c "${CONSTRAINTS_DIR}/constraints.txt" -r "${REQUIREMENTS_FILE}"
26
27 KV_METADATA=$(python3 - <<'PY'
28 import importlib.metadata as metadata
29
30 import torch
31
32 cuda_version = torch.version.cuda
33 if cuda_version is None:
34 raise SystemExit("torch.version.cuda is not set")
35
36 try:
37 mooncake_version = metadata.version("mooncake-transfer-engine")
38 except metadata.PackageNotFoundError:
39 mooncake_version = ""
40
41 print(cuda_version.split(".", 1)[0], metadata.version("nixl"), mooncake_version)
42 PY
43 )
44 read -r CUDA_MAJOR NIXL_VERSION MOONCAKE_VERSION <<<"${KV_METADATA}"
45 MOONCAKE_VERSION="${MOONCAKE_VERSION:-}"
46
47 # nixl>=1.1.0 can install multiple CUDA wheel variants. Keep only the variant
48 # matching this CI image so nixl_ep_cpp links against the available libcudart.
49 uv pip uninstall --system nixl-cu12 nixl-cu13 2>/dev/null || true
50 uv pip install --system --no-deps "nixl-cu${CUDA_MAJOR}==${NIXL_VERSION}"
51
52 python3 - <<'PY'
53 import importlib.metadata as metadata
54
55 for package_name in ("nixl", "nixl-cu12", "nixl-cu13"):
56 try:
57 version = metadata.version(package_name)
58 except metadata.PackageNotFoundError:
59 version = "not installed"
60 print(f"{package_name}: {version}")
61 PY
62
63 # The default mooncake-transfer-engine PyPI wheel is built against CUDA 12; its
64 # engine.so links libcudart.so.12, absent from the CUDA 13 runtime image. On a
65 # CUDA 13 image, swap it for the cuda13 variant (same version), which links
66 # libcudart.so.13. Both expose the `mooncake` package, so uninstall the CUDA 12
67 # build first to avoid a clash.
68 if [ "${CUDA_MAJOR}" = "13" ] && [ -n "${MOONCAKE_VERSION}" ]; then
69 uv pip uninstall --system mooncake-transfer-engine 2>/dev/null || true
70 uv pip install --system -c "${CONSTRAINTS_DIR}/constraints.txt" "mooncake-transfer-engine-cuda13==${MOONCAKE_VERSION}"
71 fi