0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在TorchServe上提供LLMs的分布式推理

jf_pmFSk4VX 来源:GiantPandaCV 2024-01-31 13:59 次阅读

这里是Hamid,我来自PyTorch合作伙伴工程部。我将跟随Mark的讨论,讲解如何在TorchServe上提供LLMs的分布式推理和其他功能。首先,为什么需要分布式推理呢?简单来说,大部分这些模型无法适应单个GPU

96b71488-b79a-11ee-8b88-92fbcf53809c.png

通常,GPU的内存介于16到40GB之间,如果考虑一个30B模型,在半精度下需要60GB的内存,或者70B Lama模型在半精度下至少需要140GB的内存。这意味着至少需要8个GPU。因此,我们需要一种解决方案将这些模型分区到多个设备上。我们来看看在这个领域有哪些模型并行化的解决方案和方法。

99a974ba-b79a-11ee-8b88-92fbcf53809c.png

目前有两种主要方法。一种是张量并行,你基本上在op内部(如矩阵乘法)上切割你的模型,从而并行化计算。这会引入一个通信,就像全归约一样,如果你有足够的工作负载,使用流水线并行计算会更快,但需要更高速的网络。原因是要保持GPU忙碌,因为它是在操作并行化中。所以它更适用于单节点计算。

99cb3136-b79a-11ee-8b88-92fbcf53809c.png

另一种主要方法是流水线并行,基本上将模型水平切分成多个阶段,每个阶段包含一组层。所以你将第一个阶段的输出作为第二个阶段的输入。在这里,我们需要将这种技术与micro批处理结合使用,否则无法有效利用GPU。由于通信的性质,流水线并行更适用于多节点的扩展。

·ModifyModelCode
Megatron,TransformerNeuronx,Fairscale,etc.
DefineParallellayers-buildthemodelwithparallellayers
boundtospecifictrainers
·PyTorchAPIs
WraptheoriginalmodelwithAPIs
Automaticallypartitionthemodel
Traineragnostic

那么,我们今天在OSS空间实际上如何实现这些模型呢?这里有两种主要方法。一种是修改你的模型代码。基本上,定义你的并行层,并在这些并行层之上构建你的模型。这非常像transformers的风格。我们在不同的repo中也看到了这一点,比如megatron,Transformer,Neuronics来自AWS。而且大多数这种并行性都限定在特定的训练上。而另一方面,我们有PyTorch的API,它采用了一种不同的策略。它大多数情况下不需要改变或只需进行最小的改动来适应您的模型,它只需要检查您的模型,并自动对其进行分割。它也可以在训练过程中保持中立。

99e4b750-b79a-11ee-8b88-92fbcf53809c.png

这里有一个修改模型代码的例子,这是在Fairscale上构建的LLAMA2模型的例子。正如您在左侧可以看到的那样,我们实际上正在定义那些并行层,在注意层中,您可以看到我们正在在那些并行层之上构建模型。如我所说,这是Fairscale,但是Megatron,Transformer和AX都是相同的性质。另一方面,这是PyTorch的API,用于流水线并行。我们有一个名为PP的软件包,它处于测试阶段。它的作用是使用模型并行地进行计算

99f70dd8-b79a-11ee-8b88-92fbcf53809c.png

为了理解你的模型并将其分成多个阶段,使用tracing方法是非常重要的。这个框架提供了一个非常简单的API,只需要将你的模型输入其中,就能得到一个已经在不同GPU上进行了分布的多个阶段。它还支持延迟初始化,我们稍后会详细讨论。此外,我们还有适用于PyTorch的tensor并行API,与张量一起使用。

9a0d00fc-b79a-11ee-8b88-92fbcf53809c.png

如果你看一下这些代码,基本上,你可以将你的分片策略传递给并行模块,它会简单地将你的模块并行化到不同的设备上。这又是相同的策略,你不需要改变你的模型代码。它们都是训练无关的,所以你可以在从不同库中导入任意的检查点时进行推理。接下来,我来强调一下我们在分布式推理中所面临的一些挑战。首先,大多数的开源解决方案都与特定的训练器绑定。

1. Most of the OS solutions are bound to specific trainers or require model changes:
-ExamplesincludeDeepSpeed,Accelerate,ParallelFormer,TGI,vLLM,etc.

2.Automaticpartitioningofarbitrarycheckpoints:
-APIstoautomaticallypartitionyourmodelcheckpoints(trainer-agnostic)
-Enablesautomaticpartitioningofarbitrarycheckpoints.

3.Deferredinitialization(loadingpretrainedweights):
-AvoidloadingthewholemodelonCPUordevice.
-Supportsdeferredinitializationtoloadpretrainedweightsondemand.

4.Checkpointconversion:
-Convertcheckpointstrained/savedwithdifferentecosystemlibrariestoPyTorchDistributedcheckpoints.

正如我提到的,他们需要模型的改变,比如deepspeed、VLLM等。所以这需要一种解决方案,能自动对模型和任意检查点进行分区。所以无论你用哪个训练器训练过你的模型,它实际上应该能够将你的模型进行分区。这里还有另外两个挑战,就是延迟初始化,正如Mark所谈的。它可以帮助你更快地加载模型,并在某些情况下避免在CPU和GPU上的开销。而且,如果你必须将模型放在操作系统上,也可以使用这种方式。然后我们有一个检查点转换,我这里稍微谈一下。这是今天的初始化方式。

9a261a4c-b79a-11ee-8b88-92fbcf53809c.png

所以你可以使用元设备来初始化你的模型。然后你请求模型并行API并行化你的模型。你必须手动地实现你的参数。但是在这里还有一个额外的步骤,你必须将你的模型检查点转换为PyTorch分布式可以理解的张量形式。所以,在它们之间有一个检查点转换的过程。你可以使用PyTorch分布式检查点API来加载模型。这样,你实际上可以使用延迟初始化。这里有一个额外的步骤,我们正在研究如何在这里去除检查点转换。

9a42be68-b79a-11ee-8b88-92fbcf53809c.png

好的,谈论一下分布式推理和不同的模型并行化。现在让我们转向Torchserve,看看我们在Torchserve上支持什么。今天在Torchserve上,我们已经集成了分布式推理解决方案,我们与DeepSpeed、Hugging Face Accelerate、Neuron SDK与AWS自定义芯片都有集成。Torchserve原生API还具备PP和TP功能。我们还有微批处理、连续批处理和流式响应的API,这是我们团队和AWS的Matias和Lee共同开发的。

9a558fa2-b79a-11ee-8b88-92fbcf53809c.png

现在让我们来看一下PP。在这里,我们有高度流水线并行处理,我们已经初始化了这项工作,并启用了路径。我们的主要目标是专注于使用的便利性和功能。您可以看到,我们在这里提供了一个一行代码的API,您可以轻松地将您的模型传递进去,特别是所有的Hugging Face模型,您实际上可以获得阶段并简单地初始化您的模型。

9a7c08d0-b79a-11ee-8b88-92fbcf53809c.png

然后,我们最近还为Lama启用了d-tensors来实现张量并行。这是初始的一步。我们已经启用了这条路径,但我们也正在努力优化推理路径。所以请继续关注这里,很快就会有新的更新。

9a9dc3e4-b79a-11ee-8b88-92fbcf53809c.png

关于微批处理,如果您想要使用管道并行处理,微批处理非常重要。我们有一些非常好的微批处理示例,可以帮助您轻松入门。它既有助于更好地利用GPU,也可以在某些情况下并行化预处理,比如处理一些您正在处理的视觉模型。所以可以有一个繁重的预处理任务,我们可以在这里实现并行化,使用多线程。我们还有连续批处理和其他供LLM服务配置使用的成分。这里的想法是当一个请求完成时,将队列中的请求连续添加到当前批次中作为一个请求。所以你不需要等待整个批次完成再发送下一个请求。

9abd87e2-b79a-11ee-8b88-92fbcf53809c.png

正如马克所说的,基本上就是动态批处理。因此,这将有助于提高吞吐量和用户体验。我们来看下一个功能,即流式响应API。

9add9bae-b79a-11ee-8b88-92fbcf53809c.png

再次强调,当您向这些LLMs发送请求时,它们可能需要很长时间进行推理和生成令牌。因此,流式API将帮助您获取每个令牌的生成,而无需等待整个序列的生成。您将逐个生成的令牌返回到客户端。因此,这是一个很好的功能可以实现和集成到友好的环境中。在这里,您可以看到我们定义了两个API。一个是发送中间预测响应的API,您可以使用该API。我们使用了HuggingFace文本迭代器来进行流式批处理。通过这两个的组合,我们在这里实际上有LLAMA2的示例。

9af529ea-b79a-11ee-8b88-92fbcf53809c.png

再说一次,正如我所谈到的,我们与所有这些功能进行了集成,包括所有这些不同的库,如HuggingFace、PP、DeepSpeed、DeepSpeedM2、Inferentia2。在这里,我们实际上已经发布了一个很新的推理示例,并且我们在此发布了一个使用案例。

9b028da6-b79a-11ee-8b88-92fbcf53809c.png

你可以看到我们在这里使用了张量并行和并行预填充。它实际上帮助大大加快了推理速度。与等效的GPU相比,它使得Inferentia 2的成本大幅降低了。我们获得了3倍更便宜的性能点。因此,我强烈建议你也看一看这个示例。

9b3754f0-b79a-11ee-8b88-92fbcf53809c.png

Mark谈了很多不同的优化,补充优化方法使模型更快。他谈到了内存限制、CPU限制,对于特定的LLMs来说,还有两个重要的事情,即KV缓存。这非常重要。它可能会占用非常多的内存,并且会受到内存限制的影响。因此,类似于pageattention的想法在这里可能有帮助。另一个要考虑的因素是量化。

9b50df74-b79a-11ee-8b88-92fbcf53809c.png

到此结束,谢谢。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4700

    浏览量

    128679
  • 内存
    +关注

    关注

    8

    文章

    2998

    浏览量

    73873
  • 并行处理
    +关注

    关注

    0

    文章

    11

    浏览量

    7734
  • pytorch
    +关注

    关注

    2

    文章

    803

    浏览量

    13143
  • LLM
    LLM
    +关注

    关注

    0

    文章

    272

    浏览量

    304

原文标题:《PytorchConference2023 翻译系列》18-如何在TorchServe上提供LLMs的分布式推理

文章出处:【微信号:GiantPandaCV,微信公众号:GiantPandaCV】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    三个特点:分布性、通信性和稳健性。 分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络的文件进行管理和存取。 分布式数据库
    发表于 07-22 14:53

    LED分布式恒流原理

    分布式恒流源节点设置分布式恒流技术就是在需要恒流的节点串接,低压差线性恒流驱动器。低压差很重要,关系到产品驱动效率。做到恒流驱动有很多种,其中低压差线性恒流就可以实现一切LED应用设计,即稳定又简单
    发表于 03-09 16:47

    分布式发电技术与微型电网

    几种分布式发电简介2.分布式发电与配电网互联问题3.微型电网技术4.分布式发电(电源)技术应用的障碍和瓶颈5.分布式发电(电源)技术发展方向6.结语
    发表于 03-11 13:37

    使用分布式I/O进行实时部署系统的设计

    的8插槽机箱,与LabVIEW Real-Time的强大功能相结合,为确定性分布式I/O提供了便捷的解决方案。介绍当你需要在实时控制系统中设计分布式I/O时,你将怎么办?首要问题就是如何在
    发表于 03-12 17:47

    分布式光伏发电安全性

    ,安全性得到了保障,为广泛推广提供了现实的可行性。但从运行维护的角度来说,分布式光伏发电也并非完全安全无隐患的。与独立占地的大型地面电站不同,分布式光伏发电需要依附居民住宅、工业厂房、仓库、商业大楼、学校
    发表于 10-12 15:35

    何在集群部署时实现分布式session?

    集群部署时的分布式 session 如何实现?
    发表于 07-17 06:57

    如何设计分布式干扰系统?

    ”的电子战系统,共同完成对敌信号的探测、定位、干扰任务。因此,嵌入网关是分布式干扰系统研究的关键技术之一。目前国内对分布式干扰系统的研究还停留在理论基础,而对其关键技术的研究不多。
    发表于 08-08 06:57

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理是一个相对较新的领域,所以还没有‘致的定义。与顺序计算相比、并行的、并发的和
    发表于 03-31 09:01

    HarmonyOS应用开发-分布式设计

    不同终端设备之间的极速连接、硬件协同、资源共享,为用户提供最佳的场景体验。分布式设计指南可以帮助应用开发者了解如何充分发挥“One Super Device”的能力,提供独特的跨设备交互体验。说明:本设计指南后续举例中将包括手机
    发表于 09-22 17:11

    HarmonyOS分布式应用框架深入解读

    再局限于单台设备,包管理还包括跨虚拟终端上的所有设备。分布式运行管理负责应用动态运行时管理,包括协同框架、迁移框架、服务卡片框架。应用接口层:是系统提供给广大开发人员开发应用的接口层,不管系统底层实现有多
    发表于 11-22 15:15

    如何高效完成HarmonyOS分布式应用测试?

    作者:liuxun,HarmonyOS测试架构师HarmonyOS是新一代的智能终端操作系统,给开发者提供了设备发现、设备连接、跨设备调用等丰富的分布式API。随着越来越多的开发者投入到
    发表于 12-13 18:07

    【学习打卡】OpenHarmony的分布式任务调度

    、同步、注册、调用)机制。分布式任务调度程序是能够跨多个服务器启动调度作业或工作负载的软件解决方案,整个过程是不需要人来值守的。举个例子,我们可以在一台或多台机器安装分布式调度器,用户可以通过它在
    发表于 07-18 17:06

    常见的分布式供电技术有哪些?

    燃料电池将氢气转化为电能,具有高效率、清洁环保等优势,能够提供高品质、高可靠性的电力供应。  5.燃气发电技术:利用燃气机等设备将燃气转化为电能,接入分布式电网进行供电,其优点是反应速度快,且燃料相对便宜,但同时还需要考虑燃气供应和排放问题。
    发表于 04-10 16:28

    Apache Spark分布式机器学习的介绍

    Apache Spark分布式机器学习
    的头像 发表于 11-05 06:31 2893次阅读

    tldb提供分布式锁使用方法

    前言:分布式锁是分布式系统中一个极为重要的工具。目前有多种分布式锁的设计方案,比如借助 redis,mq,数据库,zookeeper 等第三方服务系统来设计分布式锁。tldb
    的头像 发表于 11-02 14:44 857次阅读
    tldb<b class='flag-5'>提供</b><b class='flag-5'>分布式</b>锁使用方法