0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 2024-01-31 13:59 ? 次閱讀

這里是Hamid,我來(lái)自PyTorch合作伙伴工程部。我將跟隨Mark的討論,講解如何在TorchServe上提供LLMs的分布式推理和其他功能。首先,為什么需要分布式推理呢?簡(jiǎn)單來(lái)說(shuō),大部分這些模型無(wú)法適應(yīng)單個(gè)GPU

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

通常,GPU的內(nèi)存介于16到40GB之間,如果考慮一個(gè)30B模型,在半精度下需要60GB的內(nèi)存,或者70B Lama模型在半精度下至少需要140GB的內(nèi)存。這意味著至少需要8個(gè)GPU。因此,我們需要一種解決方案將這些模型分區(qū)到多個(gè)設(shè)備上。我們來(lái)看看在這個(gè)領(lǐng)域有哪些模型并行化的解決方案和方法。

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

目前有兩種主要方法。一種是張量并行,你基本上在op內(nèi)部(如矩陣乘法)上切割你的模型,從而并行化計(jì)算。這會(huì)引入一個(gè)通信,就像全歸約一樣,如果你有足夠的工作負(fù)載,使用流水線并行計(jì)算會(huì)更快,但需要更高速的網(wǎng)絡(luò)。原因是要保持GPU忙碌,因?yàn)樗窃诓僮鞑⑿谢小K运m用于單節(jié)點(diǎn)計(jì)算。

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

另一種主要方法是流水線并行,基本上將模型水平切分成多個(gè)階段,每個(gè)階段包含一組層。所以你將第一個(gè)階段的輸出作為第二個(gè)階段的輸入。在這里,我們需要將這種技術(shù)與micro批處理結(jié)合使用,否則無(wú)法有效利用GPU。由于通信的性質(zhì),流水線并行更適用于多節(jié)點(diǎn)的擴(kuò)展。

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

那么,我們今天在OSS空間實(shí)際上如何實(shí)現(xiàn)這些模型呢?這里有兩種主要方法。一種是修改你的模型代碼。基本上,定義你的并行層,并在這些并行層之上構(gòu)建你的模型。這非常像transformers的風(fēng)格。我們?cè)诓煌膔epo中也看到了這一點(diǎn),比如megatron,Transformer,Neuronics來(lái)自AWS。而且大多數(shù)這種并行性都限定在特定的訓(xùn)練上。而另一方面,我們有PyTorch的API,它采用了一種不同的策略。它大多數(shù)情況下不需要改變或只需進(jìn)行最小的改動(dòng)來(lái)適應(yīng)您的模型,它只需要檢查您的模型,并自動(dòng)對(duì)其進(jìn)行分割。它也可以在訓(xùn)練過(guò)程中保持中立。

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

這里有一個(gè)修改模型代碼的例子,這是在Fairscale上構(gòu)建的LLAMA2模型的例子。正如您在左側(cè)可以看到的那樣,我們實(shí)際上正在定義那些并行層,在注意層中,您可以看到我們正在在那些并行層之上構(gòu)建模型。如我所說(shuō),這是Fairscale,但是Megatron,Transformer和AX都是相同的性質(zhì)。另一方面,這是PyTorch的API,用于流水線并行。我們有一個(gè)名為PP的軟件包,它處于測(cè)試階段。它的作用是使用模型并行地進(jìn)行計(jì)算

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

為了理解你的模型并將其分成多個(gè)階段,使用tracing方法是非常重要的。這個(gè)框架提供了一個(gè)非常簡(jiǎn)單的API,只需要將你的模型輸入其中,就能得到一個(gè)已經(jīng)在不同GPU上進(jìn)行了分布的多個(gè)階段。它還支持延遲初始化,我們稍后會(huì)詳細(xì)討論。此外,我們還有適用于PyTorch的tensor并行API,與張量一起使用。

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

如果你看一下這些代碼,基本上,你可以將你的分片策略傳遞給并行模塊,它會(huì)簡(jiǎn)單地將你的模塊并行化到不同的設(shè)備上。這又是相同的策略,你不需要改變你的模型代碼。它們都是訓(xùn)練無(wú)關(guān)的,所以你可以在從不同庫(kù)中導(dǎo)入任意的檢查點(diǎn)時(shí)進(jìn)行推理。接下來(lái),我來(lái)強(qiáng)調(diào)一下我們?cè)诜植际酵评碇兴媾R的一些挑戰(zhàn)。首先,大多數(shù)的開(kāi)源解決方案都與特定的訓(xùn)練器綁定。

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等。所以這需要一種解決方案,能自動(dòng)對(duì)模型和任意檢查點(diǎn)進(jìn)行分區(qū)。所以無(wú)論你用哪個(gè)訓(xùn)練器訓(xùn)練過(guò)你的模型,它實(shí)際上應(yīng)該能夠?qū)⒛愕哪P瓦M(jìn)行分區(qū)。這里還有另外兩個(gè)挑戰(zhàn),就是延遲初始化,正如Mark所談的。它可以幫助你更快地加載模型,并在某些情況下避免在CPU和GPU上的開(kāi)銷(xiāo)。而且,如果你必須將模型放在操作系統(tǒng)上,也可以使用這種方式。然后我們有一個(gè)檢查點(diǎn)轉(zhuǎn)換,我這里稍微談一下。這是今天的初始化方式。

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

所以你可以使用元設(shè)備來(lái)初始化你的模型。然后你請(qǐng)求模型并行API并行化你的模型。你必須手動(dòng)地實(shí)現(xiàn)你的參數(shù)。但是在這里還有一個(gè)額外的步驟,你必須將你的模型檢查點(diǎn)轉(zhuǎn)換為PyTorch分布式可以理解的張量形式。所以,在它們之間有一個(gè)檢查點(diǎn)轉(zhuǎn)換的過(guò)程。你可以使用PyTorch分布式檢查點(diǎn)API來(lái)加載模型。這樣,你實(shí)際上可以使用延遲初始化。這里有一個(gè)額外的步驟,我們正在研究如何在這里去除檢查點(diǎn)轉(zhuǎn)換。

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

好的,談?wù)撘幌路植际酵评砗筒煌哪P筒⑿谢,F(xiàn)在讓我們轉(zhuǎn)向Torchserve,看看我們?cè)赥orchserve上支持什么。今天在Torchserve上,我們已經(jīng)集成了分布式推理解決方案,我們與DeepSpeed、Hugging Face Accelerate、Neuron SDK與AWS自定義芯片都有集成。Torchserve原生API還具備PP和TP功能。我們還有微批處理、連續(xù)批處理和流式響應(yīng)的API,這是我們團(tuán)隊(duì)和AWS的Matias和Lee共同開(kāi)發(fā)的。

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

現(xiàn)在讓我們來(lái)看一下PP。在這里,我們有高度流水線并行處理,我們已經(jīng)初始化了這項(xiàng)工作,并啟用了路徑。我們的主要目標(biāo)是專(zhuān)注于使用的便利性和功能。您可以看到,我們?cè)谶@里提供了一個(gè)一行代碼的API,您可以輕松地將您的模型傳遞進(jìn)去,特別是所有的Hugging Face模型,您實(shí)際上可以獲得階段并簡(jiǎn)單地初始化您的模型。

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

然后,我們最近還為L(zhǎng)ama啟用了d-tensors來(lái)實(shí)現(xiàn)張量并行。這是初始的一步。我們已經(jīng)啟用了這條路徑,但我們也正在努力優(yōu)化推理路徑。所以請(qǐng)繼續(xù)關(guān)注這里,很快就會(huì)有新的更新。

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

關(guān)于微批處理,如果您想要使用管道并行處理,微批處理非常重要。我們有一些非常好的微批處理示例,可以幫助您輕松入門(mén)。它既有助于更好地利用GPU,也可以在某些情況下并行化預(yù)處理,比如處理一些您正在處理的視覺(jué)模型。所以可以有一個(gè)繁重的預(yù)處理任務(wù),我們可以在這里實(shí)現(xiàn)并行化,使用多線程。我們還有連續(xù)批處理和其他供LLM服務(wù)配置使用的成分。這里的想法是當(dāng)一個(gè)請(qǐng)求完成時(shí),將隊(duì)列中的請(qǐng)求連續(xù)添加到當(dāng)前批次中作為一個(gè)請(qǐng)求。所以你不需要等待整個(gè)批次完成再發(fā)送下一個(gè)請(qǐng)求。

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

正如馬克所說(shuō)的,基本上就是動(dòng)態(tài)批處理。因此,這將有助于提高吞吐量和用戶(hù)體驗(yàn)。我們來(lái)看下一個(gè)功能,即流式響應(yīng)API。

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

再次強(qiáng)調(diào),當(dāng)您向這些LLMs發(fā)送請(qǐng)求時(shí),它們可能需要很長(zhǎng)時(shí)間進(jìn)行推理和生成令牌。因此,流式API將幫助您獲取每個(gè)令牌的生成,而無(wú)需等待整個(gè)序列的生成。您將逐個(gè)生成的令牌返回到客戶(hù)端。因此,這是一個(gè)很好的功能可以實(shí)現(xiàn)和集成到友好的環(huán)境中。在這里,您可以看到我們定義了兩個(gè)API。一個(gè)是發(fā)送中間預(yù)測(cè)響應(yīng)的API,您可以使用該API。我們使用了HuggingFace文本迭代器來(lái)進(jìn)行流式批處理。通過(guò)這兩個(gè)的組合,我們?cè)谶@里實(shí)際上有LLAMA2的示例。

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

再說(shuō)一次,正如我所談到的,我們與所有這些功能進(jìn)行了集成,包括所有這些不同的庫(kù),如HuggingFace、PP、DeepSpeed、DeepSpeedM2、Inferentia2。在這里,我們實(shí)際上已經(jīng)發(fā)布了一個(gè)很新的推理示例,并且我們?cè)诖税l(fā)布了一個(gè)使用案例。

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

你可以看到我們?cè)谶@里使用了張量并行和并行預(yù)填充。它實(shí)際上幫助大大加快了推理速度。與等效的GPU相比,它使得Inferentia 2的成本大幅降低了。我們獲得了3倍更便宜的性能點(diǎn)。因此,我強(qiáng)烈建議你也看一看這個(gè)示例。

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

Mark談了很多不同的優(yōu)化,補(bǔ)充優(yōu)化方法使模型更快。他談到了內(nèi)存限制、CPU限制,對(duì)于特定的LLMs來(lái)說(shuō),還有兩個(gè)重要的事情,即KV緩存。這非常重要。它可能會(huì)占用非常多的內(nèi)存,并且會(huì)受到內(nèi)存限制的影響。因此,類(lèi)似于pageattention的想法在這里可能有幫助。另一個(gè)要考慮的因素是量化。

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

到此結(jié)束,謝謝。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    27

    文章

    4635

    瀏覽量

    128451
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2949

    瀏覽量

    73735
  • 并行處理
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    7723
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    13081
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    0

    文章

    253

    瀏覽量

    286

原文標(biāo)題:《PytorchConference2023 翻譯系列》18-如何在TorchServe上提供LLMs的分布式推理

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分布式軟件系統(tǒng)

    三個(gè)特點(diǎn):分布性、通信性和穩(wěn)健性。 分布式文件系統(tǒng)具有執(zhí)行遠(yuǎn)程文件存取的能力,并以透明方式對(duì)分布在網(wǎng)絡(luò)的文件進(jìn)行管理和存取。 分布式數(shù)據(jù)庫(kù)
    發(fā)表于 07-22 14:53

    LED分布式恒流原理

    分布式恒流源節(jié)點(diǎn)設(shè)置分布式恒流技術(shù)就是在需要恒流的節(jié)點(diǎn)串接,低壓差線性恒流驅(qū)動(dòng)器。低壓差很重要,關(guān)系到產(chǎn)品驅(qū)動(dòng)效率。做到恒流驅(qū)動(dòng)有很多種,其中低壓差線性恒流就可以實(shí)現(xiàn)一切LED應(yīng)用設(shè)計(jì),即穩(wěn)定又簡(jiǎn)單
    發(fā)表于 03-09 16:47

    分布式發(fā)電技術(shù)與微型電網(wǎng)

    幾種分布式發(fā)電簡(jiǎn)介2.分布式發(fā)電與配電網(wǎng)互聯(lián)問(wèn)題3.微型電網(wǎng)技術(shù)4.分布式發(fā)電(電源)技術(shù)應(yīng)用的障礙和瓶頸5.分布式發(fā)電(電源)技術(shù)發(fā)展方向6.結(jié)語(yǔ)
    發(fā)表于 03-11 13:37

    使用分布式I/O進(jìn)行實(shí)時(shí)部署系統(tǒng)的設(shè)計(jì)

    的8插槽機(jī)箱,與LabVIEW Real-Time的強(qiáng)大功能相結(jié)合,為確定性分布式I/O提供了便捷的解決方案。介紹當(dāng)你需要在實(shí)時(shí)控制系統(tǒng)中設(shè)計(jì)分布式I/O時(shí),你將怎么辦?首要問(wèn)題就是如何在
    發(fā)表于 03-12 17:47

    分布式光伏發(fā)電安全性

    ,安全性得到了保障,為廣泛推廣提供了現(xiàn)實(shí)的可行性。但從運(yùn)行維護(hù)的角度來(lái)說(shuō),分布式光伏發(fā)電也并非完全安全無(wú)隱患的。與獨(dú)立占地的大型地面電站不同,分布式光伏發(fā)電需要依附居民住宅、工業(yè)廠房、倉(cāng)庫(kù)、商業(yè)大樓、學(xué)校
    發(fā)表于 10-12 15:35

    何在集群部署時(shí)實(shí)現(xiàn)分布式session?

    集群部署時(shí)的分布式 session 如何實(shí)現(xiàn)?
    發(fā)表于 07-17 06:57

    如何設(shè)計(jì)分布式干擾系統(tǒng)?

    ”的電子戰(zhàn)系統(tǒng),共同完成對(duì)敵信號(hào)的探測(cè)、定位、干擾任務(wù)。因此,嵌入網(wǎng)關(guān)是分布式干擾系統(tǒng)研究的關(guān)鍵技術(shù)之一。目前國(guó)內(nèi)對(duì)分布式干擾系統(tǒng)的研究還停留在理論基礎(chǔ),而對(duì)其關(guān)鍵技術(shù)的研究不多。
    發(fā)表于 08-08 06:57

    分布式系統(tǒng)的優(yōu)勢(shì)是什么?

    當(dāng)討論分布式系統(tǒng)時(shí),我們面臨許多以下這些形容詞所描述的 同類(lèi)型: 分布式的、刪絡(luò)的、并行的、并發(fā)的和分散的。分布式處理是一個(gè)相對(duì)較新的領(lǐng)域,所以還沒(méi)有‘致的定義。與順序計(jì)算相比、并行的、并發(fā)的和
    發(fā)表于 03-31 09:01

    HarmonyOS應(yīng)用開(kāi)發(fā)-分布式設(shè)計(jì)

    不同終端設(shè)備之間的極速連接、硬件協(xié)同、資源共享,為用戶(hù)提供最佳的場(chǎng)景體驗(yàn)。分布式設(shè)計(jì)指南可以幫助應(yīng)用開(kāi)發(fā)者了解如何充分發(fā)揮“One Super Device”的能力,提供獨(dú)特的跨設(shè)備交互體驗(yàn)。說(shuō)明:本設(shè)計(jì)指南后續(xù)舉例中將包括手機(jī)
    發(fā)表于 09-22 17:11

    HarmonyOS分布式應(yīng)用框架深入解讀

    再局限于單臺(tái)設(shè)備,包管理還包括跨虛擬終端上的所有設(shè)備。分布式運(yùn)行管理負(fù)責(zé)應(yīng)用動(dòng)態(tài)運(yùn)行時(shí)管理,包括協(xié)同框架、遷移框架、服務(wù)卡片框架。應(yīng)用接口層:是系統(tǒng)提供給廣大開(kāi)發(fā)人員開(kāi)發(fā)應(yīng)用的接口層,不管系統(tǒng)底層實(shí)現(xiàn)有多
    發(fā)表于 11-22 15:15

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    作者:liuxun,HarmonyOS測(cè)試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開(kāi)發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來(lái)越多的開(kāi)發(fā)者投入到
    發(fā)表于 12-13 18:07

    【學(xué)習(xí)打卡】OpenHarmony的分布式任務(wù)調(diào)度

    、同步、注冊(cè)、調(diào)用)機(jī)制。分布式任務(wù)調(diào)度程序是能夠跨多個(gè)服務(wù)器啟動(dòng)調(diào)度作業(yè)或工作負(fù)載的軟件解決方案,整個(gè)過(guò)程是不需要人來(lái)值守的。舉個(gè)例子,我們可以在一臺(tái)或多臺(tái)機(jī)器安裝分布式調(diào)度器,用戶(hù)可以通過(guò)它在
    發(fā)表于 07-18 17:06

    常見(jiàn)的分布式供電技術(shù)有哪些?

    燃料電池將氫氣轉(zhuǎn)化為電能,具有高效率、清潔環(huán)保等優(yōu)勢(shì),能夠提供高品質(zhì)、高可靠性的電力供應(yīng)。  5.燃?xì)獍l(fā)電技術(shù):利用燃?xì)鈾C(jī)等設(shè)備將燃?xì)廪D(zhuǎn)化為電能,接入分布式電網(wǎng)進(jìn)行供電,其優(yōu)點(diǎn)是反應(yīng)速度快,且燃料相對(duì)便宜,但同時(shí)還需要考慮燃?xì)夤?yīng)和排放問(wèn)題。
    發(fā)表于 04-10 16:28

    Apache Spark分布式機(jī)器學(xué)習(xí)的介紹

    Apache Spark分布式機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 11-05 06:31 ?2869次閱讀

    tldb提供分布式鎖使用方法

    前言:分布式鎖是分布式系統(tǒng)中一個(gè)極為重要的工具。目前有多種分布式鎖的設(shè)計(jì)方案,比如借助 redis,mq,數(shù)據(jù)庫(kù),zookeeper 等第三方服務(wù)系統(tǒng)來(lái)設(shè)計(jì)分布式鎖。tldb
    的頭像 發(fā)表于 11-02 14:44 ?828次閱讀
    tldb<b class='flag-5'>提供</b><b class='flag-5'>分布式</b>鎖使用方法