色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

讓pytorch模型更快速投入生產的方法

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2024-01-19 10:38 ? 次閱讀

大家好,非常感謝大家的加入。我是馬克,在推理和PyTorch方面有著豐富的經驗。今天我想和大家談談一種讓你的模型快速投入生產的方法。訓練模型的過程非常艱難,你需要花費大量時間和計算資源。但是推理問題似乎相對簡單一些。基本上,你只需要將模型在一個批次上運行即可。這就是推理過程所需要的。然而,如果你更接近真實的場景,可能需要進行一些額外的步驟。比如,你不能每次推理都重新加載模型,而且你可能需要設置一個HTTP服務器,并對其進行推理。然后你需要加載模型權重和相關數據,對于大型模型,這可能需要很長時間。此外,用戶不會發送張量給你,他們可能發送文本或圖像,所以你可能需要對這些輸入進行預處理。然后你就可以運行推理了。

1.SetupanHTTpserver
2.Loadmodelweightsandartifacts
3.Preprocessinputs
4.Runaninference
5.Maketheinferencefast
6.Collectperformancemetrics
7.DeployonDockerorKubernetes
8.Scaletomultipleworkersandmachines

然后你就會想,太好了,我想要運行一個推理,但是這個推理要花很長時間。它需要幾秒鐘的時間。而實時通常不超過10毫秒——這是很多用戶對我們推理的期望。所以至少還有一個10倍的乘數在里面。你需要不斷地對此進行測量,因為你不能等待用戶因為速度太慢而放棄使用你的應用程序。最終你可能需要將其部署在一種可復現的環境中,比如Docker Kubernetes。一旦你完成了所有這些,那么你還需要處理多進程的問題。因為你將會有8個GPU,你需要讓這八個GPU都保持繁忙。你的CPU有數百個核心,你需要讓所有這些核心都保持繁忙。很多時候,我在TorchServe上工作,人們經常問我TorchServe和FastAPI之間的區別,我的回答是,如果你只是做前面其中的四點,FastAPI做得很好,不需要再去使用TorchServe。

065893ac-b601-11ee-8b88-92fbcf53809c.png

然而,如果你真的擔心推斷速度的快慢并且想讓它在多進程中工作,我們解決了一些比較困難的問題。基本上,我們有一個管理API,在這里你可以說,我想加載這些模型;一個推斷API,在這里你可以說,嘿,我想對這個模型進行請求。這將啟動幾個后端工作器,這些后端工作器實際上是Python進程。你正在啟動Python工作器。堆棧的其余部分大部分是用Java編寫的。人們經常問我的一個問題是,Java不是很慢嗎?為了回答這個問題,這是一個火焰圖。

066a2874-b601-11ee-8b88-92fbcf53809c.png

你可以看到這里,基本上你看到了左側的一條線,那是我們的框架開銷。順便說一下,讀這種圖的方式是x軸表示的不是時間,而是持續的消耗,因為這是一個采樣分析器。所以,這就是Java的開銷。還有很多空閑時間,"swapper"的意思是這內核CPU根本不做任何事情。這大約占總運行時間的50%,在我查看的典型客戶模型中如此,另外50%的時間花在Python環境中。所以你看這個,你需要做什么呢?首先,你需要做更多的處理,其次,你需要編寫更高效的PyTorch代碼。讓我們談談這兩件事。

06e8f7da-b601-11ee-8b88-92fbcf53809c.png

在做更多工作方面,你可用的最重要的優化之一是所謂的動態批處理。動態批處理的本質上是這樣的,你說:嘿,我有一個批次大小為4,但我最多等待30毫秒來獲取這三個元素。然后當30毫秒過去時,只要有可用的數據,你就把它們組成一個批次(當新的推理請求到達時,它們會被加入到當前正在處理的批次中,而不是單獨進行處理)。所以你需要不斷讓你的機器保持忙碌。

06f39988-b601-11ee-8b88-92fbcf53809c.png

您使用產品的用戶體驗就像使用Torch服務一樣,您需要編寫一個被稱為處理程序的東西。這個處理程序是一個Python類,基本上需要學會如何預處理您的數據,并將處理后的數據返回。因此,從根本上講,您希望在純Python中創建一個推斷服務器。這是您需要構建的主要部分。您可以使用類似PDB這樣的工具。

07009d04-b601-11ee-8b88-92fbcf53809c.png

這是我的同事Ankit Gunapal添加的功能。通過這樣的方式,您可以輕松地調試程序,找出錯誤并主動解決崩潰問題。擁有Pythonic的工作流程的好處之一是我們的一些客戶,比如Ryan Avery覺得我們的迭代速度很快,因為您不需要將模型重寫為不同的語言來進行交互。您可以使用同樣的工具進行本地開發和生產部署。

所以,正如我之前提到的,典型程序的一半時間都在一個慢的PyTorch程序中度過。一種非常有用的調試方法是使用PyTorch分析器。你可以通過設置環境變量來啟用它。它的工作原理是顯示一個跟蹤結果。

07217b78-b601-11ee-8b88-92fbcf53809c.png

在跟蹤結果中,你要注意的主要內容是,如果你有類似"stream 7"的標志,那就是你的GPU。(圖中的中間)你要注意的一個主要問題是有很多很小的線。這意味著你的GPU在派發獨立的核函數,這就意味著沒有融合,也就是你沒有充分利用你的GPU,相當于你在浪費錢。所以,你要希望那些線是厚厚的條狀,而不是這些細小的線。接下來,你可能會問,我的模型很慢,我該怎么辦?一種方法是編寫一個更小的模型,但也許這個更小的模型并不夠好。那么,在不改變模型代碼的情況下,你如何減少模型的延遲時間呢?

torch.compile(m,backend="inductor")
torch.compile(m,backend="xla")
torch.compile(m,backend="onnx")
Highlyrecommended:torch.compile(m,
mode="reduce-overhead"
ButJITshaveastartupoverhead

我一直向人們推薦的主要是Torch編譯。你基本上可以使用Torch編譯你的模型和感應器。但編譯的好處在于它有一個后端參數。例如,如果你想在XLA和TPU上支持Torch服務,我們只需改變一個參數。也許像ONNX對于你正在查看的特定模型有更好的性能特征。所以你可以很容易地進行基準測試和查看。這與pytorch分析器和NVIDIA Insight結合使用,可以幫助你快速找出是什么使得事情變得更快。此外我還推薦了減少開銷這種模式。(reduce-overhead)CUDA圖表很棒,使一切都變得快速。所以,請使用它們。現在它們終于能夠與動態形狀一起工作,因此它們與動態批處理很好地配合。這是一件大事,并且最近在2.1版中才支持,所以我極力推薦。

modelbt=BetterTransformer.transform(model
NowforGPUandCPU!

另一件事關于模型,目前非常流行的模型是transformers。但是,你不一定需要改變自己的模型去增加更快的核函數。因此,更好的transformer API在神經網絡模塊級別上工作,可以讓你更換更高效的核函數。最好的是,現在這個API可以加速GPU和CPU的工作負載,最新版本是2.1。另外需要記住的一點是,如果你在編譯代碼,JIT有一定的開銷,這是一個無法回避的開銷,但是如果你使用更多的緩存,可以大大減輕這個開銷。

TORCHINDUCTORCACHEDIR
TORCHINDUCTORFXGRAPHCACHE
Makesuretocopytheseovertoreduce
yourwarmstarttimes

在像TorchServe這樣的推斷框架中,你將會生成多個Python進程,所有這些進程都可以共享同一個緩存,因為推斷是一種尷尬的并行任務。只要你在系統中設置這兩個環境變量,甚至可以將它們復制到多個節點上。這將大大減少您的熱啟動時間。所以我強烈建議您這樣做。只需在Docker命令或其他地方復制即可,沒有什么花哨的東西。

withtorch.device("meta")
model=Llama2
ckpt=torch.load(ckpt,mmap=True)
model.load_state_dict(ckpt,assign=True)

另一件事是在TorchServe中,我們過去推薦人們對模型進行壓縮和解壓縮,因為它可以成為一個獨立的工件。不幸的是,壓縮LLAMA7B大約需要24分鐘,解壓縮需要大約三分鐘,這是不可接受的。所以我們不再建議您進行壓縮。只需直接使用文件夾即可。然后,在加載實際的權重時,將元設備初始化與MMAP加載結合使用,可以大大加快模型的運行速度,在LLAMA7B上可能快約10倍。這基本上應該成為默認設置。

074a6b3c-b601-11ee-8b88-92fbcf53809c.png

我們架構的一個很酷的地方是,我們可以隨意生成任意的后端工作進程,這些工作進程甚至不需要是Python進程。

Modelhandlercanbeinanylanguage!
#include
handle=dlopen("aot.so",RTLDNOW)

所以,例如,像我的同行Matias、Resso和Li Ning一樣,一直在致力于為對延遲極為敏感的人們創建C++進程。另外一件事是,當你從單個Python進程轉向多個進程時,性能會大幅下降。因此,我設置了一個稱為魔法配置的配置變量,將線程數設置為1,很多人可能一直在生產環境中使用這個配置。有一個稍微更好的啟發方法,即將物理核心數除以工作線程的數量,這會給你一個稍微更好的結果。通常你能觀察到,但問題是,隨著核心數量的增加,你會注意到性能并不呈線性增長。所以我非常高興我們團隊有Intel的Minjin Cho加入。07688d06-b601-11ee-8b88-92fbcf53809c.png她注意到了一個問題,我們的線程在CPU上的兩個插槽間遷移。因此,如果一個核心正在執行一些工作。然后它會移動到另一個核心,然后又移動回來。所以最終的結果就是你有一個進程,它基本上會不斷地丟失緩存,導致性能大幅度下降。我說的是像5到10倍的時間慢下來。

079bbf32-b601-11ee-8b88-92fbcf53809c.png

所以關鍵在于當我們啟動Python進程時,我們希望確保它們與特定的進程有一定的關聯性。這是我們默認啟用并且Torch服務作為一個環境變量所實現的。但你所希望看到的是,有一個忙碌的socket塊,而另一個則沒有工作。這是HTOP中你希望看到的良好視圖,以確保CPU推斷是快速的。

07b26728-b601-11ee-8b88-92fbcf53809c.png

這很棒,因為比如Navver就在使用這些優化。他們在博客中提到每年節省了340k,并且通過使用這樣的技術,他們的服務器成本也減少了。

Naver:
https://pytorch.org/blog/ml-model-server-re
source-saving/
PyTorchGeometric:
https://pytorch-geometric.readthedocs.io/en/
latest/advanced/cpuaffinity.html

一、你知道的,有一個隱藏的技巧。嗯,PyTorch Geometric也談到了類似的優化方法應用于他們的GNN工作負載中。所以這是我強烈推薦的一點。我們還討論了很多關于主動測量模型性能的事情,最近AWS添加了一個新的指標API。你可以在你的Python代碼中添加一些儀器,指定這是什么樣的指標?是一個計數器嗎?是一個量規嗎?然后你就可以得到一個看起來很酷的科幻儀表盤。

07dcbaa0-b601-11ee-8b88-92fbcf53809c.png

這是一個來自沃爾瑪搜索團隊的儀表盤示例,他們一直在使用TorchServe來擴展他們的搜索,并且效果很好。這很酷,因為沃爾瑪是世界上最大的公司之一,他們是世界上最大的雇主。對于他們來說,使用TorchServe和Python進行擴展工作真的很不錯。

087a3456-b601-11ee-8b88-92fbcf53809c.png

我很高興地看到TorchServe運行得非常順利。所以,現在來做一個總結,我感到很幸運的是,TorchServe現在成為了SageMaker、Vertex、MLflow和Kubeflow這些平臺上服務PyTorch模型的默認方法。它已經成功地為沃爾瑪、Navver和亞馬遜廣告等工作負載提供服務。雖然我站在這里講演,但這真的是META、AWS和最近的英特爾團隊之間的眾多優秀人士的合作成果。謝謝。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4729

    瀏覽量

    128892
  • 服務器
    +關注

    關注

    12

    文章

    9123

    瀏覽量

    85331
  • HTTP
    +關注

    關注

    0

    文章

    504

    瀏覽量

    31197
  • 模型
    +關注

    關注

    1

    文章

    3226

    瀏覽量

    48809
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13201

原文標題:《PytorchConference2023 翻譯系列》17-讓pytroch模型更快速投入生產的方法——torchserve

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Pytorch模型訓練實用PDF教程【中文】

    模型部分?還是優化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對癥下藥,才能訓練出一個較滿意的模型。本教程內容及結構:本教程內容主要為在 PyTorch 中訓練一個
    發表于 12-21 09:18

    pytorch模型轉化為onxx模型的步驟有哪些

    首先pytorch模型要先轉化為onxx模型,然后從onxx模型轉化為rknn模型直接轉化會出現如下問題,環境都是正確的,論壇詢問后也沒給出
    發表于 05-09 16:36

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環境中安裝requirements.txt,包括PyTorch>=1.7。模型和數據集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發表于 07-22 16:02

    通過Cortex來非常方便的部署PyTorch模型

    的工作。那么,問題是如何將 RoBERTa 部署為一個 JSON API,而不需要手動滾動所有這些自定義基礎設施?將 PyTorch 模型與 Cortex 一起投入生產你可以使用 Cortex 自動化部署
    發表于 11-01 15:25

    如何快速機器人投入生產

    一幀。 而機器人能提供些什么動作呢?它主要提供幾個圓的轉動和距離。難度多是三維坐標以及圓形,三角形的計算。如果要更智能,需要加入眼睛,耳朵等其它功能。它主要要生產一個產品的建模數據。或者障礙物,設備
    發表于 06-06 16:18

    Pytorch模型轉換為DeepViewRT模型時出錯怎么解決?

    我正在尋求您的幫助以解決以下問題.. 我在 Windows 10 上安裝了 eIQ Toolkit 1.7.3,我想將我的 Pytorch 模型轉換為 DeepViewRT (.rtm) 模型,這樣
    發表于 06-09 06:42

    pytorch模型轉換需要注意的事項有哪些?

    什么是JIT(torch.jit)? 答:JIT(Just-In-Time)是一組編譯工具,用于彌合PyTorch研究與生產之間的差距。它允許創建可以在不依賴Python解釋器的情況下運行的模型
    發表于 09-18 08:05

    龍芯產業基地落戶廣州 不久將會投入生產

    龍芯產業基地落戶廣州 不久將會投入生產 “共建龍芯廣州產業基地”簽約儀式在廣州舉行,這宣告中國“龍芯”產業基地落戶廣州。記者了解到,
    發表于 04-06 09:21 ?689次閱讀

    臺積電7納米工藝已投入生產 5nm明年底投產

    據國外媒體報道,芯片代工商 臺積電 的CEO魏哲家日前透露,他們的7納米工藝已投入生產,更先進的5納米工藝最快會在明年底投產。
    的頭像 發表于 08-01 16:48 ?3479次閱讀

    雙核STM32H7正式投入生產 樣品現已上市

    雙核STM32H7正式投入生產,樣品現已上市
    的頭像 發表于 03-01 12:04 ?3720次閱讀
    雙核STM32H7正式<b class='flag-5'>投入生產</b> 樣品現已上市

    MONAI成像框架快速投入生產,加速醫療健康領域的AI應用

    MONAI(Medical Open Network for AI)是針對醫療健康領域進行優化的開源框架。即將發布的NVIDIA Clara 應用框架現已投入生產,用于醫療健康和生命科學領域的AI應用。
    發表于 12-02 16:46 ?1922次閱讀

    NVIDIA助力微軟將AI Transformer模型投入生產用途

    Microsoft 的目標是,通過結合使用 Azure 與 NVIDIA GPU 和 Triton 推理軟件,率先將一系列強大的 AI Transformer 模型投入生產用途。
    的頭像 發表于 03-28 09:43 ?1253次閱讀

    英偉達A800 GPU 芯片投入生產

    這款新型芯片命名為 A800,其代表了美國半導體公司首次為遵循美國貿易規則為中國制造先進處理器而努力研發的一款產品。英偉達曾表示,出口限制可能會使其損失數億美元的收入。英偉達發言人表示,A800 GPU 芯片已于第三季度投入生產
    發表于 11-09 14:24 ?1657次閱讀

    如何使用PyTorch建立網絡模型

    PyTorch是一個基于Python的開源機器學習庫,因其易用性、靈活性和強大的動態圖特性,在深度學習領域得到了廣泛應用。本文將從PyTorch的基本概念、網絡模型構建、優化方法、實際
    的頭像 發表于 07-02 14:08 ?407次閱讀

    使用bq275xx投入生產

    電子發燒友網站提供《使用bq275xx投入生產.pdf》資料免費下載
    發表于 10-18 11:34 ?0次下載
    使用bq275xx<b class='flag-5'>投入生產</b>
    主站蜘蛛池模板: 野花4在线观看| 日本高清免费一本在线观看| 51精品少妇人妻AV一区二区| 美女被爆羞羞天美传媒| 99国产在线观看| 人人听力网mp3下载| 国产成人aaa在线视频免费观看| 小小水蜜桃视频高清在线观看免费| 国产一区二区在线免费观看| 一本道无码字幕在线看| 蜜芽手机在线观看| 被室友C哭调教双性| 无码乱人伦一区二区亚洲一| 狠狠色狠狠色狠狠五月ady| 在线观看国产高清免费不卡| 女人高潮时一吸一夹| 高h 纯肉文| 亚洲免费在线观看| 伦理片在线线手机版韩国免费6| YELLOW视频在线观看大全| 十8禁用B站在线看漫画| 好男人好资源视频高清| 中文在线观看永久免费| 青青草 久久久| 国产午夜精品鲁丝片| 在线中文字幕亚洲日韩| 欧美性猛交AAA片| 国产伦精品一区二区三区免费观看| 亚洲视频一区在线| 女仆乖H调教跪趴| 国产内射AV徐夜夜| 女王黄金vk| 国产成人精品三级在线| 亚洲狠狠97婷婷综合久久久久| 久久精品视频在线直播6| chinese帅哥gv在线看| 天天躁日日躁狠狠躁AV麻豆| 久久er99热精品一区二区| bbw极度另类孕妇| 亚洲 日韩 在线 国产 视频| 久久亚洲精选|