本文原文:https://huggingface.co/blog/huggingface-and-optimum-amd
在今年早些时候,AMD 和 Hugging Face 在 AMD 的 AI Day 活动上宣布了一项合作,旨在加速 AI 模型。我们一直在努力将这一愿景变为现实,并确保 Hugging Face 社区能够在 AMD 硬件上以最佳性能运行最新的 AI 模型。
AMD 正在为一些全球最强大的超级计算机提供动力,包括欧洲最快的 LUMI,该计算机搭载了超过 10,000 个 MI250X AMD GPU。在这个活动上,AMD 展示了他们最新一代的服务器 GPU,即 AMD Instinct™ MI300 系列加速器,即将正式推出。
在本博客文章中,我们将更新我们在为 AMD GPU 提供出色的开箱即用支持以及改进最新服务器级 AMD Instinct GPU 的互操作性方面的进展。
你能在下面的代码更改中找到 AMD 特定的代码吗?别伤到你的眼睛,与在 NVIDIA GPU 上运行相比,这里没有任何变化 🤗。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "01-ai/Yi-6B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
with torch.device("cuda"):
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16)
inp = tokenizer(["Today I am in Paris and"], padding=True, return_tensors="pt").to("cuda")
res = model.generate(**inp, max_new_tokens=30)
print(tokenizer.batch_decode(res))
我们一直在努力的一个重要方面是能够在不进行任何代码更改的情况下运行 Hugging Face Transformers 模型。我们现在支持在 AMD Instinct GPU 上运行所有 Transformers 模型和任务。而且,我们的合作并不止于此,我们还在探索为 diffusers 模型和其他库以及其他 AMD GPU 提供开箱即用的支持。
实现这一里程碑是我们团队和公司之间的重要努力和合作。为了保持对 Hugging Face 社区的支持和性能,我们在我们的数据中心内构建了对 AMD Instinct GPU 上的 Hugging Face 开源库的集成测试,并通过与 Verne Global 合作在冰岛部署 AMD Instinct 服务器的方式,成功地减小了这些新工作负载的碳足迹。
除了本地支持之外,我们合作的另一个重要方面是为 AMD GPU 上可用的最新创新和功能提供集成支持。通过 Hugging Face 团队、AMD 工程师和开源社区成员的合作,我们很高兴宣布支持以下内容:
我们非常激动地将这些最先进的加速工具提供给 Hugging Face 用户,并通过在我们的新连续集成和开发流水线中直接集成,为 AMD Instinct GPU 提供持续的支持和性能。
一个拥有 128 GB 高带宽内存的 AMD Instinct MI250 GPU 具有两个独立的 ROCm 设备(GPU 0 和 1),每个设备都有 64 GB 高带宽内存。
MI250 两个设备如 `rocm-smi` 所示
这意味着仅使用一个 MI250 GPU 卡,我们就有两个 PyTorch 设备,可以非常轻松地使用张量和数据并行ism来实现更高的吞吐量和更低的延迟。
在博客的其余部分,我们报告了通过大型语言模型进行文本生成的两个步骤的性能结果:
使用 optimum-benchmark 并在 MI250 和 A100 GPU 上运行推理基准测试,我们获得了以下结果:
使用 Transformers 和 PEFT 库的推理基准测试。FA2 代表 "Flash Attention 2",TP 代表 "Tensor Parallelism",DDP 代表 "Distributed Data Parallel"。
在上面的图表中,我们可以看到 MI250 在生产设置中的性能表现,其中请求是以大批处理的方式进行处理,生成的标记数量(解码吞吐量)超过 A100 卡的 2.33 倍,并且首个标记的时间(prefill 延迟)只有 A100 的一半。
在下面的训练基准测试中,使用 Transformers 库,在给定卡上可以容纳的最大批次大小(
2 的幂),MI250 卡可以容纳更大的训练样本批次,并实现更高的训练吞吐量。
使用 Transformers 库在最大批次大小(2 的幂)下的训练基准测试
我们合作的另一个重要焦点是构建对 Hugging Face 生产解决方案的支持,首先是 Text Generation 推理(TGI)。TGI 提供了一个端到端的解决方案,可在规模上部署大型语言模型进行推理。
最初,TGI 主要面向 Nvidia GPU,利用了最近为 Ampere 架构进行的大多数优化,如 Flash Attention v1 和 v2、GPTQ 权重量化和 Paged Attention。
如今,我们很高兴地宣布 TGI 对 AMD Instinct MI210 和 MI250 GPU 的初步支持,利用了以上详细介绍的所有出色的开源工作,集成在一个完整的端到端解决方案中,已准备好投入使用。
在性能方面,我们花费了大量时间在 AMD Instinct GPU 上对 Text Generation 推理进行基准测试,以验证和发现我们应该重点优化的地方。因此,在与 AMD GPU 工程师的支持下,我们已经能够达到与 TGI 已经提供的性能相匹配的水平。
在这个背景下,以及在我们与 AMD 之间正在建立的长期合作关系中,我们一直在集成并测试 AMD GeMM Tuner 工具,该工具允许我们调整 TGI 中使用的 GeMM(矩阵乘法)内核,以找到朝着增加性能的最佳设置。GeMM Tuner 工具预计将作为 PyTorch 的一部分在即将发布的版本中发布,以使每个人都能从中受益。
通过上述所有内容,我们很激动地展示了最新的 AMD 技术的首个性能数字,将 Text Generation 推理在 AMD GPU 上置于 Llama 模型系列的高效推理解决方案的前沿。
Llama 34B 的 TGI 延迟结果,将一个 AMD Instinct MI250 与 A100-SXM4-80GB 进行比较。如上所述,一个 MI250 对应于两个 PyTorch 设备。
Llama 70B 的 TGI 延迟结果,将两个 AMD Instinct MI250 与两个 A100-SXM4-80GB 进行比较(使用张量并行ism)
A100 上的缺失条代表内存错误,因为 Llama 70B 在 float16 中的权重为 138 GB,而对于中间激活、KV 缓存缓冲区(对于 2048 序列长度、批次大小 8,需要 >5GB)、CUDA 上下文等,需要足够的空闲内存。Instinct MI250 GPU 具有 128 GB 全局内存,而 A100 具有 80GB,这解释了为什么可以在 MI250 上运行更大的工作负载(更长的序列、更大的批次)。
Text Generation 推理已经准备好通过 docker 镜像 ghcr.io/huggingface/text-generation-inference:1.2-rocm 在 AMD Instinct GPU 上投入生产。请确保查阅有关支持及其限制的文档。
我们希望这篇博客文章让您像我们在 Hugging Face 那样对与 AMD 的合作感到兴奋。当然,这只是我们旅程的开始,我们期待在更多 AMD 硬件上启用更多用例。
在接下来的几个月中,我们将努力为 AMD Radeon GPU 提供更多支持和验证,这些 GPU 是您可以放置在自己桌面上进行本地使用的相同 GPU,降低了可访问性障碍,为我们的用户提供更多的多功能性。
当然,我们很快将致力于 MI300 系列的性能优化,确保开源和解决方案都提供最新创新并在 Hugging Face 始终追求的最高稳定性水平。
我们的另一个关注领域将是围绕 AMD Ryzen AI 技术展开,该技术为最新一代 AMD 笔记本 CPU 提供动力,允许在设备上边缘运行 AI。在编码助手、图像生成工具和个人助手变得越来越广泛可用的时代,提供能够满足隐私需求的解决方案非常重要,以利用这些强大的工具。在这个背景下,Ryzen AI 兼容模型已经在 Hugging Face Hub 上提供,并且我们正在与 AMD 密切合作,在接下来的几个月内提供更多这样的模型。
扫码关注w3ctech微信公众号
共收到0条回复