A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 12, 09:45 UTC
[CPU] Update torch 2.9.1 for CPU backend (#29664)
Signed-off-by: jiang1.li <jiang1.li@intel.com>
Li, Jiang committed
Nov 28, 2025 at 21:37 UTC
e2f56c309d2a28899c68975a7e104502d56deb8f
6 files changed
+16
-24
.buildkite/scripts/hardware_ci/run-cpu-test.sh
+2
-2
@@ -21,8 +21,8 @@ trap remove_docker_container EXIT
21
remove_docker_container
22
23
# Try building the docker image
24
-numactl -C "$CORE_RANGE" -N "$NUMA_NODE" docker build --tag cpu-test-"$NUMA_NODE" --target vllm-test -f docker/Dockerfile.cpu .
25
-numactl -C "$CORE_RANGE" -N "$NUMA_NODE" docker build --build-arg VLLM_CPU_DISABLE_AVX512="true" --tag cpu-test-"$NUMA_NODE"-avx2 --target vllm-test -f docker/Dockerfile.cpu .
24
+numactl -C "$CORE_RANGE" -N "$NUMA_NODE" docker build --progress plain --tag cpu-test-"$NUMA_NODE" --target vllm-test -f docker/Dockerfile.cpu .
25
+numactl -C "$CORE_RANGE" -N "$NUMA_NODE" docker build --progress plain --build-arg VLLM_CPU_DISABLE_AVX512="true" --tag cpu-test-"$NUMA_NODE"-avx2 --target vllm-test -f docker/Dockerfile.cpu .
26
27
# Run the image, setting --shm-size=4g for tensor parallel.
28
docker run -itd --cpuset-cpus="$CORE_RANGE" --cpuset-mems="$NUMA_NODE" --entrypoint /bin/bash -v ~/.cache/huggingface:/root/.cache/huggingface --privileged=true -e HF_TOKEN --env VLLM_CPU_KVCACHE_SPACE=16 --env VLLM_CPU_CI_ENV=1 -e E2E_OMP_THREADS="$OMP_CORE_RANGE" --shm-size=4g --name cpu-test-"$NUMA_NODE" cpu-test-"$NUMA_NODE"
csrc/cpu/utils.cpp
+7
-6
@@ -51,12 +51,13 @@ std::string init_cpu_threads_env(const std::string& cpu_ids) {
51
if (node_id != -1) {
52
node_ids.insert(node_id);
53
}
54
- TORCH_WARN(node_id == mem_node_id, "CPU ", cpu_id, " is on NUMA node ",
55
- node_id, ", but CPU ", omp_cpu_ids.front(),
56
- " is on NUMA node ", mem_node_id,
57
- ". All CPUs should be on the same NUMA node for optimal "
58
- "performance. Memory will be bound to NUMA node ",
59
- mem_node_id, ".");
54
+ if (node_id != mem_node_id) {
55
+ TORCH_WARN("CPU ", cpu_id, " is on NUMA node ", node_id, ", but CPU ",
56
+ omp_cpu_ids.front(), " is on NUMA node ", mem_node_id,
57
+ ". All CPUs should be on the same NUMA node for optimal "
58
+ "performance. Memory will be bound to NUMA node ",
59
+ mem_node_id, ".");
60
+ }
61
}
62
// Concatenate all node_ids into a single comma-separated string
63
if (!node_ids.empty()) {
docker/Dockerfile.cpu
+1
-1
@@ -132,7 +132,7 @@ RUN --mount=type=bind,src=requirements/test.in,target=requirements/test.in \
132
esac; \
133
}; \
134
remove_packages_not_supported_on_aarch64 && \
135
- sed -i 's/^torch==.*/torch==2.8.0/g' requirements/cpu-test.in && \
135
+ sed -i 's/^torch==.*/torch==2.9.1/g' requirements/cpu-test.in && \
136
sed -i 's/torchaudio.*/torchaudio/g' requirements/cpu-test.in && \
137
sed -i 's/torchvision.*/torchvision/g' requirements/cpu-test.in && \
138
uv pip compile requirements/cpu-test.in -o requirements/cpu-test.txt --index-strategy unsafe-best-match --torch-backend cpu
requirements/cpu-build.txt
+2
-3
@@ -4,9 +4,8 @@ packaging>=24.2
4
setuptools>=77.0.3,<81.0.0
5
setuptools-scm>=8
6
--extra-index-url https://download.pytorch.org/whl/cpu
7
-torch==2.8.0+cpu; platform_machine == "x86_64" or platform_machine == "s390x"
8
-torch==2.9.0; platform_system == "Darwin"
9
-torch==2.8.0; platform_machine == "ppc64le" or platform_machine == "aarch64"
7
+torch==2.9.1+cpu; platform_machine == "x86_64" or platform_machine == "s390x"
8
+torch==2.9.1; platform_system == "Darwin" or platform_machine == "ppc64le" or platform_machine == "aarch64"
9
scons; platform_machine == "aarch64" # needed to build Arm Compute Library (ACL)
10
wheel
11
jinja2>=3.1.6
requirements/cpu.txt
+4
-11
@@ -4,25 +4,18 @@
4
numba == 0.61.2; platform_machine != "s390x" # Required for N-gram speculative decoding
5
6
# Dependencies for CPUs
7
-packaging>=24.2
8
-setuptools>=77.0.3,<81.0.0
7
--extra-index-url https://download.pytorch.org/whl/cpu
10
-torch==2.8.0+cpu; platform_machine == "x86_64" or platform_machine == "s390x"
11
-torch==2.9.0; platform_system == "Darwin"
12
-torch==2.8.0; platform_machine == "ppc64le" or platform_machine == "aarch64"
8
+torch==2.9.1+cpu; platform_machine == "x86_64" or platform_machine == "s390x"
9
+torch==2.9.1; platform_system == "Darwin" or platform_machine == "ppc64le" or platform_machine == "aarch64"
10
11
# required for the image processor of minicpm-o-2_6, this must be updated alongside torch
15
-torchaudio; platform_machine != "ppc64le" and platform_machine != "s390x"
16
-torchaudio==2.8.0; platform_machine == "ppc64le"
12
+torchaudio; platform_machine != "s390x"
13
14
# required for the image processor of phi3v, this must be updated alongside torch
19
-torchvision; platform_machine != "ppc64le" and platform_machine != "s390x"
20
-torchvision==0.23.0; platform_machine == "ppc64le"
21
-datasets # for benchmark scripts
15
+torchvision; platform_machine != "s390x"
16
17
# Intel Extension for PyTorch, only for x86_64 CPUs
18
intel-openmp==2024.2.1; platform_machine == "x86_64"
25
-triton==3.2.0; platform_machine == "x86_64" # Triton is required for torch 2.6+cpu, as it is imported in torch.compile.
19
20
# Use this to gather CPU info and optimize based on ARM Neoverse cores
21
py-cpuinfo; platform_machine == "aarch64"
vllm/platforms/cpu.py
-1
@@ -384,7 +384,6 @@ class CpuPlatform(Platform):
384
385
@classmethod
386
def is_pin_memory_available(cls) -> bool:
387
- logger.warning("Pin memory is not supported on CPU.")
387
return False
388
389
@classmethod