当前位置:   article > 正文

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

02ef7ce387cc7626a0d68985a190181f.jpeg

对应于其强大的能力,大语言模型 (LLM) 需要强大的算力支撑,而个人计算机上很难满足这一需求。因此,我们别无选择,只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。

为何需要将 LLM 推理本地化

如果我们可以在典配个人计算机上运行最先进的开源 LLM 会如何?好处简直太多了:

  • 增强隐私保护: 私有数据不需要发送至外部 API 进行推理。

  • 降低延迟: 节省网络往返的次数。

  • 支持离线工作: 用户可以在没有网络连接的情况下使用 LLM (常旅客的梦想!)。

  • 降低成本: 无需在 API 调用或模型托管上花一分钱。

  • 可定制: 每个用户都可以找到最适合他们日常工作任务的模型,甚至可以对其进行微调或使用本地检索增强生成 (RAG) 来提高适配度。

这一切的一切都太诱人了!那么,为什么我们没有这样做呢?回到我们的开场白,一般典配笔记本电脑没有足够的计算能力来运行具有可接受性能的 LLM。它们既没有数千核的 GPU,也没有快如闪电的高内存带宽。

接受失败,就此放弃?当然不!

为何现在 LLM 推理本地化有戏了

聪明的人类总能想到法子把一切东西变得更小、更快、更优雅、更具性价比。近几个月来,AI 社区一直在努力在不影响其预测质量的前提下缩小模型。其中,有三个领域的进展最振奋人心:

  • 硬件加速: 现代 CPU 架构内置了专门用于加速最常见的深度学习算子 (如矩阵乘或卷积) 的硬件,这使得在 AI PC 上使能新的生成式 AI 应用并显著提高其速度和效率成为可能。

  • 小语言模型 (Small Language Models,SLMs): 得益于在模型架构和训练技术上的创新,这些小模型的生成质量与大模型相当甚至更好。同时,由于它们的参数较少,推理所需的计算和内存也较少,因此非常适合资源受限的设备。

  • 量化: 量化技术通过减少模型权重和激活的位宽来降低内存和计算要求,如将权重和激活从 16 位浮点 ( fp16 ) 降至 8 位整型 ( int8 )。减少位宽意味着模型推理时的内存需求更少,因而能加速内存受限步骤 (如文本生成的解码阶段) 的延迟。此外,权重和激活量化后,能充分利用 AI 加速器的整型运算加速模块,因而可以加速矩阵乘等运算。

本文,我们将综合利用以上三种技术对微软 Phi-2 模型进行 4 比特权重量化,随后在搭载英特尔 Meteor Lake CPU 的中端笔记本电脑上进行推理。在此过程中,我们主要使用集成了英特尔 OpenVINO 的 Hugging Face Optimum Intel 库。

  • Phi-2https://hf.co/microsoft/phi-2

  • Optimum Intel 仓库地址https://github.com/huggingface/optimum-intel

注意: 如果你想同时量化权重和激活的话,可参阅 该文档。

  • Optimum Intel 文档https://hf.co/docs/optimum/main/en/intel/optimization_ov#static-quantization

我们开始吧。

英特尔 Meteor Lake

英特尔 Meteor Lake 于 2023 年 12 月推出,现已更名为 Core Ultra,其是一个专为高性能笔记本电脑优化的全新 架构。

  • Core Ultrahttps://www.intel.com/content/www/us/en/products/details/processors/core-ultra.html

  • 架构介绍https://www.intel.com/content/www/us/en/content-details/788851/meteor-lake-architecture-overview.html

Meteor Lake 是首款使用 chiplet 架构的英特尔客户端处理器,其包含:

  • 高至 16 核的 高能效 CPU

  • 集成显卡 (iGPU): 高至 8 个 Xe 核心,每个核心含 16 个 Xe 矢量引擎 (Xe Vector Engines,XVE)。顾名思义,XVE 可以对 256 比特的向量执行向量运算。它还支持 DP4a 指令,该指令可用于计算两个宽度为 4 字节的向量的点积,将结果存储成一个 32 位整数,并将其与另一个 32 位整数相加。

  • **神经处理单元 (Neural Processing Unit,NPU)**,是英特尔架构的首创。NPU 是专为客户端 AI 打造的、高效专用的 AI 引擎。它经过优化,可有效处理高计算需求的 AI 计算,从而释放主 CPU 和显卡的压力,使其可处理其他任务。与利用 CPU 或 iGPU 运行 AI 任务相比,NPU 的设计更加节能。

为了运行下面的演示,我们选择了一台搭载了 Core Ultra 7 155H CPU 的 中端笔记本电脑。现在,我们选一个可爱的小语言模型到这台笔记本电脑上跑跑看吧!

  • Core Ultra 7 155H CPUhttps://www.intel.com/content/www/us/en/products/sku/236847/intel-core-ultra-7-processor-155h-24m-cache-up-to-4-80-ghz/specifications.html

  • MSI Prestige Evo 笔记本电脑https://www.amazon.com/MSI-Prestige-Evo-Laptop-A1MG-029US/dp/B0CP9Y8Q6T/

注意: 要在 Linux 上运行此代码,请先遵照 此说明 安装 GPU 驱动。

  • 说明文档https://docs.openvino.ai/2024/get-started/configurations/configurations-intel-gpu.html

微软 Phi-2 模型

微软于 2023 年 12 月 发布 了 Phi-2 模型,它是一个 27 亿参数的文本生成模型。

  • Phi-2 发布博文https://www.microsoft.com/en-us/research/blog/phi-2-the-surprising-power-of-small-language-models/

微软给出的基准测试结果表明,Phi-2 并未因其较小的尺寸而影响生成质量,其表现优于某些最先进的 70 亿参数和 130 亿参数的 LLM,甚至与更大的 Llama-2 70B 模型相比也仅有一步之遥。

1072f9b12c69f6a3edde2795520fc5b2.png

这使其成为可用于笔记本电脑推理的有利候选。另一个候选是 11 亿参数的 TinyLlama 模型。

  • TinyLlamahttps://hf.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0

现在,让我们看看如何缩小模型以使其更小、更快。

使用英特尔 OpenVINO 和 Optimum Intel 进行量化

英特尔 OpenVINO 是一个开源工具包,其针对许多英特尔硬件平台对 AI 推理工作负载进行优化 (Github、文档),模型量化是其重要特性之一。

  • OpenVINO Github 仓库https://github.com/openvinotoolkit/openvino

  • OpenVINO 文档https://docs.openvino.ai/2024/home.html

我们与英特尔合作,将 OpenVINO 集成至 Optimum Intel 中,以加速 Hugging Face 模型在英特尔平台上的性能 (Github,文档)。

  • Optium Intel Github 仓库https://github.com/huggingface/optimum-intel

  • Optimum Intel 文档https://hf.co/docs/optimum/intel/index

首先,请确保你安装了最新版本的 optimum-intel 及其依赖库:

pip install --upgrade-strategy eager optimum[openvino,nncf]

optimum-intel 支持用户很容易地把 Phi-2 量化至 4 比特。我们定义量化配置,设置优化参数,并从 Hub 上加载模型。一旦量化和优化完成,我们可将模型存储至本地。

  1. from transformers import AutoTokenizer, pipeline
  2. from optimum.intel import OVModelForCausalLM, OVWeightQuantizationConfig
  3. model_id = "microsoft/phi-2"
  4. device = "gpu"
  5. # Create the quantization configuration with desired quantization parameters
  6. q_config = OVWeightQuantizationConfig(bits=4, group_size=128, ratio=0.8)
  7. # Create OpenVINO configuration with optimal settings for this model
  8. ov_config = {"PERFORMANCE_HINT""LATENCY""CACHE_DIR""model_cache""INFERENCE_PRECISION_HINT""f32"}
  9. tokenizer = AutoTokenizer.from_pretrained(model_id)
  10. model = OVModelForCausalLM.from_pretrained(
  11.     model_id,
  12.     export=True, # export model to OpenVINO format: should be False if model already exported
  13.     quantization_config=q_config,
  14.     device=device,
  15.     ov_config=ov_config,
  16.   )
  17. # Compilation step : if not explicitly called, compilation will happen before the first inference
  18. model.compile()
  19. pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
  20. results = pipe("He's a dreadful magician and")
  21. save_directory = "phi-2-openvino"
  22. model.save_pretrained(save_directory)
  23. tokenizer.save_pretrained(save_directory)

ratio 参数用于控制将多少权重量化为 4 比特 (此处为 80%),其余会量化至 8 比特。group_size 参数定义了权重量化组的大小 (此处为 128),每个组都具有独立的缩放因子。减小这两个值通常会提高准确度,但同时会牺牲模型尺寸和推理延迟。

你可以从我们的 文档 中获取更多有关权重量化的信息。

注意: 你可在 Github 上 找到完整的文本生成示例 notebook。

  • Github Notebook 地址https://github.com/huggingface/optimum-intel/blob/main/notebooks/openvino/quantized_generation_demo.ipynb

那么,在我们的笔记本电脑上运行量化模型究竟有多快?请观看以下视频亲自体验一下!播放时,请选择 1080p 分辨率以获得最大清晰度。

在第一个视频中,我们向模型提了一个高中物理问题: “ Lily has a rubber ball that she drops from the top of a wall. The wall is 2 meters tall. How long will it take for the ball to reach the ground?

89e0a81d378d210274e5a7f9fba23f22.gif

在第二个视频中,我们向模型提了一个编码问题: “ Write a class which implements a fully connected layer with forward and backward functions using numpy. Use markdown markers for code.

c02fdd4900c0511ac5de6779c0b6cc79.gif

如你所见,模型对这两个问题生成的答案质量都非常高。量化加快了生成速度,但并没有降低 Phi-2 的质量。我本人很愿意在我的笔记本电脑上每天使用这个模型。

总结

借助 Hugging Face 和英特尔的工作,现在你可以在笔记本电脑上运行 LLM,并享受本地推理带来的诸多优势,如隐私、低延迟和低成本。我们希望看到更多好模型能够针对 Meteor Lake 平台及其下一代平台 Lunar Lake 进行优化。Optimum Intel 库使得在英特尔平台上对量化模型变得非常容易,所以,何不试一下并在 Hugging Face Hub 上分享你生成的优秀模型呢?多多益善!

下面列出了一些可帮助大家入门的资源:

  • Optimum Intel 文档https://hf.co/docs/optimum/main/en/intel/inference

  • 来自英特尔及 Hugging Face 的 开发者资源https://www.intel.com/content/www/us/en/developer/partner/hugging-face.html

  • 深入探讨模型量化的视频: 第 1 部分、第 2 部分https://youtu.be/kw7S-3s50ukhttps://youtu.be/fXBBwCIA0Ds

如若你有任何问题或反馈,我们很乐意在 Hugging Face 论坛 上解答。

  • 论坛地址https://discuss.huggingface.co/

感谢垂阅!


英文原文: https://hf.co/blog/phi2-intel-meteor-lake
原文作者: Julien Simon,Ella Charlaix,Ofir Zafrir,Igor Margulis,Guy Boudoukh,Moshe Wasserblat
译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/574832
推荐阅读
相关标签
  

闽ICP备14008679号