Background
在开始工作之前,先做了一些背景调研。
-
APU 是 AMD 推出的一种把 CPU 和 GPU 做在同一颗芯片上的处理器,显存和内存共享,可以在一些小型工作站上跑模型。
-
ROCm 是 AMD 推出的类似于 NVIDIA CUDA 的计算平台,官方文档里扬言
vLLM: Full support.
但至于部署的时候遇到的奇奇怪怪的环境问题…
Start up
我参考了 AMD 和 vLLM 的官方文档:
事实上,知乎上已经有了前人的失败经验。运气很好,我折磨了几个小时最终成功了。
本机使用的操作系统是 Ubuntu 24.04。
vLLM 官方要求 ROCm 版本必须是 7.0.2 及以上,执行amd-smi后发现目前装的是 7.0.1,遂根据教程卸载后重装了 7.1.1 这个稳定版本。
有个奇怪的点是文档里提供的amd-ttm好像没法正常用,但后续似乎没啥影响,就先不管了。
然后就是用 Docker 拉取并运行镜像,这些 ROCm 平台上的 vLLM 镜像似乎都是 AMD 官方在维护的(这为了自家的生态也是很努力了,另外 vLLM 官方也建议 ROCm 平台在容器内运行模型推理),我第一次用的是稳定版本的rocm/vllm:latest,然而并没法用,在容器内试图启动 vLLM 提供的 OpenAI-Compatible Server 不管加上什么限制的环境变量都会报错,事实上这个镜像已经是一个月前构建的了。
好在 AMD 还维护了一个每日构建的版本rocm/vllm-dev:nightly,遂尝试:
sudo docker run -it --rm \
--network=host \
--group-add=video \
--ipc=host \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--device /dev/kfd \
--device /dev/dri \
-v /home/ubuntu/vllm/models:/app/models \
-e HF_HOME="/app/models" \
rocm/vllm-dev:nightly这次终于成功了,执行
vllm serve Qwen/Qwen2.5-1.5B-Instruct看到服务器启动的日志给我激动坏了,再执行
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'得到了正常的输出,拿下!
Postscript
- ToDo: 交给我机器的老师让我去部署一个可以支持同声传译的服务。
和朋友吐槽在这逆天 AMD APU 上用 ROCm 后端跑 vLLM 推理,配环境太折磨,得到回复:
评价是比ascend好 :tieba_laugh:
xx,你崛起罢!