AGI|详解IPEX-LLM 与 OpenVino,嵌入生成的终极效率优化
OpenVINO是 Intel 推出的深度学习推理优化工具,主要用于在 Intel 硬件(CPU、GPU、VPU、FPGA、NPU)上高效运行 AI 推理任务。它能够优化和加速来自 TensorFlow、PyTorch、ONNX、PaddlePaddle 等框架训练的模型,提供高效的推理性能、低延迟以及跨平台兼容性。支持的硬件平台OpenVINO 适用于多种 Intel 硬件,支持异构计算CPU(
目录
一、 IPEX-LLM 与 OpenVINO 在项目中的使用场景
4.2 IPEX-LLM 为什么无法支持 CPU GPU NPU 混合加速
一、 IPEX-LLM 与 OpenVINO 在项目中的使用场景
在嵌入生成任务中,模型需要将文本或文档的语义信息转化为高维向量表示,以便用于后续的语义检索、信息检索以及语义匹配等任务。这一过程在 AIPC 等场景中至关重要。然而,随着数据规模的不断增长以及实时交互场景的普及,嵌入生成的延迟和计算效率逐渐成为影响系统整体性能的关键瓶颈。
1. 计算性能优化的需求
为了应对这些挑战,我们希望通过优化推理计算来减少模型推理的延迟、提高吞吐量,从而加快嵌入生成的效率。同时,为了充分利用现有计算资源,我们也希望支持GPU 加速,以利用 GPU 并行计算能力提升大规模推理性能。如果条件允许,我们还希望进一步利用 NPU 进行计算加速,以便在更低功耗、更高效计算的前提下提升推理能力。
2. 选择 IPEX-LLM 与 OpenVINO 的原因
在这样的需求背景下,IPEX-LLM 和 OpenVINO 各有其优势:
- IPEX-LLM 专注于英特尔架构上的 LLM 训练和推理优化,可以在Intel CPUGPU和 NPU 上提供深度优化,减少计算开销,提高吞吐量。
- OpenVINO 擅长推理优化和异构计算调度,可以帮助我们更好地利用 GPU NPU,进一步提升性能和能效比。
二、IPEX-LLM 技术解析
2.1 IPEX-LLM 概述
IPEX-LLM(Intel® Extension for PyTorch - Large Language Models)是 Intel Extension for PyTorch(IPEX)组件的一部分,专门用于优化大语言模型在 Intel 硬件上的训练和推理性能。其主要目标是利用 Intel 硬件架构特性,提高 PyTorch 生态下的大语言模型的计算效率,降低计算成本,并提升推理吞吐量。
主要优化方向:
- 训练优化: 通过算子融合、内存优化等技术,加速大模型的训练过程,提高吞吐量,减少计算资源占用。
- 推理优化: 采用低精度计算(如 INT8 量化)和计算图优化技术,提高推理效率,减少延迟。
- 硬件加速: 针对 Intel 硬件(如 Xeon CPU、Intel GPU)提供深度优化,使大模型能充分利用计算资源,提高吞吐量。
- 易用性: IPEX-LLM 可与llama.cpp 、 Ollama 、 HuggingFace、 LangChain 、 LlamaIndex 、 vLLM 、 Text-Generation-WebUI 、 DeepSpeed-AutoTP 、 FastChat 、 Axolotl 、 HuggingFace PEFT 、 HuggingFace TRL 、 AutoGen 、 ModeScope 等无缝集成。
适用场景:
- 大语言模型(LLM)训练和推理加速
- 企业级 AI 模型优化
- 边缘和云端部署
2.2 架构与核心技术
IPEX-LLM 主要基于 PyTorch 生态,并在 Intel 硬件上做了大量优化。其架构主要包括以下关键优化技术:
计算并行化
- 多线程优化:利用 Intel OpenMP 和 TBB(Threading Building Blocks)实现 CPU 计算的多线程优化,提升计算效率。
- 数据流水线优化:在推理阶段,对 Transformer 模型计算过程进行优化,减少计算依赖,提高吞吐量。
- 混合计算(CPU+GPU):对于特定层(如嵌入层)可以选择 CPU 计算,而计算密集型操作(如自注意力机制)则可以使用 GPU 计算,提升整体性能。
低精度计算(INT8 量化 & BF16 支持)
- INT8 量化:
- 通过 OpenVINO 和 OneDNN 提供的 INT8 计算支持,将计算精度从 FP32 降至 INT8,减少计算开销,提高推理速度。
- 量化方法包括:
- 静态量化(Post-Training Quantization, PTQ)
- 动态量化(Dynamic Quantization, DQ)
特性 | 静态量化(PTQ) | 动态量化(DQ) |
何时量化 | 训练后,离线量化 | 推理时,动态量化 |
量化内容 | 权重 + 激活值 | 权重(固定)+ 激活值(动态) |
计算速度 | 最快 | 稍慢(需动态调整量化参数) |
模型大小 | 最小(INT8 全量化) | 较大(仅部分量化) |
精度 | 可能损失较多 | 更稳定,损失较少 |
适用任务 | 计算机视觉、低功耗 AI(ResNet, YOLO, MobileNet) | NLP、大规模推理(BERT, GPT, T5) |
是否需要校准数据 | ✅ 需要 | ❌ 不需要 |
适用硬件 | CPU/GPU/NPU | CPU/GPU(特别是 NLP 任务) |
- BF16(BFloat16)优化
- 对大模型训练引入 BF16 计算,在保持数值稳定性的同时减少存储需求,提高计算吞吐量。
- 适用于 Intel AMX(Advanced Matrix Extensions) 和 Intel GPU。
常见类型:
精度 | 数据类型 | 优点 | 缺点 | 适用场景 |
FP32(单精度浮点) | 32-bit 浮点数 | 计算精度高 | 计算开销大,占用内存多 | 训练、大规模计算 |
FP16(半精度浮点) | 16-bit 浮点数 | 内存占用减少 50%,计算速度更快 | 可能影响数值稳定性 | GPU/AI 加速器推理 |
BF16(Brain Floating Point) | 16-bit 浮点数,指数范围与 FP32 相同 | 计算速度快,适合 LLM 训练 | 精度稍逊于 FP32 | LLM 训练 & 服务器推理 |
INT8(8-bit 整数) | 8-bit 整数 | 计算速度提升 2~4 倍,内存占用减少 75% | 需要校准,可能损失精度 | 推理加速(CPU/NPU) |
INT4(4-bit 整数) | 4-bit 整数 | 计算效率极高,内存占用大幅降低 | 精度损失较大 | 轻量级设备、边缘计算 |
内存优化 & 计算图优化
- 算子融合(Operator Fusion):
- 结合 PyTorch JIT 编译器,将多个计算算子融合成一个,减少数据传输和计算开销。
- 计算图优化:
- 通过 Intel OneDNN 进行底层优化,减少计算冗余,提高矩阵运算的吞吐量。
- 子图优化(Subgraph Optimization),针对 Transformer 计算特性,减少不必要的数据拷贝和计算步骤。
- 内存访问优化
- 采用 NUMA(Non-Uniform Memory Access)优化,使 CPU 计算时减少跨内存访问,提高吞吐量。
- KV-Cache 优化,提升生成式 LLM 推理时的上下文处理速度。
2.3 性能与优化
IPEX-LLM 通过对 PyTorch 进行优化,使其在 Intel 硬件上能达到更高的计算效率。其主要优化效果包括:
- 训练吞吐量提升:相比原生 PyTorch,在 Intel Xeon CPU 和 Intel GPU 上,训练吞吐量可提升 1.5~3 倍。
- 推理延迟降低:使用 INT8 量化后,推理速度可提高 2~4 倍,同时减少内存占用。
- 与 PyTorch 深度整合:开发者可以直接使用 PyTorch API,只需一行代码即可启用 IPEX 进行优化。
与 PyTorch 的整合情况
IPEX-LLM 直接支持 PyTorch,并在 OneDNN(Intel 深度学习优化库)的基础上进行了底层优化。它能够在 PyTorch 计算图的基础上自动优化算子,使得计算吞吐量更高,推理延迟更低。
性能测试
模型 | 平台 | PyTorch(原生) | IPEX-LLM 优化后 | 性能提升 |
GPT-2 推理 | Intel Xeon CPU | 1.0x | 2.2x | 1.2 |
BERT 训练 | Intel Xeon CPU | 1.0x | 1.8x | 0.8 |
BERT 推理(INT8) | Intel Xeon CPU | 1.0x | 3.5x | 2.5 |
Llama 推理 | Intel GPU | 1.0x | 2.5x | 1.5 |
三、OpenVINO 技术解析
3.1 OpenVINO 概述
OpenVINO是 Intel 推出的深度学习推理优化工具,主要用于在 Intel 硬件(CPU、GPU、VPU、FPGA、NPU)上高效运行 AI 推理任务。它能够优化和加速来自 TensorFlow、PyTorch、ONNX、PaddlePaddle 等框架训练的模型,提供高效的推理性能、低延迟以及跨平台兼容性。
支持的硬件平台
OpenVINO 适用于多种 Intel 硬件,支持异构计算:
- CPU(Intel Xeon, Core, Atom 等)
- GPU(Intel Arc, Intel UHD, Intel Iris Xe)
- VPU(Vision Processing Unit)(如 Intel Movidius)
- FPGA(Field Programmable Gate Array)
- NPU(Neural Processing Unit)(Intel 未来 AI 加速芯片)
支持的深度学习框架
OpenVINO 支持从多个深度学习框架导入模型:
- TensorFlow / TensorFlow Lite
- PyTorch
- ONNX
- PaddlePaddle
- MXNet
通过 OpenVINO 模型优化器,开发者可以将这些框架训练的模型转换为 OpenVINO IR(Intermediate Representation,中间表示)格式,从而优化推理速度和跨硬件兼容性。
3.2 架构与核心组件
OpenVINO 采用模块化架构,主要由以下几个核心组件组成:
Inference Engine(推理引擎)
- 负责执行优化后的 AI 模型,并针对不同硬件进行推理计算。
- 通过 异构计算(Heterogeneous Execution),可以自动分配计算任务到 CPU、GPU、NPU 或 FPGA,提升整体推理效率。
- 支持同步(Sync)和异步(Async)推理,以优化吞吐量和延迟。
Model Optimizer(模型优化器)
- 将 TensorFlow、PyTorch、ONNX 等框架训练的模型 转换为 OpenVINO IR 格式。
- 关键优化:
- 计算图优化(Graph Optimization):删除冗余运算,优化计算图结构。
- 算子融合(Operator Fusion):合并多个计算操作,减少计算步骤。
- 数据格式优化(Layout Optimization):优化张量(Tensor)排列方式,提高数据访问效率。
Post-Training Optimization Toolkit(后训练优化工具包,POT)
- 用于模型量化(Quantization),支持 FP32 → INT8 低精度推理,减少计算开销,提高推理速度。
- 采用感知量化技术,不需要重新训练模型即可降低精度。
OpenVINO Runtime(运行时库)
- 提供 Python 和 C++ API,开发者可以方便地调用 OpenVINO 进行推理。
- 支持 多线程优化 和 设备自动选择。
关键优化技术
优化技术 | 描述 |
计算图优化 | 删除冗余算子,减少计算复杂度 |
算子融合 | 合并多个计算算子,提高执行效率 |
低精度计算 | 支持 FP16 / INT8 / BF16 计算,减少内存占用 |
异构计算 | 任务自动分配到 CPU / GPU / NPU / FPGA |
多线程优化 | 充分利用多核 CPU 并行计算 |
内存优化 | 通过 NUMA(非一致性内存访问)优化 提高数据访问速度 |
3.3 性能
对比其他加速方案
OpenVINO vs. 原生 PyTorch/TensorFlow
性能指标 | PyTorch/TensorFlow(原生推理) | OpenVINO(优化后) |
推理延迟 | 较高 | 降低 2~4 倍 |
吞吐量 | 标准 | 提升 1.5~3 倍 |
内存占用 | 标准 | 减少 30%~50% |
精度损失 | 无(FP32) | 量化后精度损失 <1% |
OpenVINO vs. TensorRT(NVIDIA)
性能指标 | OpenVINO(Intel 生态) | TensorRT(NVIDIA GPU 生态) |
支持硬件 | CPU / GPU / VPU / FPGA / NPU | NVIDIA GPU |
模型兼容性 | 支持 ONNX / TensorFlow / PyTorch | 主要支持 TensorFlow & ONNX |
低精度支持 | INT8 / FP16 / BF16 / FP32 | INT8 / FP16 / FP32 |
推理延迟 | 优化 2~4 倍 | 优化 3~6 倍(GPU 加速) |
吞吐量 | 1.5~3 倍提升 | 2~4 倍提升(GPU 优化) |
结论:
- 如果只使用 NVIDIA GPU,TensorRT 在 GPU 端推理性能更优。
- OpenVINO 适用于 Intel 全生态(CPU/GPU/NPU/FPGA),特别是在 CPU/NPU 上的低功耗推理优化 是其核心优势。
Benchmark
https://docs.openvino.ai/2025/about-openvino/performance-benchmarks/generative-ai-performance.html
四、 IPEX-LLM 与 OpenVINO 技术比较
4.1 项目选择
在我们的项目中,为了优化推理性能和计算效率,我们希望支持 CPU、GPU 和 NPU 的混合加速。然而,当前使用的 IPEX-LLM 主要针对 Intel CPU 和 GPU 进行了优化,虽然支持 NPU 加速但是无法与GPU加速同时使用,这限制了我们在异构计算中的优化空间。因此,最后选型定了 OpenVINO,它具备更强的异构计算能力,能够在 CPU、GPU 和 NPU 之间灵活调度计算任务,从而实现更高效的推理加速。
4.2 IPEX-LLM 为什么无法支持 CPU GPU NPU 混合加速
尽管 IPEX-LLM 目前支持 CPU-GPU 混合计算,但它无法实现 CPU-GPU-NPU 混合加速。主要有两个核心原因:
1. 不同硬件之间的 I/O 开销较大
在多硬件异构计算(CPU、GPU、NPU)环境下,不同计算单元通常拥有独立的内存架构,因此跨设备数据传输需要显式的 I/O 操作。这种数据传输往往带来较高的延迟和额外的计算开销,尤其是在以下场景中:
- GPU 和 NPU 之间的数据交换 需要额外的数据拷贝,并且通常没有高效的共享内存机制来优化这一过程。
- 除非使用统一内存,否则每次计算时都需要显式传输数据,导致高昂的 I/O 开销。
- 在 NLP 任务(如 Transformer 模型)中,某些计算层需要频繁地在 CPU、GPU、NPU 之间切换,如果 I/O 过高,则计算资源的加速效果会被数据传输开销抵消,甚至可能降低整体性能。
2. 异构计算需要复杂的任务调度和不同的配置
不同计算硬件(CPU、GPU、NPU)的计算吞吐量、延迟、并行能力和计算模式各不相同,因此高效的异构计算需要一个复杂的调度系统,以确保任务能够合理分配到合适的计算单元。但在 IPEX-LLM 中,主要存在以下问题:
- 缺乏跨设备的统一任务调度机制:
- IPEX-LLM 主要依赖 PyTorch 的调度系统,但 PyTorch 本身主要针对 CPU 和 GPU 进行了优化,并不具备 NPU 计算的任务调度支持。
- 在 GPU 和 NPU 之间动态分配计算任务,需要额外的并行计算框架(如 OpenVINO 或 TensorRT)来提供调度支持,而 IPEX-LLM 本身没有内置这样的机制。
- 不同硬件的计算能力不匹配,导致调度复杂化:
- CPU 适合逻辑计算、前处理任务,但不擅长矩阵计算。
- GPU 适合大规模并行计算(如 Transformer 层计算),但启动延迟较高。
- NPU 适合特定 AI 计算任务(如嵌入层计算、卷积操作),但计算模式固定,适用范围较窄。
- 如果没有合适的任务调度机制,在 CPU-GPU-NPU 之间合理分配计算任务将变得极为复杂,可能导致部分硬件资源闲置,整体效率反而降低。
- 软件库和驱动的兼容性问题:
- 同时安装 NPU 和 GPU 驱动时,存在依赖冲突,导致无法正确加载或初始化多个计算设备。
4.3 架构设计对比
设计目标 | IPEX-LLM | OpenVINO |
核心目标 | 训练 + 推理优化 | 推理优化 |
支持框架 | 仅 PyTorch | PyTorch、TensorFlow、ONNX、PaddlePaddle |
支持硬件 | CPU / GPU(Intel) | CPU / GPU / NPU / VPU / FPGA |
优化方式 | PyTorch-native 优化(OneDNN 加速、BF16/INT8 支持) | 计算图优化、自动调度、INT8 量化、异构计算 |
是否支持混合加速 | 仅 CPU+GPU | 支持 CPU + GPU + NPU |
是否适用于训练 | ✅ 是 | ❌ 仅推理 |
是否适用于多种 AI 任务 | ❌ 仅适合 NLP/LLM | ✅ 计算机视觉 / 语音 / NLP / 推荐系统 |
4.4 易用性与集成性对比
在实际使用中,IPEX-LLM 相比 OpenVINO 在易用性和集成性方面各有优劣。
IPEX-LLM 易用性
✅ 优点
- PyTorch-native API,优化简单。
- 集成 OneDNN,优化效果自动应用,无需额外的转换流程。
- 可与常见大模型提供平台无缝集成。
❌ 缺点
- 更新速度快,但文档滞后:经常遇到 代码 API 变更,但文档没更新,导致某些新版本的功能找不到官方说明。
- 只支持 PyTorch,其他框架无法使用。
OpenVINO 易用性
✅ 优点
- 支持多种框架,可以直接加载 TensorFlow、ONNX、PyTorch 训练好的模型。
- 具备自动设备调度能力,无需手动优化 CPU/GPU/NPU 任务。
❌ 缺点
- 文档写得一般:
- 缺少详细参数解释,很多 API 需要靠实验才能摸清楚。
- 示例代码问题多,部分 Demo 复现不了,或者与最新版本不兼容。
- 集成不如 IPEX-LLM 方便,需要先转换模型(Model Optimizer),然后才能进行推理。
版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。
公众号搜索神州数码云基地,回复【AI】进入AI社群讨论。
更多推荐
所有评论(0)