在 ARM64 服务器上部署 GPU 推理,过去最让人头疼的不是模型本身,而是装 PyTorch。官方 PyPI 上长期只有 CPU 版的 aarch64 wheel,想用 CUDA 就得去找第三方索引、手动拼 URL、甚至自己编译——一条 pip install torch 跑完,拿到的是个没 GPU 支持的空壳。PyTorch 2.11 把这件事彻底改了:CUDA-enabled 的 aarch64 wheel 直接上了 PyPI,pip install 一行搞定,和 x86_64 体验完全一致。vLLM 团队和 PyTorch 官方协作推动了这项落地,对在 ARM 服务器上跑大模型推理的开发者来说,这是一个实打实的部署简化。
以前的痛点有多痛
假设你在一台 Ampere Altra 或 AWS Graviton3 + NVIDIA GPU 的机器上,想跑 vLLM 做 LLM 推理。流程大概是这样:
pip install torch→ 拿到 CPU-only wheel,CUDA 找不到。- 去 PyTorch 官网的旧版 aarch64 索引页面,手动拼出带
+cu124后缀的 URL。 - 或者用
--extra-index-url指向一个非 PyPI 的托管地址,依赖解析经常和别的包打架。 - 版本锁不住、CI 脚本里硬编码 URL,升级时一改就断。
每一步都是隐性成本,尤其在 CI/CD 和多环境部署里,"装不上"比"跑不快"更致命。
现在的体验:一行命令,和 x86 一样
PyTorch 2.11 起,aarch64 Linux 的 CUDA wheel 正式进入 PyPI 主索引。不需要额外参数:
# 以前(PyTorch < 2.11,aarch64 + CUDA)
pip install torch --extra-index-url https://download.pyt.org/whl/cu124/aarch64
# 现在(PyTorch 2.11+,aarch64 + CUDA)
pip install torch
pip 会根据你的平台标签(manylinux_aarch64)和 Python 版本自动选中正确的 CUDA wheel。行为和你在 x86_64 机器上执行同一条命令完全一致——这对写通用部署脚本的人来说,意味着不用再写平台分支逻辑。
验证安装是否带 CUDA 支持:
import torch
print(torch.cuda.is_available()) # 应输出 True
print(torch.version.cuda) # 应输出 12.4 或对应版本
print(torch.backends.cudnn.version()) # cuNN 版本号
如果 is_available() 返回 False,先检查驱动:nvidia-smi 确认驱动已加载、/dev/nvidia* 设备节点存在。
vLLM 在 aarch64 上的直接受益
vLLM 的安装依赖链里 PyTorch 是核心项。以前在 aarch64 上装 vLLM,要么先手动装好 CUDA PyTorch 再装 vLLM,要么接受 vLLM 拉下来的 CPU-only PyTorch 然后整个推理栈跑在 CPU 上——性能直接拉垮。
现在可以一步到位:
# 在 aarch64 + NVIDIA GPU 机器上
pip install vllm
# vLLM 会通过正常依赖解析拉到 CUDA-enabled PyTorch 2.11+
# 启动推理服务
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-7B-Instruct \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--port 8000
用 curl 快速验证推理是否走 GPU:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen2.5-7B-Instruct","prompt":"aarch64 上跑推理的感受是","max_tokens":32}'
返回正常文本且延迟在百毫秒级,说明 GPU 路径生效。如果延迟异常长(秒级),大概率 fallback 到了 CPU,回头查 torch.cuda.is_available()。
Docker 部署也简化了
以前写 aarch64 的 CUDA 推理镜像,Dockerfile 里总有一段丑陋的索引 URL 硬编码。现在可以写干净的通用镜像:
FROM python:3.11-slim-bookworm
# 安装 NVIDIA CUDA 基础库(假设宿主机驱动已就绪)
RUN apt-get update && apt-get install -y --no-install-recommends \
libnccl2 libcuda1 && \
rm -rf /var/lib/apt/lists/*
# 一行装好 CUDA PyTorch + vLLM,不再需要 --extra-index-url
RUN pip install --no-cache-dir vllm
EXPOSE 8000
ENTRYPOINT ["python", "-m", "vllm.entrypoints.openai.api_server"]
构建并运行:
docker build -t vllm-aarch64:latest .
docker run --gpus all -p 8000:8000 vllm-aarch64:latest \
--model Qwen/Qwen2.5-7B-Instruct
关键前提:宿主机的 NVIDIA 驱动 + container toolkit 已配置好,--gpus all 才能生效。在 aarch64 上装驱动目前仍需从 NVIDIA 官方下载对应 ARM64 的 .deb 或 .run 包,这一步没变。
落地前需要确认的几件事
| 检查项 | 命令 / 方法 |
|---|---|
| 架构确认 | uname -m → 应输出 aarch64 |
| GPU 驱动已加载 | nvidia-smi 正常显示设备信息 |
| CUDA toolkit 版本匹配 | nvcc --version 或 torch.version.cuda 与驱动支持的 CUDA 版本对齐 |
| PyTorch 版本 ≥ 2.11 | pip show torch | grep Version |
| NCCL 可用(多卡必须) | python -c "import torch; print(torch.nccl.is_available())" |
已知边界:
- CUDA wheel 目前只覆盖 Linux aarch64,macOS ARM(M 系列)仍只有 CPU 版,因为 Apple GPU 不走 CUDA。
- 部分旧型号 ARM GPU(如 NVIDIA T4 的某些固件版本)可能需要额外驱动补丁,建议先在官方支持列表内的硬件上验证。
- vLLM 的部分 kernel 优化在 aarch64 上仍在逐步对齐 x86 的性能水平,首版可用但不是最优,后续版本会持续改进。
一句话总结:如果你在 aarch64 Linux + NVIDIA GPU 上做推理部署,PyTorch 2.11 以后,把所有 --extra-index-url 和硬编码 URL 从脚本里删掉,换成普通的 pip install,CI/CD 和 Dockerfile 都能少维护一层平台特例。先在单机上用 torch.cuda.is_available() 确认 wheel 正确,再接入 vLLM 或你自己的推理栈,整个链路就和 x86_64 一样顺了。