TorchScript介紹
TorchScript是PyTorch模型推理部署的中間表示,可以在高性能環境libtorch(C ++)中直接加載,實現模型推理,而無需Pytorch訓練框架依賴。torch.jit是torchscript Python語言包支持,支持pytorch模型快速,高效,無縫對接到libtorch運行時,實現高效推理。它是Pytorch中除了訓練部分之外,開發者最需要掌握的Pytorch框架開發技能之一。trace使用
Torchscript使用分為兩個部分分別是script跟trace,其中trace是跟蹤執行步驟,記錄模型調用推理時執行的每個步驟,代碼演示如下:
classMyCell(torch.nn.Module):
def__init__(self):
super(MyCell,self).__init__()
self.linear=torch.nn.Linear(4,4)
defforward(self,x,h):
new_h=torch.tanh(self.linear(x)+h)
returnnew_h,new_h
my_cell=MyCell()
x,h=torch.rand(3,4),torch.rand(3,4)
traced_cell=torch.jit.trace(my_cell,(x,h))
print(traced_cell)
traced_cell(x,h)
print(traced_cell.graph)
運行結果如下:
MyCell(
original_name=MyCell
(linear):Linear(original_name=Linear)
)
跟蹤執行結果
graph(%self.1:__torch__.MyCell,
%input:Float(3:4,4:1,requires_grad=0,device=cpu),
%h:Float(3:4,4:1,requires_grad=0,device=cpu)):
%19:__torch__.torch.nn.modules.linear.Linear=prim::GetAttr[name="linear"](%self.1)
%21:Tensor=prim::CallMethod[name="forward"](%19,%input)
%12:int=prim::Constant[value=1]()#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%13:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::add(%21,%h,%12)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%14:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::tanh(%13)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%15:(Float(3:4,4:1,requires_grad=1,device=cpu),Float(3:4,4:1,requires_grad=1,device=cpu))=prim::TupleConstruct(%14,%14)
return(%15)
script部分使用
script是導出模型為中間IR格式文件,支持高性能libtorch C++部署,我們以torchvision中Mask-RCNN導出中間格式IR為例,代碼演示如下:
importtorch
importtorchvisionastv
num_classes=3
model=tv.models.detection.maskrcnn_resnet50_fpn(
pretrained=False,progress=True,
num_classes=num_classes,
pretrained_backbone=True)
im=torch.zeros(1,3,*(1333,800)).to("cpu")
model.load_state_dict(torch.load("D:/gaobao_model.pth"))
model=model.to("cpu")
model.eval()
ts=torch.jit.script(model)
ts.save("gaobao.ts")
loaded_trace=torch.jit.load("gaobao.ts")
loaded_trace.eval()
withtorch.no_grad():
print(loaded_trace(list(im)))
最終得到torchscript文件,支持直接通過libtorch部署,其中通過torchscript C++部分加載的代碼如下:
#include//One-stopheader.
#include
#include
intmain(intargc,constchar*argv[]){
if(argc!=2){
std::cerr<"usage:example-app
" ;
return-1;
}
//DeserializetheScriptModulefromafileusingtorch::load().
torch::Modulemodule=torch::load(argv[1]);
std::vectorinputs;
inputs.push_back(torch::randn({4,8}));
inputs.push_back(torch::randn({8,5}));
torch::Tensoroutput=module.forward(std::move(inputs)).toTensor();
std::cout<std::endl;
}
上面代碼來自官方測試程序,特別說明一下!
審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
開發
+關注
關注
0文章
378瀏覽量
42148 -
C++
+關注
關注
22文章
2124瀏覽量
77121 -
pytorch
+關注
關注
2文章
813瀏覽量
14853
原文標題:輕松學Pytorch之torchscript使用!
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
【「Altium Designer 25 電路設計精進實踐」閱讀體驗】+本書概覽與內容特點介紹
本文以AD 25版本為依托,介紹了AD25進行電子電路設計的方法,理論結合實踐。 內容概覽先來概覽下本書的內容,看一本書的內容,從其目錄就可以看到個大概本書分為以下章節,總體上來說還是按照先理論再
發表于 02-14 15:56
堆棧指針SP介紹
SP 堆棧指針:8位寄存器,用來指示堆棧的位置,可由軟件修改。
堆棧的介紹堆棧是一種按“先進后出”規律操作的存儲結構。不同類型的處理器其堆棧的設計各不相同:
SP寄存器作為堆棧指針。這種結構的特點是
發表于 11-17 06:07
關于系統鏈接腳本的介紹
一、隊伍介紹
本篇為蜂鳥E203系列分享第四篇,本篇介紹的內容是系統鏈接腳本。
二、如何實現不同的下載模式?
實現三種不同的程序運行方式,可通過makefile的命令行指定不同的鏈接腳本,從而實現
發表于 10-30 08:26
NICE端口相關信號簡單介紹與配置
以下對自定義指令情況下的NICE各個端口配置進行詳細介紹。
由于NICE模塊的輸入端口由CPU發送相關信號,因此僅對NICE返回給CPU的端口進行介紹。
NICE返回給CPU的端口分為返回給
發表于 10-30 07:57
Montgomery模乘介紹
Montgomery模乘介紹
Montgomery 模乘算法是最有效的大整數模乘算法之一它的一個顯著特點是消除了mod n 的除法運算。Montgomery 算法的基本思想是計算 ,設n為k比特
發表于 10-22 07:35
shell基本介紹及常用命令之shell基本介紹
是“$”,在命令提示符后邊輸入命令即可和系統進行交互操作。ubuntu默認的Shell是Bash(Bourne Again Shell)。Linux命令有很多,功能比較強大,下節我們簡單介紹一些常用的命令。常用
發表于 09-28 09:05
元器件及單元電路介紹-610頁
元器件及單元電路介紹放大電路基礎,電源電路,正弦波振蕩電路,調制與解調電路,混頻電路與變頻電路,集成運算放大電路,數字集成電路等。
純分享貼,有需要可以直接下載附件獲取完整資料!
(如果內容有幫助可以關注、點贊、評論支持一下哦~)
發表于 05-19 15:41
TorchScript介紹及使用
評論