大数跨境
0
0

L20上仅需一行代码,解锁28倍推理速度

L20上仅需一行代码,解锁28倍推理速度 紫光数码企业解决方案
2024-06-06
2

Optimum-NVIDIA 推理库


大型语言模型(LLMs)已经彻底改变了自然语言处理,并且其应用范围日益广泛。然而,由于这些模型对计算资源的强烈需求,实现其最佳性能对于所有 GPU 用户而言都是一项挑战。对于最终用户而言,优化 LLMs 的推理性能至关重要,因为这能提供快速且响应迅速的用户体验;对于大规模部署来说,提升的吞吐量则意味着显著的成本节约。


Optimum-NVIDIA 由 Hugging Face 提供,通过一个极其简单的 API 显著加速 NVIDIA 平台上的 LLM 推理。只需更改一行代码,即可实现高达 28 倍的推理速度提升,并达到每秒处理 1,200 个 token 的能力。


NVIDIA L20规格参数





01

主要优势


新 float8 格式支持:

Optimum-NVIDIA 是第一个受益于 NVIDIA Ada Lovelace 和 Hopper 架构支持的新 float8 格式的 Hugging Face 推理库。FP8 再加上 NVIDIA TensorRT-LLM 软件的高级编译功能,可显著加速 LLM 推理。


FP8 量化:

您还可以使用单个标志启用 FP8 量化,这使您可以在单个 GPU 上以更快的速度运行更大的模型,而不会牺牲准确性。


性能评估:

评估 LLM 性能主要围绕两个关键指标:第一个令牌延迟和吞吐量。与标准 Transformer 模型相比,Optimum-NVIDIA 的第一个令牌延迟速度提高了 3.3 倍,从而设定了新的基准,确保了更灵敏的用户体验。


未来优化:

未来的迭代将引入突破性的优化技术,例如 In-Flight Batching,以简化流提示和 INT4 量化的吞吐量,从而能够在单个 GPU 上执行更大的模型。





02

如何运行


您可以通过 Optimum-NVIDIA 的 pipeline 函数仅用三行代码即可开始运行 LLaMA,并享受超快的推理速度。如果您已经使用 Hugging Face 的 transformers 库设置了一个用于运行 LLaMA 的 pipeline 函数,只需修改一行代码即可解锁最佳性能!


- from transformers.pipelines import pipeline+ from optimum.nvidia.pipelines import pipeline
# 其他部分与 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 上以更快的速度运行更大的模型,而不会牺牲准确性。本示例中显示的标志默认使用预定义的校准策略,您也可以提供自己的验证数据集和自定义的分词方式,以根据您的用例量身定制量化过程。


pipeline 函数接口非常适合快速启动和运行,但对于那些希望精细控制采样参数的高级用户,可以使用 Model API。


- from transformers import AutoModelForCausalLM+ from optimum.nvidia import AutoModelForCausalLMfrom transformers import AutoTokenizer
# 从预训练模型中加载分词器,并设置填充方向为左侧tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-13b-chat-hf", padding_side="left")
# 从预训练模型中加载因果语言模型,并启用 FP8 量化model = AutoModelForCausalLM.from_pretrained(  "meta-llama/Llama-2-13b-chat-hf",+ use_fp8=True,  )
# 对输入文本进行分词,并返回 PyTorch tensors,且将其移动到 GPU 上model_inputs = tokenizer(    ["How is autonomous vehicle technology transforming the future of transportation and urban planning?"],    return_tensors="pt").to("cuda")
# 生成文本,设置 top_k、top_p 和重复惩罚参数generated_ids, generated_length = model.generate(    **model_inputs,    top_k=40,    top_p=0.7,    repetition_penalty=10,)
# 解码生成的 token,跳过特殊 tokentokenizer.batch_decode(generated_ids[0], skip_special_tokens=True)





03

性能评估


在评估大型语言模型(LLM)的性能时,我们考虑两个指标:首个 Token 延迟和吞吐量。首个 Token 延迟测量从输入提示到开始接收输出所需的时间,因此此指标可以告诉您模型的响应速度。与原始 transformers 相比,Optimum-NVIDIA 提供高达 3.3 倍的首个 Token 延迟加速:


图1. 生成第一个 Token 所需的时间(毫秒)


另一方面,吞吐量测量模型生成 token 的速度,特别是当您希望将生成任务批处理在一起时。尽管有几种计算吞吐量的方法,我们采用了一种标准方法,即将端到端延迟除以总序列长度,包括所有批次中的输入和输出 token 之和。与原始 transformers 相比,Optimum-NVIDIA 提供高达 28 倍的吞吐量提升:


图2. 吞吐量对比(每秒生成的 token 数量)



如果需要了解更多详情,请点击下方 “阅读原文” 按钮了解更多。


欢迎扫码关注,

获取更多精彩资讯!

【声明】内容源于网络
0
0
紫光数码企业解决方案
第一时间获取紫光数码企业级解决方案、成功案例介绍,报名市场活动。
内容 283
粉丝 0
紫光数码企业解决方案 第一时间获取紫光数码企业级解决方案、成功案例介绍,报名市场活动。
总阅读137
粉丝0
内容283