AMD + 🤗:AMD GPU 的大规模语言模型即插即用加速

AMD + 🤗:加速 AMD GPU 的即插即用大规模语言模型

今年年初,AMD和Hugging Face宣布合作伙伴关系,在AMD的AI日活动上加速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, AutoModelForCausalLMimport torchmodel_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(["今天我在巴黎"], 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模型和任务。而且,我们的合作不会止步于此,我们还将探索对扩散器模型以及其他库和其他AMD GPU的开箱即用支持。

实现这一里程碑是我们团队和公司之间的重要努力和合作。为了保持对Hugging Face社区的支持和性能,我们在我们的数据中心内构建了对AMD Instinct GPU的Hugging Face开源库的集成测试,并能够通过与Verne Global合作,在冰岛部署AMD Instinct服务器,以尽量减少这些新工作负载的碳影响。

除了本地支持,我们合作的另一个重要方面是提供对AMD GPU上最新创新和功能的集成。通过Hugging Face团队、AMD工程师和开源社区成员的合作,我们很高兴宣布对以下内容的支持:

我们非常兴奋地将这些最先进的加速工具提供给Hugging Face用户,并在我们的新的连续集成和开发流水线中直接集成,以实现AMD Instinct GPU的维护支持和性能。

一张配备128GB高带宽内存的AMD Instinct MI250 GPU具有两个独立的ROCm设备(GPU 0和1),每个设备都有64GB高带宽内存。

通过`rocm-smi`显示的MI250两个设备

这意味着仅通过一张MI250 GPU卡,我们就可以得到两个PyTorch设备,可以非常容易地使用张量和数据并行来实现更高的吞吐量和更低的延迟。

在接下来的博客文章中,我们将报告在通过大型语言模型进行文本生成期间涉及的两个步骤的性能结果:

  • 预填充延迟:模型计算提供的输入或提示的表示所需的时间(也称为“首个标记时间”)。
  • 逐令牌解码延迟:在预填充步骤之后以自回归方式生成每个新标记所需的时间。
  • 解码吞吐量:在解码阶段每秒生成的标记数。

使用optimum-benchmark和在MI250和A100 GPU上运行推理基准,我们得到以下结果:

使用Transformers和PEFT库的推理基准。FA2代表“Flash Attention 2”,TP代表“Tensor Parallelism”,DDP代表“Distributed Data Parallel”

从上面的图表中,我们可以看到MI250的性能如何,特别适用于生产环境中批量处理请求的设置,与A100卡相比,可以提供超过2.33倍的标记数(解码吞吐量)并且耗时减少一半(预填充延迟)。

如下所示运行训练基准,一个MI250卡可以容纳更大批量的训练样本,并获得更高的训练吞吐量。

使用Transformers库进行训练基准,使用能适应给定卡片的最大批量大小(2的幂次)

生产解决方案

我们合作的另一个重要焦点是为Hugging Face生产解决方案构建支持,首先从文本生成推理(TGI)开始。TGI提供了一种部署大型语言模型进行规模化推理的端到端解决方案。

最初,TGI主要针对Nvidia GPU进行了优化,利用了针对Ampere架构的最新优化,如Flash Attention v1和v2、GPTQ权重量化和分页注意力。

今天,我们很高兴地宣布支持AMD Instinct MI210和MI250 GPU的TGI的初始版本,利用了上述所有出色的开源工作,集成在一个完整的端到端解决方案中,随时可供部署。

在性能方面,我们花了很多时间在AMD Instinct GPU上进行文本生成推理性能基准测试,以验证和发现我们应该重点优化的地方。因此,在AMD GPU工程师的支持下,我们已经能够与TGI已经提供的性能进行匹配。

在这种背景下,并且考虑到AMD和Hugging Face之间正在建立的长期合作关系,我们一直在整合和测试AMD GeMM Tuner工具,该工具允许我们调整TGI中使用的GeMM(矩阵乘法)内核,以找到增加性能的最佳设置。GeMM Tuner工具预计将在即将发布的PyTorch版本中发布,使每个人都能从中受益。

在上述的情况下,我们非常高兴展示第一批展示最新AMD技术的性能数据,将Llama模型系列中的文本生成推断置于高效推断解决方案的前沿,采用AMD GPU。

Llama 34B的TGI延迟结果,将一个AMD Instinct MI250与A100-SXM4-80GB进行比较。如上所述,一个MI250对应两个PyTorch设备。
Llama 70B的TGI延迟结果,将两个AMD Instinct MI250与两个A100-SXM4-80GB(使用张量并行性)进行比较。

A100缺少的柱状图对应内存错误,因为Llama 70B的浮点数16位权重为138 GB,中间激活、KV缓存缓冲区(对于2048序列长度、批量大小为8,需要>5GB),CUDA上下文等都需要足够的可用内存。Instinct MI250 GPU具有128GB全局内存,而A100仅有80GB,这解释了在MI250上可以运行更大的工作负载(更长的序列,更大的批量)的能力。

文本生成推断已经可以在AMD Instinct GPU上通过Docker镜像ghcr.io/huggingface/text-generation-inference:1.2-rocm部署为生产环境。请确保参考与支持及其限制有关的文档

下一步是什么?

我们希望这篇博客文章能像Hugging Face公司那样让您感到兴奋,对与AMD的合作充满期待。当然,这只是我们旅程的开始,我们期待在更多AMD硬件上实现更多的用例。

在接下来的几个月里,我们将努力为AMD Radeon GPU提供更多支持和验证,这些GPU同样可以放在您自己的台式机上进行本地使用,降低了使用门槛,为用户提供更多的灵活性。

当然,我们很快将致力于MI300系列的性能优化,确保开源和解决方案都能够提供最新的创新以及我们在Hugging Face始终追求的最高稳定性水平。

我们关注的另一个领域是AMD Ryzen AI技术,为最新一代AMD笔记本电脑CPU提供动力,使其能够在边缘设备上运行人工智能。在编码助手、图像生成工具和个人助理越来越广泛可用的时代,提供能够满足隐私需求、发挥这些强大工具作用的解决方案非常重要。在这个背景下,Ryzen AI兼容模型已经可以在Hugging Face Hub上获得,并且我们将与AMD紧密合作,在接下来的几个月中推出更多的模型。