【vLLM 学习】使用 ROCm 安装

vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。

更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/

vLLM 支持采用 ROCm 6.1 的 AMD GPU。

依赖环境

  • 操作系统:Linux

  • Python:3.8 – 3.11

  • GPU:MI200s (gfx90a)、MI300 (gfx942)、Radeon RX 7900 系列 (gfx1100)

  • ROCm 6.1

安装选项:

使用 docker 从源代码构建

从源代码构建

选项 1:使用 docker 从源代码构建 (推荐)

您可以从源代码构建并安装 vLLM。

首先,从 Dockerfile.rocm 构建一个 docker 镜像,并从该镜像启动一个 docker 容器。

Dockerfile.rocm 默认使用 ROCm 6.1,但在较旧的 vLLM 分支中也支持 ROCm 5.7 和 6.0。方法非常灵活,可以使用以下参数自定义 Docker 镜像的构建:

  • BASE_IMAGE:指定运行 docker build 时使用的基础镜像,特别是 ROCm 基础镜像上的 PyTorch。

  • BUILD_FA:指定是否构建 CK flash-attention。默认值为 1。对于 Radeon RX 7900 系列 (gfx1100),在 flash-attention 支持该目标前应将其设置为 0。

  • FX_GFX_ARCHS:指定用于构建 CK flash-attention 的 GFX 架构,例如 MI200 和 MI300 的 gfx90a;gfx942。默认为 gfx90a;gfx942*。*

  • FA_BRANCH:指定用于在 ROCm’s flash-attention repo 中构建 CK flash-attention 的分支。默认为 ae7928c*。*

  • BUILD_TRITON: 指定是否构建 triton flash-attention。默认值为 1。

这些值可以在使用 --build-arg 选项运行 docker build 时传入。

要在 ROCm 6.1 上为 MI200 和 MI300 系列构建 vllm,您可以使用默认值:

DOCKER_BUILDKIT=1 docker build -f Dockerfile.rocm -t vllm-rocm .

要在 ROCm 6.1 上为 Radeon RX7900 系列 (gfx1100) 构建 vllm,您应该指定 BUILD_FA ,如下所示:

DOCKER_BUILDKIT=1 docker build --build-arg BUILD_FA="0" -f Dockerfile.rocm -t vllm-rocm .

要运行上面的 docker 镜像 vllm-rocm,请使用以下命令:

docker run -it \
   --network=host \
   --group-add=video \
   --ipc=host \
   --cap-add=SYS_PTRACE \
   --security-opt seccomp=unconfined \
   --device /dev/kfd \
   --device /dev/dri \
   -v <path/to/model>:/app/model \
   vllm-rocm \
   bash

其中 <path/to/model> 是存储模型的位置,例如 llama2 或 llama3 模型的权重。

选项 2:从源代码构建

安装依赖(如果您已经在安装了以下内容的环境或者 docker 中,则可以跳过):

对于安装 PyTorch,您可以从一个新的 docker 镜像开始,例如 rocm/pytorch:rocm6.1.2_ubuntu20.04_py3.9_pytorch_staging、rocm/pytorch-nightly。

或者,你可以使用 PyTorch wheels 安装 PyTorch。你可以查看 PyTorch 入门指南中的 PyTorch 安装指南。

注意

  • 您可能需要将「ninja」版本降级到 1.10,编译 flash-attention-2 时不会使用它(例如,通过 pip install ninja==1.10.2.4**安装)

1、构建 vLLM。

cd vllm
pip install -U -r requirements-rocm.txt
python setup.py develop # This may take 5-10 minutes. Currently, `pip install .`` does not work for ROCm installation

python setup.pydevelop # 这可能需要 5-10 分钟。目前,`pip install .`不适用于 ROCm 安装

提示

例如,ROCM 6.1 上的 vLLM v0.5.3 可以通过以下步骤构建:

pip install --upgrade pip

# Install PyTorch
# 安装 PyTorch

pip uninstall torch -y
pip install --no-cache-dir --pre torch==2.5.0.dev20240726 --index-url https://download.pytorch.org/whl/nightly/rocm6.1

# Build & install AMD SMI
# 构建并安装 AMD SMI

pip install /opt/rocm/share/amd_smi

# Install dependencies
# 安装依赖项

pip install --upgrade numba scipy huggingface-hub[cli]
pip install "numpy<2"
pip install -r requirements-rocm.txt

# Apply the patch to ROCM 6.1 (requires root permission)
# 将补丁应用到 ROCM 6.1(需要 root 权限)

wget -N https://github.com/ROCm/vllm/raw/fa78403/rocm_patch/libamdhip64.so.6 -P /opt/rocm/lib
rm -f "$(python3 -c 'import torch; print(torch.__path__[0])')"/lib/libamdhip64.so*

# Build vLLM for MI210/MI250/MI300.
# 为 MI210/MI250/MI300 构建 vLLM。

export PYTORCH_ROCM_ARCH="gfx90a;gfx942"
python3 setup.py develop

提示

  • 默认情况下使用 Triton flash attention。进行基准测试时,建议在收集性能数据之前运行预热步骤。

  • Triton flash attention 目前不支持滑动窗口 attention。如果使用半精度,请使用 CK flash-attention 来支持滑动窗口。

  • 若要使用 CK flash-attention 或 PyTorch naive Attention,请使用此标志 export VLLM_USE_TRITON_FLASH_ATTN=0 来关闭 triton flash attention。

  • 理想情况下,PyTorch 的 ROCm 版本应与 ROCm 驱动程序版本匹配。

提示

对于 MI300x(gfx942) 用户,为了实现最佳性能,请参考 MI300x 调优指南 以获取系统和工作流级别的性能优化和调优建议。对于 vLLM,请参考 vLLM 性能优化

### 大规模语言模型 (VLLM) 推理优化中的 AMD GPU 实现 大规模语言模型(Very Large Language Models, VLLM)的推理过程涉及大量的矩阵运算和并行处理需求,这使得高性能计算设备成为其核心依赖之一。AMD 的 GPU 架构因其强大的并行计算能力和高效的内存管理机制,在这种场景下具有显著优势。 #### 1. **ROCm 平台的支持** AMD 提供了一个名为 ROCm 的开源异构计算平台,用于加速科学计算、机器学习和其他高性能计算任务。通过 ROCm,开发人员能够充分利用 AMD GPU 的硬件特性来执行复杂的深度学习工作负载[^1]。具体来说,ROCm 支持多种主流框架(如 PyTorch 和 TensorFlow),这些框架可以直接利用 AMD GPU 进行训练和推理操作。 对于 VLLM 来说,ROCm 不仅提供了基础的 CUDA 替代方案,还针对大模型的特点进行了专门优化。例如,它可以通过改进显存分配策略减少延迟,并提升多线程环境下的吞吐量性能。 #### 2. **QEMU 中的测试与驱动卸载** 在实际部署过程中,可能需要借助虚拟化工具 QEMU 对 GPU 功能进行验证。在这种情况下,可以编写相应的 testcase 测试 DMA 数据传输等功能模块;完成调试后,则可通过标准流程安全地卸载 VF 驱动程序以释放资源[^2]。这一环节有助于确保生产环境中系统的稳定性以及兼容性。 #### 3. **跨代架构适配性** 值得注意的是,尽管不同代次的 NVIDIA GPU 往往对应特定版本的 CUDA 软件栈,但 AMD 方面采取了更加灵活的设计理念——即允许单个 MIOpen 库覆盖多个硬件世代的需求[^3]。这意味着即便面对未来可能出现的新款 RDNA 系列处理器,现有基于 ROCm 开发的大规模语言模型仍能无缝迁移而无需大幅修改底层代码逻辑。 此外,随着 AI 社区持续探索更先进的算法和技术手段,预计后续还会涌现出更多专为 AMD 生态定制的功能扩展包和服务组件,进一步巩固其市场竞争力地位。 ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM device = 'cuda' if torch.cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("bigscience/bloom") model = AutoModelForCausalLM.from_pretrained("bigscience/bloom").to(device) def generate_text(prompt): inputs = tokenizer.encode(prompt, return_tensors="pt").to(device) outputs = model.generate(inputs, max_length=50) result = tokenizer.decode(outputs[0], skip_special_tokens=True) return result print(generate_text("Explain the role of AMD GPUs in large language models")) ``` 上述脚本展示了如何加载预训练好的大型因果语言模型并通过指定设备参数将其迁移到支持 ROCm 的 AMD 显卡上运行的一个简单例子。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值