admin管理员组

文章数量:1027474

AI提速:CXL内存赋能AI&ML应用

全文概览

在人工智能和机器学习(AI/ML)领域,算力的提升一直是关注的焦点,但内存的重要性往往被忽视。随着模型和数据集规模的爆炸式增长,传统的内存架构正面临容量和带宽的双重挑战。本文深入探讨了AI/ML工作负载对内存的迫切需求,揭示了内存瓶颈如何制约AI性能的发挥。

Compute Express Link (CXL) 作为一种新兴的互连技术,为解决这些挑战提供了新的思路。CXL不仅能够扩展内存容量,还能提供更高的带宽和更灵活的资源分配,从而显著提升AI/ML应用的性能和效率。本文将详细介绍CXL技术在AI/ML领域的应用,包括其如何优化大型语言模型的推理、加速RAG(检索增强生成)流程,以及降低总体拥有成本(TCO)。

通过分析实际案例和量化数据,本文旨在为读者提供一个全面的CXL应用指南,帮助开发者和IT专业人员更好地理解和利用CXL技术,释放AI/ML的全部潜力。无论您是AI研究人员、数据科学家,还是企业IT决策者,本文都将为您提供有价值的参考和启示。

阅读收获

  • 理解AI/ML工作负载对内存容量和带宽的迫切需求。
  • 掌握CXL技术在扩展内存、提升性能和优化资源分配方面的优势。
  • 了解CXL如何应用于大型语言模型推理和RAG流程,并量化其带来的性能提升。
  • 洞悉CXL在降低总体拥有成本方面的潜力,为IT决策提供参考。

AI/ML 工作负载中内存的重要性

AI/ML 场景的内存现况

AI/ML 场景的内存现况

图片强调了主系统内存在 AI/ML(人工智能/机器学习)工作负载中扮演的关键角色,并指出了当前内存面临的容量和带宽挑战。

  1. 容量需求: 现代大型 AI 模型(如 GPT-3 和 BERT)以及它们庞大的训练数据集对内存容量提出了极高的要求,常常需要数百 GB 甚至数 TB 的内存,这很容易超出传统 DRAM 的容量限制。内存容量的不足直接限制了模型的规模以及通过模型并行化和数据分片等技术来处理大型数据集的能力。
  2. 带宽瓶颈: 图片指出,AI/ML 操作通常是“内存密集型”的,这意味着它们的性能瓶颈在于数据在内存和计算单元(尤其是 GPU)之间的移动速度,而不是计算本身的速率。模型训练和推理过程需要频繁且高速的数据存取。然而,当前系统内存的带宽往往无法满足 GPU 对数据的需求,导致 GPU 处于等待数据的“饥饿”状态,从而限制了整体性能。

图片旨在说明,尽管计算能力(如 CPU 和 GPU 的处理速度)在 AI/ML 中很重要,但内存的容量和带宽同样甚至更加关键。内存不足不仅限制了可以处理的模型和数据集规模,其带宽瓶颈也直接影响了计算单元的效率,成为提升 AI/ML 工作负载性能的重大挑战。这为 CXL 等旨在扩展内存容量和提升内存访问效率的新技术提供了应用价值的背景。

Cite

在大模型军备竞赛浪潮中,似乎所有人注意力都放在不断推陈出新的GPU加速卡上,而忽视了传统大数据技术栈的扎实推进。在此之前的智能推荐系统,并没有多少AI泡沫,基于CPU的计算/推理系统也应该发挥其应有价值,内存扩展是解决这一问题的核心关切。

似乎:大模型应用更加关注GPU显存,而不是主系统内存,如何理解系统内存的扩展,增益AI/ML 应用?

主系统内存对于 AI/ML 工作负载,特别是大型模型,同样至关重要,并且对其进行扩展可以从多个方面带来显著的帮助。

  • 承载和管理海量数据集和模型权重:
    • 即使是大型模型,其全部训练数据集通常都远超单个 GPU 的显存容量,甚至可能超过所有 GPU 显存的总和。这些数据集主要存储在主系统内存中。
    • 在训练或推理过程中,数据需要从主系统内存分块地传输到 GPU 显存进行处理。
    • 对于大型模型推理或微调,如果整个模型无法完全载入单个或多个 GPU 显存,模型的部分权重也可能需要存储在主系统内存中,并在需要时与 GPU 之间进行交换(Offloading 技术)。
    • 主系统内存容量不足意味着数据集必须更多地依赖于速度慢得多的存储(如 SSD 或 HDD),这将成为严重的性能瓶颈。
  • 缓解数据带宽瓶颈,为 GPU 提供数据“喂食”:
    • 就像之前图片中提到的,AI/ML 操作常常是内存密集型的,而不是计算密集型的。这意味着 GPU 的计算单元很多时候是在等待数据,而不是在忙于计算。
    • 数据从主系统内存传输到 GPU 显存的速度(即系统内存带宽)是决定 GPU 利用率和整体训练/推理速度的关键因素之一。
    • 仅仅增加 GPU 显存容量并不能解决带宽不足的问题。扩充主系统内存容量,尤其是通过 CXL 等技术提供更高的总内存带宽,可以确保 GPU 能够更快、更稳定地获取所需数据,避免“饥饿”,从而充分发挥其计算潜力。
  • 支持复杂的训练和推理策略:
    • 模型并行化和数据分片: 在处理超大模型或数据集时,需要将模型或数据分割到多个 GPU 或多个节点上。主系统内存常被用作数据在不同 GPU 之间或不同节点之间进行交换和同步的暂存区。足够的容量和带宽对于实现高效的并行和分布式训练至关重要。
    • 内存卸载/交换 (Memory Offloading/Swapping): 当模型状态(如权重、梯度、优化器状态、中间激活值)无法全部放入 GPU 显存时,可以将部分数据卸载到主系统内存中。主系统内存的容量和访问速度直接决定了这种卸载策略的效率和对性能的影响。CXL 提供的低延迟、高带宽连接可以显著提升这种交换的效率。
  • 支持 CPU 侧的数据预处理和后处理:
    • 训练和推理流程中包含大量在 CPU 上进行的任务,如数据加载、预处理(图像解码、数据增强等)、批处理组织、模型加载、结果聚合和后处理。这些任务都需要大量的主系统内存资源。
    • 主系统内存的性能也会直接影响这些 CPU 侧操作的速度,进而影响整个 AI/ML 工作流的效率。

CXL 内存扩展对AI/ML的价值

CXL 内存扩展对AI/ML的价值

图片聚焦于 CXL (Compute Express Link) 技术如何帮助应对 AI/ML 工作负载当前面临的内存挑战。

  1. 容量扩展: CXL 最直接的好处之一是能够显著扩展系统的总内存容量,突破了传统主板上 DIMM 插槽对 DRAM 容量的限制。这对于需要加载大型模型和数据集的 AI/ML 应用至关重要。
  2. 高性能内存池访问: CXL 能够构建高性能的内存池,并提供相对于传统网络或存储而言具有高带宽和低延迟的访问能力。虽然图中使用了“无限”内存池的说法,这可能是一种夸张的修辞,但其核心思想是 CXL 可以汇聚大量的内存资源,并允许多个计算单元高效地访问它们。
  3. 灵活分配 (DCD): CXL 支持动态容量设备 (DCD)。这意味着内存资源可以根据 AI/ML 工作负载的需求进行更灵活的动态分配和调整,提高了内存资源的利用率,尤其适用于需求变化的动态环境。
  4. 减少数据移动 (共享内存): CXL 支持的共享内存功能允许多个计算单元直接访问同一块物理内存区域。这大幅减少了数据在不同计算节点之间或计算节点与存储设备之间进行拷贝和传输的需要,从而降低了网络和存储的 I/O 开销,对于分布式 AI/ML 训练和需要频繁数据交换的应用非常有益。

AI/ML 工作负载

FlexGen 分层内存推理

FlexGen 分层内存推理

图片介绍了“分层内存推理”的概念,以及 FlexGen 作为实现这一概念的一种引擎,特别是在 GPU 内存有限的情况下运行大型语言模型。

  1. FlexGen 引擎: FlexGen 是一种专门为在 GPU 显存不足的条件下高效运行大型语言模型而设计的高吞吐量生成引擎。它的核心机制是高效地将模型或数据卸载到主系统内存(或 CXL 内存),从而突破 GPU 显存的物理限制。
  2. CXL 在其中的作用: 图片强调了通过 MemVerge 和 Micron 合作实现的方案,即利用 CXL 内存来“拯救”那些受限于自身显存容量而无法运行大型模型的 GPU。这表明 CXL 提供的更高容量、更低延迟的主系统内存扩展,是 FlexGen 实现高效卸载的关键。
  3. 性能优势展示: 右侧的图表对比了使用不同内存配置进行 OPT-66B 模型推理时的 GPU 利用率随时间的变化。绿线代表使用 DRAM 和 NVMe SSD 作为分层存储的情况,其 GPU 利用率波动较大且有明显的低谷;蓝线代表使用 MemVerge Memory Machine X(利用了 DRAM 和 CXL 内存)的情况,其 GPU 利用率更高且更稳定。
  4. 量化效益: 图片列出了使用 CXL 内存方案带来的显著效益,包括 GPU 利用率提高 77%、首次令牌时间加快超过 2 倍、生成/解码速度提高 3 倍,以及完全避免了 NVMe 存储 I/O。这直接证明了利用 CXL 扩展主系统内存对于提升大型语言模型推理性能的巨大价值。

Note

考虑到CXL当前在时延方面的短板,推理场景应用,落脚点可能在:提升吞吐量、对话上下文记忆等能力上,这对于长文本理解在实际场景的落地是有帮助的,对于非时延敏感性的批处理计算等也有巨大价值。


RAG 的魔力在于检索

RAG 工作流中的矢量数据库

RAG 工作流中的矢量数据库

图片以 Llamaindex 为例,对比了标准的 RAG (Retrieval-Augmented Generation,检索增强生成) Pipeline 和通过引入 CXL 内存改进后的 Pipeline,并列出了相关的瓶颈和效益。

  1. RAG Pipeline 概述: 标准 RAG Pipeline 的流程是接收用户查询,进行“检索”操作从向量数据库或企业知识库中找到相关信息,然后将这些信息与查询一起构成“提示”,输入到大型语言模型 (LLM Model) 中,最后由 LLM 生成“回答”。这个过程中涉及向量数据库、将文本转换为向量的“嵌入”过程以及外部的企业知识来源。
  2. 常见瓶颈: 图片指出了 RAG Pipeline 中的几个常见瓶颈,包括 CPU 进行嵌入生成、GPU 进行 LLM 推理的计算瓶颈,以及最关键的内存和存储瓶颈——当需要存储大型数据集和嵌入时,内存容量不足会导致数据溢出到速度慢得多的磁盘;同时,频繁地从存储中读取和写入向量数据会产生大量的存储 I/O 开销。
  3. CXL 改进的 Pipeline: 改进的 RAG Pipeline 图中,特别强调了“Llamaindex 可组合内存 (Composible Memory)”。这意味着通过 CXL 技术,可以将向量数据库、聊天历史等数据存储在可组合、大容量、高性能的 CXL 内存中,而不是仅仅依赖于传统的主系统内存或直接存储在磁盘上。
  4. 引入 CXL 内存的好处: 图片明确列出了在 RAG Pipeline 中加入 CXL 内存带来的多项好处,包括:显著提高向量数据库(如 Qdrant)的每秒请求处理能力(高达 30%),从而加快检索速度;更高效地检索大型和多个向量数据库,支持更广泛的知识库;通过快速、全面地检索相关上下文,提高 LLM 生成回答的质量;利用 CXL 内存的大容量和池化共享能力,更好地管理和访问数据;以及由于数据获取效率提高而最终提升 RAG 整体性能并提高 GPU 利用率(因为 GPU 不再因等待数据而闲置)。

图片展示了对 RAG (Retrieval-Augmented Generation) 工作负载进行 CXL 应用分析的结果,突出了 CXL 内存带来的性能提升、容量扩展以及总拥有成本 (TCO) 效益。

  1. 性能提升: 左上角的柱状图显示,在测试环境中(基于 VectorDBBench 和 Memory Machine v1.5.0,使用 8:1 的 DDR:CXL 交织比,测量 p99 延迟),添加 CXL 内存后,RAG 工作负载的性能从基准的 1.0 提升到了 1.3,提高了 30%。这验证了 CXL 内存能够加速 RAG 性能。
  2. 容量扩展: 左下角的图示直观地展示了容量的巨大提升。原本仅有 1TB 的 DRAM(包含系统 RAM 和用于 Vector DB1 的部分)的服务器,在添加 CXL 内存后,总容量可以扩展到高达 6.5TB,能够容纳更多的向量数据库 (DB1, DB2 ... DBn) 和支持改进的 RAG 模型。
  3. 结果总结: 结果总结部分再次强调了性能提升 30% 的关键发现,并指出了优化性能可能需要对内存交织比进行调优。一个重要的洞察是,向量数据库的索引表必须完全放入内存中,否则会导致严重的性能下降。CXL 的大容量特性使得这一要求更容易满足,并提高了 RAG 模型的扩展性。
  4. TCO 效益: 除了性能和容量,CXL 还通过其池化和共享特性带来了总拥有成本的优势。通过将大型向量数据库等数据存储在 CXL 内存池中,原本用于 RAG 的宝贵 DRAM 容量可以释放出来用于其他通用计算任务。此外,CXL 内存池可以被多个 RAG 节点或虚拟机共享访问,提高了内存资源的利用率。最后,更高的内存容量减少了对慢速存储的依赖和数据传输,这也有助于降低系统的总体功耗。

Note

去年8月,笔者曾线下参加 国内的全球闪存峰会(FMW 2024),会上关注CXL技术发展的英韧科技研发团队,指出CXL落地发展的关键问题还是:时延相对于DRAM有较大短板,这在当前普遍追求高效计算的场景中是显著短板,如何优化SOC上PCIe的通信效率,是CXL在高性能计算场景绕不过的槛。


矢量数据库的内存占用计算

矢量数据库的内存占用计算

图片提供了一个估算向量数据库存储稠密向量所需内存容量的方法和示例数据。

  1. 内存估算公式: 图片给出了计算原始向量数据所需内存的公式(向量维度 × 向量数量 × 数据类型大小)。同时,它也提醒,向量数据库所需的总内存不仅仅包含原始向量数据,还需要乘以一个“数据库元数据比例”,以考虑索引、元信息等额外的内存开销。
  2. 原始向量需求示例: 下方的表格展示了在不同向量维度、数据类型(FP32、FP16、BF16、INT8)以及不同向量数量(从 100 万到 1 亿)下的原始向量数据所需的内存容量。从表格中可以看出,即使是中等规模(100 万到 1 亿)的向量,所需的原始内存就已经达到了 GB 到数百 GB 的级别。例如,1 亿个长度为 768 的 FP32 向量就需要 307.2 GB 的原始内存。
  3. 引申含义: 这张图的核心思想在于强调向量数据库对内存容量的巨大需求。尽管标题中使用了虚拟语气“如果可以使用 RAM”,但在实践中,将向量数据存储在快速内存中(如 DRAM 或通过 CXL 扩展的内存)对于实现高性能检索是至关重要的。表格中的数据清楚地表明,随着向量数量和维度的增加,所需的内存容量会迅速增长,很容易超出传统 DRAM 的限制。

如何理解这里的向量维度、数据类型?不同维度大小的适用场景怎么区分?

基于常见的嵌入模型和应用实践,不同向量长度通常对应不同的使用场景和需求:

  1. 较短向量(例如,384, 768 维):
    • 通用文本嵌入: 许多常用的通用文本嵌入模型(如 Sentence-BERT 的某些版本)会生成 768 维的向量,适用于大多数不需要极高精度区分的文本相似性搜索、分类或聚类任务。
    • 对资源要求敏感的场景: 在内存、存储或计算资源有限的环境中,为了保证性能,可能会优先选择生成较短向量的模型。
    • 特定领域的简单任务: 如果是在一个非常窄且数据特征相对简单的领域,较短的向量可能已经足够。
    • 特点: 内存占用和计算量相对较小,搜索速度快。捕获的信息可能不如长向量丰富。
    • 使用场景:
  2. 中等向量(例如,1024 维):
    • 广泛的 AI 应用: 许多主流的嵌入模型(如 OpenAI 的 text-embedding-ada-002 生成 1536 维向量,Cohere 的某些模型)生成的向量长度在这个范围内或附近。它们适用于更广泛的场景,如更精确的语义搜索、推荐系统、智能问答(如 RAG 中的检索)、文档相似性分析等。
    • 需要较好平衡精度和性能的场景。
    • 特点: 在表达能力和计算/存储开销之间取得一个平衡。
    • 使用场景:
  3. 较长向量(例如,2048, 4096 维,甚至更高):
    • 高精度要求任务: 需要在高度相似的项目之间进行细微区分的场景,例如在垂直领域进行极高精度的专业文档搜索、产品推荐等。
    • 复杂数据类型: 处理图片、音频、视频等非文本数据时,为了捕获更丰富的视觉或听觉特征,可能需要更高维度的向量。多模态嵌入模型(将不同类型数据嵌入到同一向量空间)通常也生成较长的向量。
    • 研究和探索: 在 AI 研究中,探索更高维度的向量表示是否能带来性能提升时会使用。
    • 需要更强大的模型能力的场景: 通常是更先进、在更大或更多样化数据集上训练的模型才会生成如此长的向量。
    • 特点: 旨在捕获非常丰富、细致或跨模态(如同时表示文本和图片信息)的复杂特征。内存占用和计算开销显著增加。
    • 使用场景:

大多数矢量数据库使用浮点表示进行嵌入,FP32(32 位)是一种常见格式。数据类型的选择取决于应用程序的特定需求。例如:

  • FP32 (32 位浮点) [4 字节]在精度至关重要的应用程序(例如,NLP 的嵌入、图像搜索)中,通常是存储向量的默认设置。
  • FP16/BF16 (16 位浮点/bfloat) [2 字节]在需要优化内存和速度但牺牲精度的深度学习应用中非常有用。
  • INT8 (8 位整数) [1 字节]用于量化模型,以减少内存消耗并提高吞吐量,尤其是对于边缘设备上的推理。
  • FP64 (64 位浮点) [8 字节]很少使用,但在需要极高数值精度的场景中很重要。

所选数据类型会影响内存使用、计算速度和精度,因此根据特定的矢量数据库用例平衡这些因素至关重要[1]。


Embedding 过程数据重组织

Embedding 过程数据重组织

图片通过一个具体的例子(CXL 3.1 规范文档),演示了如何估算将一个文档转换为向量并存储在向量数据库中所需的内存容量。

  1. 源文档分析: 左侧表格列出了 CXL 3.1 规范文档的基本信息,如大小、页数、段落数、字符数以及包含的表格和图片数量。这些是进行向量化所需处理的原始数据。
  2. 处理属性: 中间部分列出了将文档处理成向量所使用的具体属性和方法,包括文档分块的大小和重叠,以及使用的嵌入模型(OpenAI 的 text-embedding-ada-002),该模型的向量维度是 1536,向量数据类型是 FP32(占 4 字节)。此外,还给出了文本与 Token 的转换比例以及图描述占用的 Token 数量的假设。
  3. 内存需求计算: 右侧表格展示了基于上述属性进行计算的结果。首先,根据文档内容和嵌入模型估算了文档文本、表格和图片各自产生的向量数量,然后汇总得到总向量数量(2,129 个)。接着,计算出每个向量所需的内存(1536 维度 * 4 字节/维度 = 6144 字节,即 6KB)。
  4. 总内存估算: 最后,根据总向量数量和每个向量的内存占用,计算出原始向量数据所需的总内存(约 13.06 MB)。更重要的是,它考虑了向量数据库自身的开销(如索引、元数据),并假设这个开销占原始向量大小的 50%,从而估算出包含数据库开销的总内存约为 19.59 MB。

Note

从这里的计算数据来看,向量化后对内存的占用,可能会占用更大空间,通过重组语义元数据,虽提高了后续检索过程的计算效率,但对IT基础设施的要求显著提高,尤其是存储。


矢量数据库的公有云定价

矢量数据库的公有云定价

图片通过量化的成本数据强调了在公有云中存储大规模向量数据可能非常昂贵。

更重要的是,它揭示了公有云实例通常存在的单个节点内存容量限制,迫使大型向量数据库必须进行跨节点分片部署。这种分片架构虽然可以满足容量需求,但会牺牲性能和增加复杂性,这也正是 CXL 等技术通过在一个节点内提供大容量、高性能内存扩展所试图解决的问题,从而可能提供更优的性能和潜在的 TCO 优势。

当向量数据库内存耗尽时会发生什么

像 Qdrant 这样的向量数据库[2],主要在内存中运行以确保低延迟检索。但是,当系统内存耗尽时,会采用以下几种策略:

1. 交换到磁盘
  • 如果 RAM 耗尽,系统可能会开始将数据交换到磁盘,将其用作虚拟内存。这会显著降低性能,因为磁盘访问速度比 RAM 慢几个数量级。对于运行 LLM 的系统来说,这是最糟糕的情况,因为响应时间可能会急剧增加,违反 SLA。
2. 内存映射文件
  • 一些向量数据库使用内存映射文件来扩展内存与磁盘存储。这种技术将磁盘上的文件映射到应用程序的虚拟地址空间中,允许数据库将它们视为 RAM。它比纯粹的交换更有效,但与 RAM 操作相比,仍然具有更高的延迟。
3. 分片和分布式存储
  • 另一种解决方案是分片——将数据库分成更小的部分,并将它们分布在多台机器上。每个分片都存储在 RAM 中,允许系统水平扩展。但是,这增加了数据管理和网络延迟方面的复杂性。

DRAM&CXL 混合场景的成本评估

DRAM&CXL 混合场景的成本评估

图片通过一个详细的表格,比较了在本地部署 (On-Premises) 环境下,使用不同内存配置(纯 DRAM 或 DRAM 结合 CXL 内存)来达到不同总内存容量时的成本。

  1. 对比场景: 表格列出了多种配置,包括只使用插槽 DRAM 的双 CPU 或四 CPU 系统,以及在这些系统基础上增加不同数量的 CXL DRAM 的配置。总内存容量从 4TB 变化到近 33TB。
  2. 成本结构: 表格详细列出了每种配置的总内存大小、总成本以及每 GB 的成本。同时,它也分解了插槽 DRAM 部分的配置(DIMM 大小和数量)和成本小计,以及 CXL DRAM 部分的配置(DIMM 类型、大小、每个 AIC 的 DIMM 数量、AIC 数量)和成本小计。
  3. 成本效益分析:
    • 对比配置 A (纯 DRAM, 4TB, 和5.60/$4.90/GB),可以看出,通过引入 CXL 内存(尽管 CXL DIMM 大小和类型与插槽 DRAM 不同,且需要 AIC),在达到相同的总容量时,可以显著降低每 GB 的成本。这表明 CXL 可以提供更经济的容量扩展方案。
    • 随着总容量的增加(例如,配置 E/F 达到 8TB 和 11TB,配置 G 达到近 33TB),CXL 的作用更为突出,它使得构建超大容量内存配置成为可能。虽然总成本显著增加,但 CXL 部分在提供大容量方面发挥了关键作用。
    • 配置 G 显示了使用 256GB DDR5 DIMM 的纯 DRAM 配置(如果可行的话)达到 32TB 的成本高达 $425,600,而通过结合 CXL,可能可以用更灵活或潜在更低成本的方式达到类似或更大的容量(尽管图中没有直接对比纯 DRAM 达到 32TB 的详细分解)。

延伸思考

这次分享的内容就到这里了,或许以下几个问题,能够启发你更多的思考,欢迎留言,说说你的想法~

  • CXL技术在AI/ML领域还有哪些潜在的应用场景?
  • 如何根据具体的AI/ML工作负载,选择合适的CXL内存配置和部署方案?
  • CXL的未来发展趋势是什么,可能会对AI/ML生态系统产生哪些影响?

#AI内存瓶颈 #CXL内存扩展 #矢量数据库选型

原文标题:CXL for AI/ML: A Practical Guide to Unleashing AI and ML Performance

Notice:Human's prompt, Datasets by Gemini-2.0-flash-thinking

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除amp模型内存数据系统

AI提速:CXL内存赋能AI&ML应用

全文概览

在人工智能和机器学习(AI/ML)领域,算力的提升一直是关注的焦点,但内存的重要性往往被忽视。随着模型和数据集规模的爆炸式增长,传统的内存架构正面临容量和带宽的双重挑战。本文深入探讨了AI/ML工作负载对内存的迫切需求,揭示了内存瓶颈如何制约AI性能的发挥。

Compute Express Link (CXL) 作为一种新兴的互连技术,为解决这些挑战提供了新的思路。CXL不仅能够扩展内存容量,还能提供更高的带宽和更灵活的资源分配,从而显著提升AI/ML应用的性能和效率。本文将详细介绍CXL技术在AI/ML领域的应用,包括其如何优化大型语言模型的推理、加速RAG(检索增强生成)流程,以及降低总体拥有成本(TCO)。

通过分析实际案例和量化数据,本文旨在为读者提供一个全面的CXL应用指南,帮助开发者和IT专业人员更好地理解和利用CXL技术,释放AI/ML的全部潜力。无论您是AI研究人员、数据科学家,还是企业IT决策者,本文都将为您提供有价值的参考和启示。

阅读收获

  • 理解AI/ML工作负载对内存容量和带宽的迫切需求。
  • 掌握CXL技术在扩展内存、提升性能和优化资源分配方面的优势。
  • 了解CXL如何应用于大型语言模型推理和RAG流程,并量化其带来的性能提升。
  • 洞悉CXL在降低总体拥有成本方面的潜力,为IT决策提供参考。

AI/ML 工作负载中内存的重要性

AI/ML 场景的内存现况

AI/ML 场景的内存现况

图片强调了主系统内存在 AI/ML(人工智能/机器学习)工作负载中扮演的关键角色,并指出了当前内存面临的容量和带宽挑战。

  1. 容量需求: 现代大型 AI 模型(如 GPT-3 和 BERT)以及它们庞大的训练数据集对内存容量提出了极高的要求,常常需要数百 GB 甚至数 TB 的内存,这很容易超出传统 DRAM 的容量限制。内存容量的不足直接限制了模型的规模以及通过模型并行化和数据分片等技术来处理大型数据集的能力。
  2. 带宽瓶颈: 图片指出,AI/ML 操作通常是“内存密集型”的,这意味着它们的性能瓶颈在于数据在内存和计算单元(尤其是 GPU)之间的移动速度,而不是计算本身的速率。模型训练和推理过程需要频繁且高速的数据存取。然而,当前系统内存的带宽往往无法满足 GPU 对数据的需求,导致 GPU 处于等待数据的“饥饿”状态,从而限制了整体性能。

图片旨在说明,尽管计算能力(如 CPU 和 GPU 的处理速度)在 AI/ML 中很重要,但内存的容量和带宽同样甚至更加关键。内存不足不仅限制了可以处理的模型和数据集规模,其带宽瓶颈也直接影响了计算单元的效率,成为提升 AI/ML 工作负载性能的重大挑战。这为 CXL 等旨在扩展内存容量和提升内存访问效率的新技术提供了应用价值的背景。

Cite

在大模型军备竞赛浪潮中,似乎所有人注意力都放在不断推陈出新的GPU加速卡上,而忽视了传统大数据技术栈的扎实推进。在此之前的智能推荐系统,并没有多少AI泡沫,基于CPU的计算/推理系统也应该发挥其应有价值,内存扩展是解决这一问题的核心关切。

似乎:大模型应用更加关注GPU显存,而不是主系统内存,如何理解系统内存的扩展,增益AI/ML 应用?

主系统内存对于 AI/ML 工作负载,特别是大型模型,同样至关重要,并且对其进行扩展可以从多个方面带来显著的帮助。

  • 承载和管理海量数据集和模型权重:
    • 即使是大型模型,其全部训练数据集通常都远超单个 GPU 的显存容量,甚至可能超过所有 GPU 显存的总和。这些数据集主要存储在主系统内存中。
    • 在训练或推理过程中,数据需要从主系统内存分块地传输到 GPU 显存进行处理。
    • 对于大型模型推理或微调,如果整个模型无法完全载入单个或多个 GPU 显存,模型的部分权重也可能需要存储在主系统内存中,并在需要时与 GPU 之间进行交换(Offloading 技术)。
    • 主系统内存容量不足意味着数据集必须更多地依赖于速度慢得多的存储(如 SSD 或 HDD),这将成为严重的性能瓶颈。
  • 缓解数据带宽瓶颈,为 GPU 提供数据“喂食”:
    • 就像之前图片中提到的,AI/ML 操作常常是内存密集型的,而不是计算密集型的。这意味着 GPU 的计算单元很多时候是在等待数据,而不是在忙于计算。
    • 数据从主系统内存传输到 GPU 显存的速度(即系统内存带宽)是决定 GPU 利用率和整体训练/推理速度的关键因素之一。
    • 仅仅增加 GPU 显存容量并不能解决带宽不足的问题。扩充主系统内存容量,尤其是通过 CXL 等技术提供更高的总内存带宽,可以确保 GPU 能够更快、更稳定地获取所需数据,避免“饥饿”,从而充分发挥其计算潜力。
  • 支持复杂的训练和推理策略:
    • 模型并行化和数据分片: 在处理超大模型或数据集时,需要将模型或数据分割到多个 GPU 或多个节点上。主系统内存常被用作数据在不同 GPU 之间或不同节点之间进行交换和同步的暂存区。足够的容量和带宽对于实现高效的并行和分布式训练至关重要。
    • 内存卸载/交换 (Memory Offloading/Swapping): 当模型状态(如权重、梯度、优化器状态、中间激活值)无法全部放入 GPU 显存时,可以将部分数据卸载到主系统内存中。主系统内存的容量和访问速度直接决定了这种卸载策略的效率和对性能的影响。CXL 提供的低延迟、高带宽连接可以显著提升这种交换的效率。
  • 支持 CPU 侧的数据预处理和后处理:
    • 训练和推理流程中包含大量在 CPU 上进行的任务,如数据加载、预处理(图像解码、数据增强等)、批处理组织、模型加载、结果聚合和后处理。这些任务都需要大量的主系统内存资源。
    • 主系统内存的性能也会直接影响这些 CPU 侧操作的速度,进而影响整个 AI/ML 工作流的效率。

CXL 内存扩展对AI/ML的价值

CXL 内存扩展对AI/ML的价值

图片聚焦于 CXL (Compute Express Link) 技术如何帮助应对 AI/ML 工作负载当前面临的内存挑战。

  1. 容量扩展: CXL 最直接的好处之一是能够显著扩展系统的总内存容量,突破了传统主板上 DIMM 插槽对 DRAM 容量的限制。这对于需要加载大型模型和数据集的 AI/ML 应用至关重要。
  2. 高性能内存池访问: CXL 能够构建高性能的内存池,并提供相对于传统网络或存储而言具有高带宽和低延迟的访问能力。虽然图中使用了“无限”内存池的说法,这可能是一种夸张的修辞,但其核心思想是 CXL 可以汇聚大量的内存资源,并允许多个计算单元高效地访问它们。
  3. 灵活分配 (DCD): CXL 支持动态容量设备 (DCD)。这意味着内存资源可以根据 AI/ML 工作负载的需求进行更灵活的动态分配和调整,提高了内存资源的利用率,尤其适用于需求变化的动态环境。
  4. 减少数据移动 (共享内存): CXL 支持的共享内存功能允许多个计算单元直接访问同一块物理内存区域。这大幅减少了数据在不同计算节点之间或计算节点与存储设备之间进行拷贝和传输的需要,从而降低了网络和存储的 I/O 开销,对于分布式 AI/ML 训练和需要频繁数据交换的应用非常有益。

AI/ML 工作负载

FlexGen 分层内存推理

FlexGen 分层内存推理

图片介绍了“分层内存推理”的概念,以及 FlexGen 作为实现这一概念的一种引擎,特别是在 GPU 内存有限的情况下运行大型语言模型。

  1. FlexGen 引擎: FlexGen 是一种专门为在 GPU 显存不足的条件下高效运行大型语言模型而设计的高吞吐量生成引擎。它的核心机制是高效地将模型或数据卸载到主系统内存(或 CXL 内存),从而突破 GPU 显存的物理限制。
  2. CXL 在其中的作用: 图片强调了通过 MemVerge 和 Micron 合作实现的方案,即利用 CXL 内存来“拯救”那些受限于自身显存容量而无法运行大型模型的 GPU。这表明 CXL 提供的更高容量、更低延迟的主系统内存扩展,是 FlexGen 实现高效卸载的关键。
  3. 性能优势展示: 右侧的图表对比了使用不同内存配置进行 OPT-66B 模型推理时的 GPU 利用率随时间的变化。绿线代表使用 DRAM 和 NVMe SSD 作为分层存储的情况,其 GPU 利用率波动较大且有明显的低谷;蓝线代表使用 MemVerge Memory Machine X(利用了 DRAM 和 CXL 内存)的情况,其 GPU 利用率更高且更稳定。
  4. 量化效益: 图片列出了使用 CXL 内存方案带来的显著效益,包括 GPU 利用率提高 77%、首次令牌时间加快超过 2 倍、生成/解码速度提高 3 倍,以及完全避免了 NVMe 存储 I/O。这直接证明了利用 CXL 扩展主系统内存对于提升大型语言模型推理性能的巨大价值。

Note

考虑到CXL当前在时延方面的短板,推理场景应用,落脚点可能在:提升吞吐量、对话上下文记忆等能力上,这对于长文本理解在实际场景的落地是有帮助的,对于非时延敏感性的批处理计算等也有巨大价值。


RAG 的魔力在于检索

RAG 工作流中的矢量数据库

RAG 工作流中的矢量数据库

图片以 Llamaindex 为例,对比了标准的 RAG (Retrieval-Augmented Generation,检索增强生成) Pipeline 和通过引入 CXL 内存改进后的 Pipeline,并列出了相关的瓶颈和效益。

  1. RAG Pipeline 概述: 标准 RAG Pipeline 的流程是接收用户查询,进行“检索”操作从向量数据库或企业知识库中找到相关信息,然后将这些信息与查询一起构成“提示”,输入到大型语言模型 (LLM Model) 中,最后由 LLM 生成“回答”。这个过程中涉及向量数据库、将文本转换为向量的“嵌入”过程以及外部的企业知识来源。
  2. 常见瓶颈: 图片指出了 RAG Pipeline 中的几个常见瓶颈,包括 CPU 进行嵌入生成、GPU 进行 LLM 推理的计算瓶颈,以及最关键的内存和存储瓶颈——当需要存储大型数据集和嵌入时,内存容量不足会导致数据溢出到速度慢得多的磁盘;同时,频繁地从存储中读取和写入向量数据会产生大量的存储 I/O 开销。
  3. CXL 改进的 Pipeline: 改进的 RAG Pipeline 图中,特别强调了“Llamaindex 可组合内存 (Composible Memory)”。这意味着通过 CXL 技术,可以将向量数据库、聊天历史等数据存储在可组合、大容量、高性能的 CXL 内存中,而不是仅仅依赖于传统的主系统内存或直接存储在磁盘上。
  4. 引入 CXL 内存的好处: 图片明确列出了在 RAG Pipeline 中加入 CXL 内存带来的多项好处,包括:显著提高向量数据库(如 Qdrant)的每秒请求处理能力(高达 30%),从而加快检索速度;更高效地检索大型和多个向量数据库,支持更广泛的知识库;通过快速、全面地检索相关上下文,提高 LLM 生成回答的质量;利用 CXL 内存的大容量和池化共享能力,更好地管理和访问数据;以及由于数据获取效率提高而最终提升 RAG 整体性能并提高 GPU 利用率(因为 GPU 不再因等待数据而闲置)。

图片展示了对 RAG (Retrieval-Augmented Generation) 工作负载进行 CXL 应用分析的结果,突出了 CXL 内存带来的性能提升、容量扩展以及总拥有成本 (TCO) 效益。

  1. 性能提升: 左上角的柱状图显示,在测试环境中(基于 VectorDBBench 和 Memory Machine v1.5.0,使用 8:1 的 DDR:CXL 交织比,测量 p99 延迟),添加 CXL 内存后,RAG 工作负载的性能从基准的 1.0 提升到了 1.3,提高了 30%。这验证了 CXL 内存能够加速 RAG 性能。
  2. 容量扩展: 左下角的图示直观地展示了容量的巨大提升。原本仅有 1TB 的 DRAM(包含系统 RAM 和用于 Vector DB1 的部分)的服务器,在添加 CXL 内存后,总容量可以扩展到高达 6.5TB,能够容纳更多的向量数据库 (DB1, DB2 ... DBn) 和支持改进的 RAG 模型。
  3. 结果总结: 结果总结部分再次强调了性能提升 30% 的关键发现,并指出了优化性能可能需要对内存交织比进行调优。一个重要的洞察是,向量数据库的索引表必须完全放入内存中,否则会导致严重的性能下降。CXL 的大容量特性使得这一要求更容易满足,并提高了 RAG 模型的扩展性。
  4. TCO 效益: 除了性能和容量,CXL 还通过其池化和共享特性带来了总拥有成本的优势。通过将大型向量数据库等数据存储在 CXL 内存池中,原本用于 RAG 的宝贵 DRAM 容量可以释放出来用于其他通用计算任务。此外,CXL 内存池可以被多个 RAG 节点或虚拟机共享访问,提高了内存资源的利用率。最后,更高的内存容量减少了对慢速存储的依赖和数据传输,这也有助于降低系统的总体功耗。

Note

去年8月,笔者曾线下参加 国内的全球闪存峰会(FMW 2024),会上关注CXL技术发展的英韧科技研发团队,指出CXL落地发展的关键问题还是:时延相对于DRAM有较大短板,这在当前普遍追求高效计算的场景中是显著短板,如何优化SOC上PCIe的通信效率,是CXL在高性能计算场景绕不过的槛。


矢量数据库的内存占用计算

矢量数据库的内存占用计算

图片提供了一个估算向量数据库存储稠密向量所需内存容量的方法和示例数据。

  1. 内存估算公式: 图片给出了计算原始向量数据所需内存的公式(向量维度 × 向量数量 × 数据类型大小)。同时,它也提醒,向量数据库所需的总内存不仅仅包含原始向量数据,还需要乘以一个“数据库元数据比例”,以考虑索引、元信息等额外的内存开销。
  2. 原始向量需求示例: 下方的表格展示了在不同向量维度、数据类型(FP32、FP16、BF16、INT8)以及不同向量数量(从 100 万到 1 亿)下的原始向量数据所需的内存容量。从表格中可以看出,即使是中等规模(100 万到 1 亿)的向量,所需的原始内存就已经达到了 GB 到数百 GB 的级别。例如,1 亿个长度为 768 的 FP32 向量就需要 307.2 GB 的原始内存。
  3. 引申含义: 这张图的核心思想在于强调向量数据库对内存容量的巨大需求。尽管标题中使用了虚拟语气“如果可以使用 RAM”,但在实践中,将向量数据存储在快速内存中(如 DRAM 或通过 CXL 扩展的内存)对于实现高性能检索是至关重要的。表格中的数据清楚地表明,随着向量数量和维度的增加,所需的内存容量会迅速增长,很容易超出传统 DRAM 的限制。

如何理解这里的向量维度、数据类型?不同维度大小的适用场景怎么区分?

基于常见的嵌入模型和应用实践,不同向量长度通常对应不同的使用场景和需求:

  1. 较短向量(例如,384, 768 维):
    • 通用文本嵌入: 许多常用的通用文本嵌入模型(如 Sentence-BERT 的某些版本)会生成 768 维的向量,适用于大多数不需要极高精度区分的文本相似性搜索、分类或聚类任务。
    • 对资源要求敏感的场景: 在内存、存储或计算资源有限的环境中,为了保证性能,可能会优先选择生成较短向量的模型。
    • 特定领域的简单任务: 如果是在一个非常窄且数据特征相对简单的领域,较短的向量可能已经足够。
    • 特点: 内存占用和计算量相对较小,搜索速度快。捕获的信息可能不如长向量丰富。
    • 使用场景:
  2. 中等向量(例如,1024 维):
    • 广泛的 AI 应用: 许多主流的嵌入模型(如 OpenAI 的 text-embedding-ada-002 生成 1536 维向量,Cohere 的某些模型)生成的向量长度在这个范围内或附近。它们适用于更广泛的场景,如更精确的语义搜索、推荐系统、智能问答(如 RAG 中的检索)、文档相似性分析等。
    • 需要较好平衡精度和性能的场景。
    • 特点: 在表达能力和计算/存储开销之间取得一个平衡。
    • 使用场景:
  3. 较长向量(例如,2048, 4096 维,甚至更高):
    • 高精度要求任务: 需要在高度相似的项目之间进行细微区分的场景,例如在垂直领域进行极高精度的专业文档搜索、产品推荐等。
    • 复杂数据类型: 处理图片、音频、视频等非文本数据时,为了捕获更丰富的视觉或听觉特征,可能需要更高维度的向量。多模态嵌入模型(将不同类型数据嵌入到同一向量空间)通常也生成较长的向量。
    • 研究和探索: 在 AI 研究中,探索更高维度的向量表示是否能带来性能提升时会使用。
    • 需要更强大的模型能力的场景: 通常是更先进、在更大或更多样化数据集上训练的模型才会生成如此长的向量。
    • 特点: 旨在捕获非常丰富、细致或跨模态(如同时表示文本和图片信息)的复杂特征。内存占用和计算开销显著增加。
    • 使用场景:

大多数矢量数据库使用浮点表示进行嵌入,FP32(32 位)是一种常见格式。数据类型的选择取决于应用程序的特定需求。例如:

  • FP32 (32 位浮点) [4 字节]在精度至关重要的应用程序(例如,NLP 的嵌入、图像搜索)中,通常是存储向量的默认设置。
  • FP16/BF16 (16 位浮点/bfloat) [2 字节]在需要优化内存和速度但牺牲精度的深度学习应用中非常有用。
  • INT8 (8 位整数) [1 字节]用于量化模型,以减少内存消耗并提高吞吐量,尤其是对于边缘设备上的推理。
  • FP64 (64 位浮点) [8 字节]很少使用,但在需要极高数值精度的场景中很重要。

所选数据类型会影响内存使用、计算速度和精度,因此根据特定的矢量数据库用例平衡这些因素至关重要[1]。


Embedding 过程数据重组织

Embedding 过程数据重组织

图片通过一个具体的例子(CXL 3.1 规范文档),演示了如何估算将一个文档转换为向量并存储在向量数据库中所需的内存容量。

  1. 源文档分析: 左侧表格列出了 CXL 3.1 规范文档的基本信息,如大小、页数、段落数、字符数以及包含的表格和图片数量。这些是进行向量化所需处理的原始数据。
  2. 处理属性: 中间部分列出了将文档处理成向量所使用的具体属性和方法,包括文档分块的大小和重叠,以及使用的嵌入模型(OpenAI 的 text-embedding-ada-002),该模型的向量维度是 1536,向量数据类型是 FP32(占 4 字节)。此外,还给出了文本与 Token 的转换比例以及图描述占用的 Token 数量的假设。
  3. 内存需求计算: 右侧表格展示了基于上述属性进行计算的结果。首先,根据文档内容和嵌入模型估算了文档文本、表格和图片各自产生的向量数量,然后汇总得到总向量数量(2,129 个)。接着,计算出每个向量所需的内存(1536 维度 * 4 字节/维度 = 6144 字节,即 6KB)。
  4. 总内存估算: 最后,根据总向量数量和每个向量的内存占用,计算出原始向量数据所需的总内存(约 13.06 MB)。更重要的是,它考虑了向量数据库自身的开销(如索引、元数据),并假设这个开销占原始向量大小的 50%,从而估算出包含数据库开销的总内存约为 19.59 MB。

Note

从这里的计算数据来看,向量化后对内存的占用,可能会占用更大空间,通过重组语义元数据,虽提高了后续检索过程的计算效率,但对IT基础设施的要求显著提高,尤其是存储。


矢量数据库的公有云定价

矢量数据库的公有云定价

图片通过量化的成本数据强调了在公有云中存储大规模向量数据可能非常昂贵。

更重要的是,它揭示了公有云实例通常存在的单个节点内存容量限制,迫使大型向量数据库必须进行跨节点分片部署。这种分片架构虽然可以满足容量需求,但会牺牲性能和增加复杂性,这也正是 CXL 等技术通过在一个节点内提供大容量、高性能内存扩展所试图解决的问题,从而可能提供更优的性能和潜在的 TCO 优势。

当向量数据库内存耗尽时会发生什么

像 Qdrant 这样的向量数据库[2],主要在内存中运行以确保低延迟检索。但是,当系统内存耗尽时,会采用以下几种策略:

1. 交换到磁盘
  • 如果 RAM 耗尽,系统可能会开始将数据交换到磁盘,将其用作虚拟内存。这会显著降低性能,因为磁盘访问速度比 RAM 慢几个数量级。对于运行 LLM 的系统来说,这是最糟糕的情况,因为响应时间可能会急剧增加,违反 SLA。
2. 内存映射文件
  • 一些向量数据库使用内存映射文件来扩展内存与磁盘存储。这种技术将磁盘上的文件映射到应用程序的虚拟地址空间中,允许数据库将它们视为 RAM。它比纯粹的交换更有效,但与 RAM 操作相比,仍然具有更高的延迟。
3. 分片和分布式存储
  • 另一种解决方案是分片——将数据库分成更小的部分,并将它们分布在多台机器上。每个分片都存储在 RAM 中,允许系统水平扩展。但是,这增加了数据管理和网络延迟方面的复杂性。

DRAM&CXL 混合场景的成本评估

DRAM&CXL 混合场景的成本评估

图片通过一个详细的表格,比较了在本地部署 (On-Premises) 环境下,使用不同内存配置(纯 DRAM 或 DRAM 结合 CXL 内存)来达到不同总内存容量时的成本。

  1. 对比场景: 表格列出了多种配置,包括只使用插槽 DRAM 的双 CPU 或四 CPU 系统,以及在这些系统基础上增加不同数量的 CXL DRAM 的配置。总内存容量从 4TB 变化到近 33TB。
  2. 成本结构: 表格详细列出了每种配置的总内存大小、总成本以及每 GB 的成本。同时,它也分解了插槽 DRAM 部分的配置(DIMM 大小和数量)和成本小计,以及 CXL DRAM 部分的配置(DIMM 类型、大小、每个 AIC 的 DIMM 数量、AIC 数量)和成本小计。
  3. 成本效益分析:
    • 对比配置 A (纯 DRAM, 4TB, 和5.60/$4.90/GB),可以看出,通过引入 CXL 内存(尽管 CXL DIMM 大小和类型与插槽 DRAM 不同,且需要 AIC),在达到相同的总容量时,可以显著降低每 GB 的成本。这表明 CXL 可以提供更经济的容量扩展方案。
    • 随着总容量的增加(例如,配置 E/F 达到 8TB 和 11TB,配置 G 达到近 33TB),CXL 的作用更为突出,它使得构建超大容量内存配置成为可能。虽然总成本显著增加,但 CXL 部分在提供大容量方面发挥了关键作用。
    • 配置 G 显示了使用 256GB DDR5 DIMM 的纯 DRAM 配置(如果可行的话)达到 32TB 的成本高达 $425,600,而通过结合 CXL,可能可以用更灵活或潜在更低成本的方式达到类似或更大的容量(尽管图中没有直接对比纯 DRAM 达到 32TB 的详细分解)。

延伸思考

这次分享的内容就到这里了,或许以下几个问题,能够启发你更多的思考,欢迎留言,说说你的想法~

  • CXL技术在AI/ML领域还有哪些潜在的应用场景?
  • 如何根据具体的AI/ML工作负载,选择合适的CXL内存配置和部署方案?
  • CXL的未来发展趋势是什么,可能会对AI/ML生态系统产生哪些影响?

#AI内存瓶颈 #CXL内存扩展 #矢量数据库选型

原文标题:CXL for AI/ML: A Practical Guide to Unleashing AI and ML Performance

Notice:Human's prompt, Datasets by Gemini-2.0-flash-thinking

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除amp模型内存数据系统

本文标签: AI提速CXL内存赋能AIampampML应用