国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[模型部署]:深度學(xué)習(xí)模型部署(已更Pytorch篇)

這篇具有很好參考價(jià)值的文章主要介紹了[模型部署]:深度學(xué)習(xí)模型部署(已更Pytorch篇)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

模型部署

一、Pytorch 模型部署

1. 模型保存

1.1. 使用torch.save()保存
  1. 保存和加載state_dict,即只保存模型參數(shù)

    保存:

    torch.save(model.state_dict(), SAVE_PATH)
    

    加載:

    model = ModelClass(*args, **kwargs)
    model.load_state_dict(torch.load(SAVE_PATH))
    model.eval()
    
  2. 保存完整的模型文件

    保存:

    torch.save(model, SAVE_PATH)
    

    加載:

    model = torch.load(SAVE_PATH)
    model.eval()
    
  3. 保存模型并恢復(fù)訓(xùn)練狀態(tài),斷點(diǎn)重訓(xùn)

    # 保存
    state = {
        'epoch': epoch,
        'state_dict': model.state_dict(),
        'optimizer': optimizer.state_dict(),
        ...
    }
    torch.save(state, filepath)
    # 模型與參數(shù)加載
    model.load_state_dict(state['state_dict'])
    optimizer.load_state_dict(state['optimizer'])
    
1.2. 使用torch.jit.save()保存

用于保存編譯過后的模型,跨平臺(tái)使用,模型中只能使用pytorch的函數(shù),可以使用被加載到C ++ API torch::jit::load(filename) 或與Python的API torch.jit.load

torch.jit.save支持保存script類型和trace類型的模為TorchScript,其中script為全量模型,trace為僅保存運(yùn)行過的路徑。

什么是JIT?TorchScript?

JIT(just-in-time compilation,即時(shí)編譯)模式選擇了構(gòu)建well-defined IR的方式。這樣帶來的好處有:

  • 將python runtime和計(jì)算圖(model graph)解耦
  • 獲得C++相比帶GIL的Python的收益
  • 獲得整個(gè)程序,拿到全局信息,來進(jìn)行優(yōu)化
  • 將易于調(diào)試的模式和易于部署/優(yōu)化的模式進(jìn)行切分(算法調(diào)參和算法部署各司其職)

TorchScript是JIT模式的具體形式,是一種從PyTorch代碼創(chuàng)建可序列化和可優(yōu)化模型的方法。任何TorchScript程序都可以從Python進(jìn)程中保存,并加載到?jīng)]有Python依賴的進(jìn)程中。

trace和script的區(qū)別?

1、trace只記錄走過的tensor和對(duì)tensor的操作,不會(huì)記錄任何控制流信息,如if條件句和循環(huán)。因?yàn)闆]有記錄控制流的另外的路,也沒辦法對(duì)其進(jìn)行優(yōu)化。好處是trace深度嵌入python語言,復(fù)用了所有python的語法,在計(jì)算流中記錄數(shù)據(jù)流。

2、script會(huì)去理解所有的code,真正像一個(gè)編譯器一樣去進(jìn)行l(wèi)exer、parser、Semantic analusis的分析「也就是詞法分析語法分析句法分析,形成AST樹,最后再將AST樹線性化」。script相當(dāng)于一個(gè)嵌入在Python/Pytorch的DSL,其語法只是pytorch語法的子集,這意味著存在一些op和語法script不支持,這樣在編譯的時(shí)候就會(huì)遇到問題。此外,script的編譯優(yōu)化方式更像是CPU上的傳統(tǒng)編譯優(yōu)化,重點(diǎn)對(duì)于圖進(jìn)行硬件無關(guān)優(yōu)化,并對(duì)IF、loop這樣的statement進(jìn)行優(yōu)化。

【Pytorch部署】TorchScript

PyTorch系列「一」PyTorch JIT —— trace/ script的代碼組織和優(yōu)化方法

2. 模型部署 or 模型編譯

什么是模型編譯?深度學(xué)習(xí)編譯器?

傳統(tǒng)的編譯器是以高層語言作為輸入,避免直接去寫匯編,機(jī)器碼;而深度學(xué)習(xí)編譯器作用相仿,其輸入是高度抽象的計(jì)算圖,輸出包括CPU或者GPU等硬件平臺(tái)是哪個(gè)的底層代碼和執(zhí)行引擎,即深度學(xué)習(xí)編譯器將不同框架描述的深度學(xué)習(xí)模型為某個(gè)硬件平臺(tái)生成優(yōu)化的代碼。AOT(ahead-of-time compliation)

pytorch部署模型,深度學(xué)習(xí),深度學(xué)習(xí),pytorch,python

深度學(xué)習(xí)編譯器普遍采用的設(shè)計(jì)架構(gòu):

pytorch部署模型,深度學(xué)習(xí),深度學(xué)習(xí),pytorch,python

這類編譯器的通用設(shè)計(jì)體系結(jié)構(gòu)主要包含兩部分:編譯器前端和編譯器后端。 中間表示(IR)橫貫前端和后端。 通常IR是程序的抽象,用于程序優(yōu)化。 具體而言,深度學(xué)習(xí)模型在編譯器中轉(zhuǎn)換為多級(jí)IR,其中高級(jí)IR駐留在前端,而低級(jí)IR駐留在后端。 基于高級(jí)IR,編譯器前端負(fù)責(zé)獨(dú)立于硬件的轉(zhuǎn)換和優(yōu)化。 基于低級(jí)IR,編譯器后端負(fù)責(zé)特定于硬件的優(yōu)化、代碼生成和編譯。

2.1. TorchScript部署

參見上文

2.2. TensorRT部署

tensorrt 部署 pth:

  1. 使用pytorch訓(xùn)練得到pt文件;
  2. 將pt文件轉(zhuǎn)換為onnx中間件;
  3. 使用onnxsim.simplify對(duì)轉(zhuǎn)換后的onnx進(jìn)行簡化;
  4. 解析onnx文件構(gòu)建trt推理引擎;cd tensorrt_path/bin && ./trtexec --onnx=*.onnx --saveEngine=*.trt
    1. 導(dǎo)出網(wǎng)絡(luò)定義以及相關(guān)權(quán)重;
    2. 解析網(wǎng)絡(luò)定義以及相關(guān)權(quán)重;
    3. 根據(jù)顯卡算子構(gòu)造出最優(yōu)執(zhí)行計(jì)劃;
    4. 將執(zhí)行計(jì)劃序列化存儲(chǔ);
    5. 反序列化執(zhí)行計(jì)劃;
    6. 進(jìn)行推理

pytorch中使用TensorRT

2.3. TVM部署

模型在使用 TVM 編譯器框架進(jìn)行轉(zhuǎn)換時(shí)所采取的步驟。

pytorch部署模型,深度學(xué)習(xí),深度學(xué)習(xí),pytorch,python

  1. 從Tensorflow、PyTorchOnnx等框架導(dǎo)入模型。

    TVM 導(dǎo)入層是從其他框架(如 Tensorflow、PyTorch 或 ONNX)導(dǎo)入模型,如果在將模型導(dǎo)入 TVM 時(shí)遇到問題,想嘗試將其轉(zhuǎn)換為 ONNX(更適配)。

  2. 將導(dǎo)入的模型翻譯成TVM 的高級(jí)模型語言Relay。

    已導(dǎo)入 TVM 的模型在 Relay 中表示。Relay 是模型的中間表示 (Intermediate representation, IR)。支持:

    • 傳統(tǒng)數(shù)據(jù)流表示
    • Functional-style scoping, let-binding which makes it a fully featured differentiable language
    • 允許混合兩種編程風(fēng)格的能力

    Relay 應(yīng)用圖級(jí)優(yōu)化傳遞來優(yōu)化模型。

  3. Lower到Tensor expression(TE) 表示。

    Lower是指將高級(jí)表示轉(zhuǎn)換為低級(jí)表示。在應(yīng)用高級(jí)優(yōu)化后,Relay 運(yùn)行 FuseOps pass 將模型劃分為許多小子圖,并將子圖降低為 TE 表示。張量表達(dá)式 (TE) 是一種用于描述張量計(jì)算的domain-specific語言。TE 還提供了幾個(gè)schedule來指定low-level loop優(yōu)化,例如tiling、vectorization、parallelization、unrolling和fusion。為了幫助將Relay representation轉(zhuǎn)換為 TE represention的過程,TVM 包括一個(gè)張量運(yùn)算符清單 (Tensor Operator Inventory, TOPI),它具有預(yù)定義的常用張量運(yùn)算符模板(例如,conv2d、轉(zhuǎn)置)。

  4. 使用auto-tuning模塊AutoTVMAutoScheduler搜索最佳schedule。

    schedule為 TE 中定義的運(yùn)算符或子圖指定的低級(jí)循環(huán)進(jìn)行優(yōu)化。auto-tuning模塊搜索最佳schedule并將其與cost model和on-device measurement進(jìn)行比較。TVM 中有兩個(gè)auto-tuning模塊。

    • AutoTVM:基于模板的自動(dòng)調(diào)整模塊。它運(yùn)行搜索算法來找到最佳值。對(duì)于常用的算子,TOPI 中已經(jīng)提供了模板。
    • AutoScheduler(又名 Ansor):一個(gè)無模板的自動(dòng)調(diào)整模塊。它不需要預(yù)定義的schedule模板。相反,它通過分析計(jì)算定義自動(dòng)生成搜索空間。然后它在生成的搜索空間中搜索最佳schedule。
  5. 選擇模型編譯的最佳配置。

    調(diào)優(yōu)后,自動(dòng)調(diào)優(yōu)模塊會(huì)生成JSON格式的調(diào)優(yōu)記錄。此步驟為每個(gè)子圖選擇最佳schedule。

  6. Lower to Tensor Intermediate Representation (TIR),TVM 的低級(jí)中間表示。

    在根據(jù)調(diào)整步驟選擇最佳配置后,每個(gè) TE 子圖都降低到 TIR 并通過低級(jí)優(yōu)化通道進(jìn)行優(yōu)化。接下來,將優(yōu)化后的 TIR 降低到硬件平臺(tái)的目標(biāo)編譯器。這是生成可部署到生產(chǎn)中的優(yōu)化模型的最終代碼生成階段。TVM 支持多種不同的編譯器后端,包括:

    • LLVM,它可以針對(duì)任意微處理器架構(gòu),包括標(biāo)準(zhǔn) x86 和 ARM 處理器、AMDGPU 和 NVPTX 代碼生成,以及 LLVM 支持的任何其他平臺(tái)。
    • 專用編譯器,例如 NVCC,NVIDIA 的編譯器。
    • 嵌入式和專用目標(biāo),通過 TVM 的Bring Your Own Codegen (BYOC) 框架實(shí)現(xiàn)。
  7. 編譯成機(jī)器代碼。

    在此過程結(jié)束時(shí),特定于編譯器的生成代碼可以lower為機(jī)器代碼。

    TVM 可以將模型編譯為可鏈接的對(duì)象模塊,然后使用輕量級(jí) TVM runtime 提供的 C API 來動(dòng)態(tài)加載模型然后運(yùn)行,以及使用其他語言(如 Python 和 Rust)的接口。TVM 還可以構(gòu)建捆綁部署,其中runtime與模型結(jié)合在一個(gè)包中。

使用tvmc的python API文章來源地址http://www.zghlxwxcb.cn/news/detail-633415.html

  • TVM 實(shí)戰(zhàn)練習(xí):
    [模型部署]:TVM模型部署實(shí)戰(zhàn)
2.4. Laser部署

到了這里,關(guān)于[模型部署]:深度學(xué)習(xí)模型部署(已更Pytorch篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • PyTorch各種損失函數(shù)解析:深度學(xué)習(xí)模型優(yōu)化的關(guān)鍵(2)

    目錄 詳解pytorch中各種Loss functions mse_loss 用途 用法 使用技巧 注意事項(xiàng) 參數(shù) 數(shù)學(xué)理論公式 代碼演示? margin_ranking_loss 用途 用法 使用技巧 注意事項(xiàng) 參數(shù) 數(shù)學(xué)理論公式 ?代碼演示 multilabel_margin_loss 用途 用法 使用技巧 注意事項(xiàng) 參數(shù) 數(shù)學(xué)理論公式 代碼演示 multilabel_soft_margin_

    2024年01月19日
    瀏覽(40)
  • 【深度強(qiáng)化學(xué)習(xí)】(8) iPPO 模型解析,附Pytorch完整代碼

    【深度強(qiáng)化學(xué)習(xí)】(8) iPPO 模型解析,附Pytorch完整代碼

    大家好,今天和各位分享一下多智能體深度強(qiáng)化學(xué)習(xí)算法 ippo,并基于 gym 環(huán)境完成一個(gè)小案例。完整代碼可以從我的 GitHub 中獲得:https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 多智能體的情形相比于單智能體更加復(fù)雜,因?yàn)?每個(gè)智能體在和環(huán)境交互的同時(shí)也在和其他

    2024年02月03日
    瀏覽(174)
  • 【深度強(qiáng)化學(xué)習(xí)】(6) PPO 模型解析,附Pytorch完整代碼

    【深度強(qiáng)化學(xué)習(xí)】(6) PPO 模型解析,附Pytorch完整代碼

    大家好,今天和各位分享一下深度強(qiáng)化學(xué)習(xí)中的 近端策略優(yōu)化算法 (proximal policy optimization, PPO ),并借助 OpenAI 的 gym 環(huán)境完成一個(gè)小案例,完整代碼可以從我的 GitHub 中獲得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model PPO 算法之所以被提出,根本原因在于 Polic

    2023年04月08日
    瀏覽(28)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn) | 高斯混合模型聚類原理分析

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn) | 高斯混合模型聚類原理分析

    為理解高斯混合模型解決聚類問題的原理,本實(shí)例采用三個(gè)一元高斯函數(shù)混合構(gòu)成原始數(shù)據(jù),再采用GMM來聚類。 1) 數(shù)據(jù) 三個(gè)一元高斯組件函數(shù)可以采用均值和協(xié)方差表示如表1所示: ▍表1 三個(gè)一元高斯組件函數(shù)的均值和協(xié)方差 每個(gè)高斯組件函數(shù)分配不同的權(quán)重,其中1號(hào)組

    2024年02月01日
    瀏覽(27)
  • 【深度強(qiáng)化學(xué)習(xí)】(1) DQN 模型解析,附Pytorch完整代碼

    【深度強(qiáng)化學(xué)習(xí)】(1) DQN 模型解析,附Pytorch完整代碼

    大家好,今天和各位講解一下深度強(qiáng)化學(xué)習(xí)中的基礎(chǔ)模型 DQN,配合 OpenAI 的 gym 環(huán)境,訓(xùn)練模型完成一個(gè)小游戲,完整代碼可以從我的 GitHub 中獲得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model DQN(Deep Q Network) 算法由 DeepMind 團(tuán)隊(duì)提出,是深度神經(jīng)網(wǎng)絡(luò)和 Q-Learning 算

    2023年04月08日
    瀏覽(25)
  • 深度學(xué)習(xí)必備書籍——《Python深度學(xué)習(xí) 基于Pytorch》

    深度學(xué)習(xí)必備書籍——《Python深度學(xué)習(xí) 基于Pytorch》

    作為一名機(jī)器學(xué)習(xí)|深度學(xué)習(xí)的博主,想和大家分享幾本 深度學(xué)習(xí) 的書籍,讓大家更快的入手深度學(xué)習(xí),成為AI達(dá)人!今天給大家介紹的是: 《Python深度學(xué)習(xí) 基于Pytorch》 在人工智能時(shí)代,如何盡快掌握人工智能的核心—深度學(xué)習(xí)呢?相信這是每個(gè)欲進(jìn)入此領(lǐng)域的人面臨的主

    2023年04月09日
    瀏覽(19)
  • 《Python深度學(xué)習(xí)基于Pytorch》學(xué)習(xí)筆記

    《Python深度學(xué)習(xí)基于Pytorch》學(xué)習(xí)筆記

    有需要這本書的pdf資源的可以聯(lián)系我~ 這本書不是偏向于非常詳細(xì)的教你很多函數(shù)怎么用,更多的是交個(gè)基本使用,主要是后面的深度學(xué)習(xí)相關(guān)的內(nèi)容。 1.Numpy提供兩種基本的對(duì)象:ndarray(n維數(shù)組對(duì)象)(用于儲(chǔ)存多維數(shù)據(jù))和ufunc(通用函數(shù)對(duì)象,用于處理不同的數(shù)據(jù))。

    2024年02月09日
    瀏覽(20)
  • 《動(dòng)手學(xué)深度學(xué)習(xí) Pytorch版》 8.3 語言模型和數(shù)據(jù)集

    《動(dòng)手學(xué)深度學(xué)習(xí) Pytorch版》 8.3 語言模型和數(shù)據(jù)集

    依靠在 8.1 節(jié)中對(duì)序列模型的分析,可以在單詞級(jí)別對(duì)文本數(shù)據(jù)進(jìn)行詞元化?;靖怕室?guī)則如下: P ( x 1 , x 2 , … , x T ) = ∏ t = 1 T P ( x t ∣ x 1 , … , x t ? 1 ) P(x_1,x_2,dots,x_T)=prod^T_{t=1}P(x_t|x_1,dots,x_{t-1}) P ( x 1 ? , x 2 ? , … , x T ? ) = t = 1 ∏ T ? P ( x t ? ∣ x 1 ? , … , x t ?

    2024年02月07日
    瀏覽(44)
  • 使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評(píng)估深度學(xué)習(xí)模型

    使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評(píng)估深度學(xué)習(xí)模型

    ??????歡迎來到我的博客,你將找到有關(guān)如何使用技術(shù)解決問題的文章,也會(huì)找到某個(gè)技術(shù)的學(xué)習(xí)路線。無論你是何種職業(yè),我都希望我的博客對(duì)你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評(píng)論和反饋。我期待著與你分享知識(shí)、互

    2024年02月07日
    瀏覽(22)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    人工神經(jīng)網(wǎng)絡(luò) ( Artificial Neural Network , ANN ) 是一種監(jiān)督學(xué)習(xí)算法,其靈感來自人類大腦的運(yùn)作方式。類似于人腦中神經(jīng)元連接和激活的方式,神經(jīng)網(wǎng)絡(luò)接受輸入,通過某些函數(shù)在網(wǎng)絡(luò)中進(jìn)行傳遞,導(dǎo)致某些后續(xù)神經(jīng)元被激活,從而產(chǎn)生輸出。函數(shù)越復(fù)雜,網(wǎng)絡(luò)對(duì)于輸入的數(shù)據(jù)擬

    2024年02月06日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包