text-generation-inference 文档

使用 TGI 与 AMD GPU

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始

使用 TGI 与 AMD GPU

TGI 在 AMD Instinct MI210MI250MI300 GPU 上受支持并经过测试。未来可能会扩展支持范围。推荐通过 Docker 使用。请务必查看 AMD 文档,了解如何在 AMD GPU 上使用 Docker。

在由 AMD GPU 驱动的服务器上,可以使用以下命令启动 TGI

model=teknium/OpenHermes-2.5-Mistral-7B
volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run

docker run --rm -it --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
    --device=/dev/kfd --device=/dev/dri --group-add video \
    --ipc=host --shm-size 256g --net host -v $volume:/data \
    ghcr.io/huggingface/text-generation-inference:3.2.2-rocm \
    --model-id $model

启动的 TGI 服务器随后可以从客户端查询,请务必查看“使用 TGI”指南。

TunableOp

TGI 的 AMD GPU Docker 镜像集成了 PyTorch 的 TunableOp,这允许进行额外的预热,以从 rocBLAS 或 hipBLASLt 中选择性能最佳的矩阵乘法 (GEMM) 内核。

在 MI300X 上的实验中,我们注意到在 ROCm 6.1 和 PyTorch 2.3 之上使用 TunableOp 时,延迟提高了 6-8%。

TunableOp 默认启用,预热可能需要 1-2 分钟。如果您想禁用 TunableOp,请在启动 TGI 的 Docker 容器时传递 --env PYTORCH_TUNABLEOP_ENABLED="0"

Flash attention 实现

ROCm 有两种 Flash Attention 实现,第一种是基于 Composable Kernel (CK) 实现的 ROCm/flash-attention,第二种是 Triton 实现

默认情况下,使用 Composable Kernel 实现。但是,Triton 实现在 MI250 和 MI300 上具有稍低的延迟,但需要预热,这可能会成为问题,因为它需要为每个新的提示长度再次执行。如果需要,可以使用 --env ROCM_USE_FLASH_ATTN_V2_TRITON="0" 在启动 TGI 的 Docker 容器时启用 FA Triton 实现。

自定义 PagedAttention

为了在 ROCm 上获得更好的性能,提供了一个自定义的 Paged Attention 内核,默认情况下已启用。要禁用它并回退到 PagedAttention v2 内核,请设置环境变量 ROCM_USE_CUSTOM_PAGED_ATTN=0

自定义内核支持 bf16 和 fp16 数据类型、16 的块大小、128 的头大小、16k 的最大上下文长度以及 1 到 16 之间的 GQA 比率。对于其他配置,我们使用 PagedAttention v2 内核。

不支持的功能

以下功能目前在 ROCm 版本的 TGI 中不受支持,未来可能会扩展支持范围

  • 加载 AWQ 检查点。
  • 用于滑动窗口注意力 (Mistral) 的内核
< > 在 GitHub 上更新