<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

好的,談論一下分布式推理和不同的模型并行化?,F在讓我們轉向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
    +關注

    關注

    27

    文章

    4470

    瀏覽量

    127060
  • 內存
    +關注

    關注

    8

    文章

    2785

    瀏覽量

    72893
  • 并行處理
    +關注

    關注

    0

    文章

    11

    瀏覽量

    7710
  • pytorch
    +關注

    關注

    2

    文章

    766

    瀏覽量

    12877
  • LLM
    LLM
    +關注

    關注

    0

    文章

    215

    瀏覽量

    243

原文標題:《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

    分布式數據采集系統同步的方法

    本文介紹了基于SAR ADC的系統和基于sigma-delta (∑-Δ) ADC的分布式數據采集系統同步的傳統方法,且探討了這兩種架構之間的區別。我們還將討論同步多個Σ-Δ ADC時遇到的典型不便
    發表于 11-23 10:33

    各種分布式電源的電氣特性

    PS:滲透率的概念:從字面上理解,“滲透”就是由分布式電源發出的功率進入(滲入)到配電系統,所謂的“率”就是由分布式電源發出的電和整個系統所消耗的電(或者說總發電量)的一個比值。各種分布式電源的電氣
    發表于 07-12 07:54

    HarmonyOS分布式應用框架深入解讀

    再局限于單臺設備,包管理還包括跨虛擬終端上的所有設備。分布式運行管理負責應用動態運行時管理,包括協同框架、遷移框架、服務卡片框架。應用接口層:是系統提供給廣大開發人員開發應用的接口層,不管系統底層實現有多
    發表于 11-22 15:15

    如何高效完成HarmonyOS分布式應用測試?

    作者:liuxun,HarmonyOS測試架構師HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的開發者投入到
    發表于 12-13 18:07

    【學習打卡】OpenHarmony的分布式任務調度

    、同步、注冊、調用)機制。分布式任務調度程序是能夠跨多個服務器啟動調度作業或工作負載的軟件解決方案,整個過程是不需要人來值守的。舉個例子,我們可以在一臺或多臺機器安裝分布式調度器,用戶可以通過它在
    發表于 07-18 17:06

    常見的分布式供電技術有哪些?

    燃料電池將氫氣轉化為電能,具有高效率、清潔環保等優勢,能夠提供高品質、高可靠性的電力供應?! ?.燃氣發電技術:利用燃氣機等設備將燃氣轉化為電能,接入分布式電網進行供電,其優點是反應速度快,且燃料相對便宜,但同時還需要考慮燃氣供應和排放問題。
    發表于 04-10 16:28
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>