首页 > 其他分享 >【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索

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

时间:2024-09-17 12:52:42浏览次数:3  
标签:Reading 模型 调度 Paper GPU 执行 CPU 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 精心设计了一条执行流:

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

图中【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索_人工智能_02表示 tensor parallel group 第【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索_人工智能_03个分片, 如上执行流最理想执行情况如下所示, 此时资源重叠使用达到了最佳。

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

在完成如上流水线设计之后, 接下来一个问题就是对于一个给定的模型, 如何确定流水线中每个操作输入 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 长期开放推理优化方向的研究型实习生、校招和社招岗位。团队致力于从模型和系统两方面对大语言模型推理进行协同优化,工作内容覆盖模型压缩、高性能算子、推理框架和运行时、分布式等工作。欢迎投递简历:[email protected]

标签:Reading,模型,调度,Paper,GPU,执行,CPU,NanoFlow
From: https://blog.51cto.com/u_15316473/12036341

相关文章

  • js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】
    js|TypeError:Cannotreadpropertiesofnull(reading‘indexOf’)【解决】描述概述在前端开发中,遇到TypeError:Cannotreadpropertiesofnull(reading'indexOf')这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法,而null是一......
  • 芝士AI(paperzz)写作助手:智能文章创作与编辑,一站式论文查重降重
    写一篇论文是一个复杂的过程,涉及多个步骤,包括选题、研究、撰写、编辑和校对。好不容易论文完成了,还要准备答辩PPT,这对于没有思路或者容易紧张的同学们说又是一大难题。说到这里,就不得不说到AI了。芝士AI(paperzz)写作助手:智能文章创作与编辑,一站式论文查重降重。不仅能提高写......
  • python测试开发基础---threading
    1.核心概念线程(Thread):线程是轻量级的进程,在同一进程内可以并行执行多个任务。线程共享进程的资源,如内存和文件描述符,但每个线程有自己的执行栈和局部变量。全局解释器锁(GIL):Python中的GIL限制了同一进程中多个线程的真正并行执行。它确保同一时间只有一个线程可以执行Pyth......
  • paper 管理
    这些文章放到这里我估计我也就不会读了。移动端agenthttps://arxiv.org/pdf/2406.11896DigiRL:TrainingIn-The-WildDevice-ControlAgentswithAutonomousReinforcementLearningagent相关的环境https://arxiv.org/pdf/2308.04026Anopen-sourcesandboxforlargel......
  • [Paper Reading] Sapiens: Foundation for Human Vision Models
    名称link时间:24.08机构:MetaRealityLabsTL;DR放出一个human-centric视觉任务的fundationmodel,该模型在3亿样本(Humans-300M)上进行无监督预训练,实验证明在human-centric视觉任务(2dpose估计/深度估计/body-part-seg等)效果相对于没有预训练有明显提升。MethodHuman300M数......
  • 芝士AI(paperzz)一天搞定!论文降重神话,75%到3%的秘密!
    在快节奏的现代生活中,写作往往伴随着挑战:时间的紧迫、灵感的枯竭、质量的要求……如何在这样的环境中,保持写作的质量和效率?今天,让我们揭开芝士AI(paperzz)的神秘面纱,探索这款智能写作工具如何帮助我们克服写作难题,激发无限创意。芝士AI(paperzz)论文写作是一款专业满足你的论文写......
  • 芝士AI(paperzz)|论文写作必备指南,一文讲清楚,大学生进!
      众多资深研究人士达成一致的看法是,论文的最艰难一步往往在于启动这个过程。许多学子常常发现自己在精神上并未做好准备来面对这个挑战,因为大多数培训侧重于研究方法和进行实际研究,而很少涉及如何娴熟地书写论文这一方面。这种心理准备上的不足可能成为阻碍他们迈出第一步......
  • 如何高效的阅读paper--三遍阅读法
    第一遍1.阅读文章的标题、摘要和介绍2.阅读每一节的标题和副标题3.阅读总结4.浏览参考文献,看看是否有曾经读过的文章在完成第一遍后,应该做到:1.能够说出该篇论文的类型2.能够说出文章的大概内容与什么相关,基于什么理论解决了什么问题3.文章中的所有假定是否是正确有效的4.......
  • python threading 线程原理实验
    原理进程之间,编程语言可以不同,内存不共享。需要用socket/IRC/RPC等技术实现进程间通信线程之间,编程语言必须相同,内存共享。类变量self.xxx共享,分叉target的函数内变量private不共享。代码#!/usr/bin/env-Scondarun--live-stream-nbasepythonimportthreadingasthi......
  • Paper Reading: Multi-class imbalance problem: A multi-objective solution
    目录研究动机文章贡献本文方法问题定义多分类多目标选择集成框架多类样本的客观建模理论分析实验结果数据集和实验设置对比实验结果运行时间优化边界的有效性优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具......