【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 本文将深入探讨 NanoFlow 的关键思路和核心技术,分析 NanoFlow 与 阿里云人工智能平台 PAI 在实际工作中应用的潜力。

近年来,人工智能领域的快速发展推动了大型语言模型的广泛应用,随之而来的是对其服务效率的迫切需求。论文《NanoFlow:Towards Optimal Large Language Model Serving Throughput》提出了一种突破性的新型服务框架,旨在提高大语言模型在实际应用中的服务吞吐量。这一研究不仅为优化计算资源的利用提供了新思路,也为我们团队在实际应用中面对的挑战提供了宝贵的借鉴。阿里云 PAI 团队开发了 BladeLLM ,旨在为用户提供高性能、高稳定、企业级的大模型推理能力。在日常工作中,我们经常需要处理大量的实时请求,确保用户体验的同时,降低系统的计算成本。正因如此,NanoFlow 中提出的一系列优化策略与我们目前的研究方向紧密相关,为我们探索更高效的模型服务方案提供了启示。本文将深入探讨 NanoFlow 的关键思路和核心技术,分析 NanoFlow 与 阿里云人工智能平台 PAI 在实际工作中应用的潜力。


NanoFlow 简介

在 CPU 中, 当我们只调度一个执行流给 CPU 时, 如果 CPU 在执行某些指令时遇到了阻塞, 比如在执行 IO 指令时, 此时整个 CPU 将处于闲置状态, 其会等待 IO 指令执行完成才开始处理下一条指令,造成了浪费。为此 CPU 引入了超线程技术, 允许应用将两个执行流调度到一个 CPU 上, 这样当 CPU 执行一条执行流阻塞时会切换执行下一个执行流。与此同时乱序执行, 多流水线等各种技术都引入进来, 使得即使只调度了一个执行流给 CPU, CPU 也会想尽办法在执行指令 x 阻塞时调度其他不依赖 x 的指令执行。GPU 也面临着同样的问题, SM 在硬件层面调度多个 warp 并发执行,而 NanoFlow 就是尝试在软件层面解决这些问题。在 NanoFlow 之前,业界通过数据、张量和流水线等设备间并行方法来提升吞吐量,但这些方法均未能充分利用到单个设备内的资源。NanoFlow 提出了一个新型服务框架,利用设备内部的并行性,通过 NanoBatch 将请求分解,打破了推理中的顺序依赖,实现资源重叠使用。其主要技术创新包括基于操作的流水线和调度,将设备功能单元进行分区,实现不同操作的同时执行。评估结果显示,NanoFlow 在实验环境下,相较于最先进的服务系统提供了1.91倍的吞吐量提升,实现了59%至72%的最优吞吐量,具有良好的跨模型移植性。


具体技术实现

GPU 实现

NanoFlow 对于传统推理框架仅调度一条执行流到 GPU 导致单个 GPU 内资源未能充分利用的解决思路也很直观, 就像 CPU 超线程一样, 我们一次调度多个执行流给 GPU, 多个执行流中 operation 互相之间没有依赖关系, 可以最大程度地实现资源重叠使用。当然也不能无脑调度多个执行流, 就像 CPU 超线程中经常会遇到由于资源争抢, 导致调度到同一 CPU 的两个执行流执行速度都会变慢。为此 NanoFlow 针对 LLM 为单个 GPU 精心设计了一条执行流:

image.png

image.png

在完成如上流水线设计之后, 接下来一个问题就是对于一个给定的模型, 如何确定流水线中每个操作输入 NanoBatch 的大小,以及每个操作占用多少资源。毕竟稍有不慎,就会像 CPU 超线程那样造成了资源争抢两败俱伤。NanoFlow 这里解法是结合 offline profiling 以及贪心搜索来为每一个特定模型确定最优参数组合。

CPU 实现

即使是在 CPU 任务处理上,NanoFlow 也会尽最大努力不让 GPU 处于空闲状态。这主要体现在:

  • async scheduler,NanoFlow 会在 iteration 在 GPU 执行期间,在 CPU 上运行调度逻辑确认组装下一个 iteration 的 batch, 以及分配对应的 kvcache 空间等准备工作。在 iteration 结束之后, NanoFlow 会根据这里组装好的 batch 立即发起下一个 iteration。在下一个 iteration 在 GPU 执行期间, NanoFlow 才会检测上一个 iteration 已经结束的请求。
  • async kvcache offload,NanoFlow 支持 prompt cache,会在请求结束时将请求 kvcache 卸载保存到 SSD 上, 并采用 LRU 策略管理。考虑到将 kvcache offload ssd 对于 GPU 来说是个 memory bound 操作, NanoFlow 会在下一次迭代 UGD 期间调度 offload 任务, 来尽可能 overlap。为了提升 offload 吞吐, 在 offload 时, NanoFlow 会先将分布在各地的 kvcache page 聚合到一段连续空间中, 之后将这段连续空间中的内容卸载到 SSD, 在从 SSD 中加载 kvcache 到 GPU 中时也具有类似的过程。


NanoFlow 与 PAI 的结合

在《TAG:BladeLLM 的纯异步推理架构中,我们介绍了 BladeLLM 的纯异步推理架构——TAG(Totally Asynchronous Generator)。TAG 架构下的各个模块全异步执行、互不阻塞,但模型前向过程仍然是一个不可分割的原子过程。NanoFlow 在 GPU 设备内部引入多级流水,则打开了更多的异步执行空间。后续,我们将进一步复现和评估 NanoFlow 的工作,结合 TAG 和 NanoFlow,探索全异步架构下的优化空间。

-----------------------------

招聘

阿里云人工智能平台 PAI 长期开放推理优化方向的研究型实习生、校招和社招岗位。团队致力于从模型和系统两方面对大语言模型推理进行协同优化,工作内容覆盖模型压缩、高性能算子、推理框架和运行时、分布式等工作。

欢迎投递简历:xiafei.qiuxf@alibaba-inc.com

论文信息

论文名称:NanoFlow:Towards Optimal Large Language Model Serving Throughput

论文pdf链接:https://arxiv.org/pdf/2408.12757

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
29天前
|
存储 自然语言处理 机器人
实战揭秘:当RAG遇上企业客服系统——从案例出发剖析Retrieval-Augmented Generation技术的真实表现与应用局限,带你深入了解背后的技术细节与解决方案
【10月更文挑战第3天】随着自然语言处理技术的进步,结合检索与生成能力的RAG技术被广泛应用于多个领域,通过访问外部知识源提升生成内容的准确性和上下文一致性。本文通过具体案例探讨RAG技术的优势与局限,并提供实用建议。例如,一家初创公司利用LangChain框架搭建基于RAG的聊天机器人,以自动化FAQ系统减轻客服团队工作负担。尽管该系统在处理简单问题时表现出色,但在面对复杂或多步骤问题时存在局限。此外,RAG系统的性能高度依赖于训练数据的质量和范围。因此,企业在采用RAG技术时需综合评估需求和技术局限性,合理规划技术栈,并辅以必要的人工干预和监督机制。
71 3
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
揭开模型微调Fine-Tuning的神秘面纱:如何在预训练基础上巧妙调整,解锁定制AI解决方案的秘密武器
【10月更文挑战第8天】模型微调是在预训练模型基础上,利用特定领域数据进一步训练,以优化模型在特定任务上的表现。此方法广泛应用于自然语言处理和计算机视觉等领域,通过调整预训练模型的部分或全部参数,结合适当的正则化手段,有效提升模型性能。例如,使用Hugging Face的Transformers库对BERT模型进行微调,以改善文本匹配任务的准确率。
52 1
|
2月前
|
人工智能 开发者
谷歌通过数据增强、对比调优,减少多模态模型幻觉
【9月更文挑战第16天】谷歌研究人员针对多模态大语言模型(MLLMs)中的幻觉问题,提出了一种结合数据增强与对比调优的新方法,旨在减少模型生成错误信息的情况。该方法通过生成式数据增强制造幻觉标记并与真实标记对比,利用对比损失优化模型参数,从而提升模型对真实信息的辨识能力。实验结果显示,此方法能显著降低对象幻觉现象,但在模拟复杂现实场景及计算需求方面仍面临挑战。相关研究已发布在论文《通过数据增强的对比调优减轻对象幻觉》中。
44 3
|
4月前
|
数据采集 机器学习/深度学习 人工智能
|
4月前
|
人工智能
Prompt工程问题之调优prompt改善AI模型的推理结果如何解决
Prompt工程问题之调优prompt改善AI模型的推理结果如何解决
57 1
|
4月前
|
SQL 缓存 测试技术
DeepMind的新论文,长上下文的大语言模型能否取代RAG或者SQL这样的传统技术呢?
DeepMind的LOFT基准测试挑战了长上下文大型语言模型(LCLLMs)的效用,包括Gemini、GPT-4o和Claude 3 Opus。
80 1
|
4月前
|
自然语言处理 程序员
大模型问题之大模型与之前的NLP技术有什么显著差别
大模型问题之大模型与之前的NLP技术有什么显著差别
|
5月前
|
存储 机器学习/深度学习 自然语言处理
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
|
5月前
|
人工智能 算法 Java
解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]
揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]
揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]