跳到正文
原文
Hugging Face:Blog(RSS)·· 2023-12-05精选AI 评分67

Hugging Face 发布 Optimum-NVIDIA,一行代码实现最高 28x 推理加速

Optimum-NVIDIA Unlocking blazingly fast LLM inference in just 1 line of code

AI 导读

Hugging Face 发布 Optimum-NVIDIA 推理库,基于 NVIDIA TensorRT-LLM 和 FP8 量化,只需修改一行代码即可在 NVIDIA 平台上将 LLaMA 推理吞吐提升至最高 28x、达到 1200 tokens/秒,First Token Latency 最高提升 3.3x。

推荐理由

官方给出单行代码切换方式与延迟、吞吐实测数据,读者可据此评估是否迁移现有 transformers 推理流程。

正文 · AI 翻译

大型语言模型(LLMs)已经彻底改变了自然语言处理领域,并越来越多地被部署来解决大规模复杂问题。然而,由于这些模型独特且巨大的计算需求,实现最佳性能是出了名的挑战。对于寻求流畅响应体验的最终用户,以及对于提高吞吐量意味着节省成本的规模化部署而言,LLMs 的优化性能极具价值。

这就是 Optimum-NVIDIA 推理库发挥作用的地方。Optimum-NVIDIA 可在 Hugging Face 上获取,通过极其简单的 API 显著加速了 NVIDIA 平台上的 LLM 推理。 只需更改一行代码,您就能在 NVIDIA 平台上解锁高达28 倍的推理速度和每秒 1,200 个令牌的处理能力。

Optimum-NVIDIA 是首个受益于 NVIDIA Ada Lovelace 和 Hopper 架构支持的新 float8 格式的 Hugging Face 推理库。 FP8 结合 NVIDIA TensorRT-LLM 软件的高级编译能力,极大地加速了 LLM 推理。

如何运行

只需使用 Optimum-NVIDIA 的管道,您就可以用短短 3 行代码开始以惊人的推理速度运行 LLaMA。 如果您已经设置了 Hugging Face transformers 库的管道来运行 LLaMA,只需修改一行代码即可解锁巅峰性能!

- from transformers.pipelines import pipeline
+ from optimum.nvidia.pipelines import pipeline

# everything else is the same as in transformers!
pipe = pipeline('text-generation', 'meta-llama/Llama-2-7b-chat-hf', use_fp8=True)
pipe("Describe a real-world application of AI in sustainable energy.")

您还可以通过一个标志启用 FP8 量化,这使您能够在单个 GPU 上以更快的速度运行更大的模型,而不会牺牲准确性。 此示例中显示的标志默认使用预定义的校准策略,不过您可以提供自己的校准数据集和自定义分词,以根据您的使用场景定制量化。

管道接口非常适合快速上手,但希望对采样参数进行细粒度控制的高级用户可以使用模型 API。

- from transformers import AutoModelForCausalLM
+ from optimum.nvidia import AutoModelForCausalLM
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-13b-chat-hf", padding_side="left")

model = AutoModelForCausalLM.from_pretrained(
  "meta-llama/Llama-2-13b-chat-hf",
+ use_fp8=True,  
)

model_inputs = tokenizer(
    ["How is autonomous vehicle technology transforming the future of transportation and urban planning?"], 
    return_tensors="pt"
).to("cuda")

generated_ids, generated_length = model.generate(
    **model_inputs, 
    top_k=40, 
    top_p=0.7, 
    repetition_penalty=10,
)

tokenizer.batch_decode(generated_ids[0], skip_special_tokens=True)

如需更多详细信息,请查看我们的文档

性能评估

在评估 LLM 的性能时,我们考虑两个指标:首令牌延迟和吞吐量。 首令牌延迟(也称为首令牌时间或预填充延迟)衡量从输入提示到开始接收输出所需的时间,因此这个指标可以告诉您模型的响应感觉如何。 与标准 transformers 相比,Optimum-NVIDIA 的首令牌延迟最高可快 3.3 倍:

图 1. 生成首个令牌所需时间(毫秒)

另一方面,吞吐量衡量模型生成令牌的速度,在您希望批量生成时尤为重要。 虽然计算吞吐量的方法有几种,但我们采用了一种标准方法,即将端到端延迟除以总序列长度,包括所有批次中输入和输出令牌的总和。 与标准 transformers 相比,Optimum-NVIDIA 的吞吐量最高可提升 28 倍:

图 2. 吞吐量(令牌/秒)

对最近发布的 NVIDIA H200 Tensor Core GPU 的初步评估显示,与 NVIDIA H100 Tensor Core GPU 相比,LLaMA 模型的吞吐量最高可再提升 2 倍。 随着 H200 GPU 变得更加普及,我们将分享 Optimum-NVIDIA 在其上运行的性能数据。

后续步骤

Optimum-NVIDIA 目前为 LLaMAForCausalLM 架构和任务提供峰值性能,因此任何 基于 LLaMA 的模型,包括微调版本,今天都应该可以直接与 Optimum-NVIDIA 配合使用。 我们正在积极扩展支持,以涵盖其他文本生成模型架构和任务,所有这些都在 Hugging Face 内完成。

我们继续突破性能边界,并计划纳入前沿优化技术,如 In-Flight Batching 以提高流式提示时的吞吐量,以及 INT4 量化以在单个 GPU 上运行更大的模型。

试一试:我们发布了 Optimum-NVIDIA 仓库,其中包含如何开始的说明。请与我们分享您的反馈!🤗

来源:Hugging Face:Blog(RSS) · huggingface.co