Llama 3 CPU推理优化指南

news2024/11/25 9:25:09

备受期待的 Meta 第三代 Llama 现已发布,我想确保你知道如何以最佳方式部署这种最先进的 (SoTA) LLM。在本教程中,我们将重点介绍如何执行仅权重量化 (WOQ) 来压缩 8B 参数模型并改善推理延迟,但首先,让我们讨论一下 Meta Llama 3。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、Llama 3

到目前为止,Llama 3 系列包括从 8B 到 70B 参数的模型,未来还会有更多版本。这些模型附带宽松的 Meta Llama 3 许可证,建议你在接受使用它们所需的条款之前先查看一下。这标志着 Llama 模型系列和开源 AI 的一个激动人心的篇章。

1.1 架构

Llama 3 是一个基于仅解码器transformer的自回归 LLM。与 Llama 2 相比,Meta 团队做出了以下显著改进:

  • 采用分组查询注意 (GQA),提高了推理效率。
  • 优化的标记器,词汇量为 128K 个标记,旨在更有效地编码语言。
  • 在 15 万亿个标记数据集上进行训练,这比 Llama 2 的训练数据集大 7 倍,代码量多 4 倍。

下图(图 1)是 print(model) 的结果,其中 model 是 meta-llama/Meta-Llama-3–8B-Instruct。在此图中,我们可以看到该模型包含 32 个由 Llama Attention 自注意力组件组成的 LlamaDecoderLayers。此外,它还有 LlamaMLP、LlamaRMSNorm 和 Linear head。我们希望在 Llama 3 研究论文发布后了解更多信息。

图 1. `print(model)` 的输出展示了 llama-3-8B-instruct 架构中各层的分布

1.2 语言建模性能

该模型在各种行业标准语言建模基准上进行了评估,例如 MMLU、GPQA、HumanEval、GSM-8K、MATH 等。为了本教程的目的,我们将回顾“指令调整模型”的性能(图 2)。这些数字中最引人注目的是,Llama 3 8B 参数模型在报告的基准测试中比 Llama 2 70B 的性能高出 62% 到 143%,同时模型体积小 88%!

图 2. Llama 3 指令模型在 MMLU、GPQA、HumanEval、GSM-8K 和 MATH LLM 基准测试中的性能指标摘要

最新一代 Llama 所包含的语言建模性能提升、许可宽松和架构效率标志着生成式 AI 领域一个激动人心的篇章的开始。让我们来探索如何优化 CPU 上的推理,以实现可扩展、低延迟的 Llama 3 部署。

2、使用 PyTorch 优化 Llama 3 推理

在上一篇文章中,我介绍了模型压缩和整体推理优化在开发基于 LLM 的应用程序中的重要性。在本教程中,我们将重点介绍将仅权重量化 (WOQ) 应用于 meta-llama/Meta-Llama-3–8B-Instruct。WOQ 在性能、延迟和准确性之间实现了平衡,并可选择量化为 int4 或 int8。WOQ 的一个关键组成部分是反量化步骤,它在计算之前将 int4/in8 权重转换回 bf16。

图 3. 仅权重量化的简单说明,橙色表示预量化权重,绿色表示量化权重。请注意,这描述了计算步骤中初始量化为 int4/int8 和反量化为 fp16/bf16

2.1 环境设置

你需要大约 60GB 的 RAM 才能在 Llama-3-8B-Instruct 上执行 WOQ。其中包括约 30GB 用于加载完整模型和约 30GB 用于量化期间的峰值内存。WOQ Llama 3 仅消耗约 10GB 的 RAM,这意味着我们可以通过从内存中释放完整模型来释放约 50GB 的 RAM。

你可以在  Intel® Tiber® 开发人员云免费 JupyterLab* 环境上运行本教程。该环境提供具有 224 个线程和 504 GB 内存的第四代 Intel® Xeon® CPU,足以运行此代码。

如果在自己的 IDE 中运行此程序,你可能需要解决其他依赖项,例如安装 Jupyter 和/或配置 conda/python 环境。在开始之前,请确保你已安装以下依赖项。

intel-extension-for-pytorch==2.2
transformers==4.35.2
torch==2.2.0
huggingface_hub

2.2 访问和配置 Llama 3

你需要一个 Hugging Face* 帐户才能访问 Llama 3 的模型和标记器。

为此,请从设置菜单中选择“访问令牌”(图 4)并创建一个令牌。

图 4. Hugging Face 令牌配置控制台的快照

复制你的访问令牌并将其粘贴到运行以下代码后在 Jupyter 单元内生成的“令牌”字段中。

from huggingface_hub import notebook_login, Repository

# Login to Hugging Face
notebook_login()

请访问 meta-llama/Meta-Llama-3–8B-Instruct,在提供你的信息并提交 Llama 3 访问请求之前,仔细评估条款和许可。接受模型的条款并提供你的信息完全由你自己决定。

2.3 使用 WOQ 量化 Llama-3–8B-Instruct

我们将利用英特尔® PyTorch* 扩展将 WOQ 应用于 Llama 3。此扩展包含针对英特尔硬件的最新 PyTorch 优化。按照以下步骤使用优化的 Llama 3 模型进行量化和推理:

  • Llama 3 模型和标记器

导入所需的软件包并使用AutoModelForCausalLM.from_pretrained() 和 AutoTokenizer.from_pretrained() 方法加载 Llama-3–8B-Instruct 特定的权重和标记器。

import torch
import intel_extension_for_pytorch as ipex
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer

Model = 'meta-llama/Meta-Llama-3-8B-Instruct'

model = AutoModelForCausalLM.from_pretrained(Model)
tokenizer = AutoTokenizer.from_pretrained(Model)
  • 量化配方配置

配置 WOQ 量化配方。我们可以将 weight_dtype 变量设置为所需的内存数据类型,分别为 int4 和 in8 选择 torch.quint4x2 或 torch.qint8。此外,我们可以使用 lowp_model 来定义反量化精度。

目前,我们将其保留为 ipex.quantization.WoqLowpMode.None,以保持默认的 bf16 计算精度。

qconfig = ipex.quantization.get_weight_only_quant_qconfig_mapping(
  weight_dtype=torch.quint4x2, # or torch.qint8
  lowp_mode=ipex.quantization.WoqLowpMode.NONE, # or FP16, BF16, INT8
)
checkpoint = None # optionally load int4 or int8 checkpoint

# PART 3: Model optimization and quantization
model_ipex = ipex.llm.optimize(model, quantization_config=qconfig, low_precision_checkpoint=checkpoint)

del model 

我们使用 ipex.llm.optimize() 应用 WOQ,然后使用 del model 从内存中删除完整模型并释放约 30GB 的 RAM。

  • 提示 Llama 3

与 LLama 2 一样,Llama 3 为其指令调整模型提供了预定义的提示模板。使用此模板,开发人员可以定义特定的模型行为指令并提供用户提示和对话历史记录。

system= """\n\n You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. If you don't know the answer to a question, please don't share false information."""
user= "\n\n You are an expert in astronomy. Can you tell me 5 fun facts about the universe?"
model_answer_1 = 'None'

llama_prompt_tempate = f"""
<|begin_of_text|>\n<|start_header_id|>system<|end_header_id|>{system}
<|eot_id|>\n<|start_header_id|>user<|end_header_id|>{user}
<|eot_id|>\n<|start_header_id|>assistant<|end_header_id|>{model_answer_1}<|eot_id|>
"""

inputs = tokenizer(llama_prompt_tempate, return_tensors="pt").input_ids

我们提供所需的字段,然后使用 tokenizer 将整个模板转换为模型的 token。

  • Llama 3 推理

对于文本生成,我们利用 TextStreamer 生成实时推理流,而不是一次打印整个输出。这为读者带来了更自然的文本生成体验。我们为 model_ipex.generate() 和其他文本生成参数提供了配置的流式处理程序。

streamer = TextStreamer(tokenizer,skip_prompt=True)

with torch.inference_mode():
    tokens = model_ipex.generate(
        inputs,
        streamer=streamer,
        pad_token_id=128001,
        eos_token_id=128001,
        max_new_tokens=300,
        repetition_penalty=1.5,
)

运行此代码后,模型将开始生成输出。请记住,这些是未经过滤且不受保护的输出。对于实际用例,你需要进行额外的后处理考虑。

图 5. 在英特尔 Tiber 开发者云的 JupyterLab 环境上运行的 Llama-3–8B-Instruct 在 int4 上使用 WOQ 模式压缩进行流式推理

3、部署注意事项

根据你的推理服务部署策略,需要考虑以下几点:

  • 如果在容器中部署 Llama 3 实例,WOQ 将提供较小的内存占用,并允许你在单个硬件节点上提供模型的多个推理服务。
  • 部署多个推理服务时,你应该优化为每个服务实例保留的线程和内存。留出足够的额外内存(~4 GB)和线程(~4 个线程)来处理后台进程。
  • 考虑保存模型的 WOQ 版本并将其存储在模型注册表中,从而无需在每个实例部署时重新量化模型。

4、结束语

Meta 的 Llama 3 LLM 系列与前几代产品相比有了显著的改进,具有多种配置(更多配置即将推出)。在本教程中,我们探索了使用仅权重量化 (WOQ) 增强 CPU 推理,这是一种减少延迟且对准确性影响最小的技术。

通过将新一代面向性能的 Llama 3 LLM 与 WOQ 等优化技术相结合,开发人员可以为 GenAI 应用程序解锁新的可能性。这种组合简化了硬件要求,以实现集成到新系统和现有系统中的 LLM 的高保真度、低延迟结果。

接下来要尝试的一些令人兴奋的事情是:

  • 尝试量化级别:你应该测试 int4 和 int8 量化,以确定特定应用程序的性能和准确性之间的最佳折衷。
  • 性能监控:在不同的现实场景中持续评估 Llama 3 模型的性能和准确性至关重要,以确保量化保持所需的有效性。
  • 测试更多 Llamas:探索整个 Llama 3 系列并评估 WOQ 和其他 PyTorch 量化配方的影响。

原文链接:Llama 3 CPU推理指南 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贴片反射式红外光电传感器ITR8307

红外光电传感器ITR8307 ITR8307外形 特性 快速响应时间 高灵敏度 非可见波长 薄 紧凑型 无铅 该产品本身将保持在符合RoHS的版本内 描述 ITR8307/S18/TR8是一种光反射开关&#xff0c;它包括一个GaAs IR-LED发射器和一个NPN光电晶体管&#xff0c;该晶体管具有短距离的高…

基于 Milvus Cloud + LlamaIndex 实现初级 RAG

初级 RAG 初级 RAG 的定义 初级 RAG 研究范式代表了最早的方法论,在 ChatGPT 广泛采用后不久就取得了重要地位。初级 RAG 遵循传统的流程,包括索引创建(Indexing)、检索(Retrieval)和生成(Generation),常常被描绘成一个“检索—读取”框架,其工作流包括三个关键步…

C++实现图的存储和遍历

前言 许多新手友友在初学算法和数据结构时&#xff0c;会被图论支配过。我这里整理了一下图论常见的存储和遍历方式&#xff0c;仅供参考。如有问题&#xff0c;欢迎大佬们批评指正。 存储我将提到四种方式&#xff1a;邻接矩阵、vector实现邻接表、数组模拟单链表实现的前向星…

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准&#xff0c;其中H.264至今仍在广泛使用&#xff0c;无论视频文件还是网络直播&#xff0c;H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大…

完美解决原生小程序点击地图markers上的点获取不到对应的坐标信息

需求&#xff1a;地图上有多个markes点&#xff0c;点击每一个获取对应的数据&#xff0c;再根据当前的坐标信息去调用导航。 出现的问题&#xff1a;每次点击的时候获取不到对应的坐标信息&#xff0c;获取到的信息显然不是想要的 原因&#xff1a; 因为你的id不是number类型&…

线上虚拟纪念馆的便利与优势,全天候开放的数字化历史体验

一、搭建线上虚拟纪念馆的意义 在现代社会中&#xff0c;线上虚拟纪念馆越来越受到人们的关注和欢迎。传统纪念馆需要大量的物理空间和资源&#xff0c;而线上虚拟纪念馆则突破了这些限制&#xff0c;提供了更多的可能性和优势。首先&#xff0c;线上虚拟纪念馆能够更好地保存和…

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例&#xff0c;亲测有效。 厌倦了前篇一律的TTS音色了吗&#xff1f;打开短视频听来听去就是那几个声音&#xff0c;快来试试使用你自己的声音来做语音合成吧&#xff01;本教程非常简单&#xff0c;只需要你能够上传自己的音频数据就可以(建议…

Mac虚拟机工具 CrossOver 24.0.0 Beta3 Mac中文版

CrossOver是一款在Mac上运行Windows应用程序的软件&#xff0c;无需安装虚拟机或重启计算机&#xff0c;简化了操作过程&#xff0c;提高了工作效率&#xff0c;为用户带来便捷体验。前往Mac青桔下载&#xff0c;享受前所未有的便利和高效。摘要由作者通过智能技术生成 CrossOv…

JVM严镇涛版笔记【B站面试题】

前言 2023-06-19 18:49:33 出自B站 灰灰的Java面试 枫叶云链接&#xff1a;http://cloud.fynote.com/s/4976 JVM面试题大全 Lecturer &#xff1a;严镇涛 1.为什么需要JVM&#xff0c;不要JVM可以吗&#xff1f; 1.JVM可以帮助我们屏蔽底层的操作系统 一次编译&#xff0c…

当代人工智能三教父——深度学习三巨头

文章目录 引言 人物介绍 突出贡献 专业名词解释 引言 今天下午闲来无事翻阅了一下csdn首页的头条文章——《27 岁天才创始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采访》 感觉挺有意思&#xff0c;就从头到尾的看了一遍&#xff0c;里面有很多…

6.1 if语句

计算机语言和人类语言类似&#xff0c;人类语言是为了解决人与人之间交流的问题&#xff0c;而计算机语言是为了解决程序员与计算机之间交流的问题。程序员编写的程序就是计算机的控制指令&#xff0c;控制计算机的运行。借助于编译工具&#xff0c;可以将各种不同的编程语言的…

免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端) Java毕业设计…

谷歌B端独立站建站推广,外贸建站训练营,傻瓜式教学

做外贸方法重要&#xff0c;工具更重要&#xff0c;而这些背后的规则和套路&#xff0c;身边的人往往不会告诉你&#xff0c;成功的人更不会教给你。本套课程主要内容包括&#xff1a;一套体系化的独立站建站方法&#xff0c;学会“高效学习”避免无效努力&#xff0c;拥有独立…

144.栈和队列:有效的括号(力扣)

题目描述 代码解决 class Solution { public:bool isValid(string s) {// 如果字符串长度为奇数&#xff0c;不可能是有效的括号字符串if(s.size() % 2 ! 0) return false;// 使用栈来存放括号stack<char> st;// 遍历字符串中的每一个字符for(int i 0; i < s.size();…

redis小知识

AOF与RDB的区别 AOF (Append Only File) 和 RDB (Redis Database) 都是Redis中的持久化机制&#xff0c;但有以下几点不同之处&#xff1a; 内容格式&#xff1a;AOF 以日志的形式记录所有写操作命令&#xff0c;而 RDB 则是在指定的时间间隔内对数据库进行快照&#xff0c;将数…

柏拉图式表征:人工智能深度网络模型是否趋于一致?

人工智能模型是否正在向现实的统一表征演进&#xff1f;柏拉图表征假说认为&#xff0c;人工智能模型正在趋同。 麻省理工学院最近的一篇论文引起了我的注意&#xff0c;因为它提出了一个令人印象深刻的观点&#xff1a;人工智能模型正在趋同&#xff0c;甚至跨越了不同的模态…

GeoScene产品学习视频收集

1、易智瑞运营的极思课堂https://www.geosceneonline.cn/learn/library 2、历年易智瑞技术公开课视频资料 链接&#xff1a;技术公开课-易智瑞信息技术有限公司&#xff0c;GIS/地理信息系统&#xff0c;空间分析-制图-位置智能-地图 3、一些关于GeoScene系列产品和技术操作的…

计算机-编程相关

在 Linux 中、一切都是文件、硬件设备是文件、管道是文件、网络套接字也是文件。 for https://juejin.cn/post/6844904103437582344 fork 进程的一些问题 fork 函数比较特殊、一次调用会返回两次。在父进程和子进程都会返回。 每个进程在内核中都是一个 taskstruct 结构、for…

微软MSBuild大会发布Copilot+PC:技术革新还是隐私噩梦?

微软在最近的MSBuild 2024大会上发布了全新的CopilotPC概念&#xff0c;这一技术结合了高通骁龙X Elite芯片&#xff0c;将人工智能与PC紧密结合。此次发布引起了广泛关注&#xff0c;不仅是因为其技术创新&#xff0c;还因为潜在的隐私问题。甚至连Elon Musk也对此表示担忧&am…

第197题|奇偶性的四则运算,你掌握了吗?|函数强化训练(四)|武忠祥老师每日一题 5月22日

解题思路&#xff1a;这道题如果我们会21号的题的话&#xff0c;简直是小菜一碟&#xff01;主要就是要用到下面这个结论&#xff1a; &#xff08;A&#xff09; 直接看奇偶性我们不好看&#xff0c;我们需要拆项&#xff1a; 我们先看前一项的奇偶性&#xff0c;x是奇函数&a…