JIT Trace
torch.jit.trace使用eager model和一個dummy input作為輸入,tracer會根據提供的model和input記錄數據在模型中的流動過程,然后將整個模型轉換為TorchScript module。看一個具體的例子:
我們使用BERT(Bidirectional Encoder Representations from Transformers)作為例子。
from transformers import BertTokenizer, BertModel
import numpy as np
import torch
from time import perf_counter
def timer(f,*args):
start = perf_counter()
f(*args)
return (1000 * (perf_counter() - start))
# 加載bert model
native_model = BertModel.from_pretrained("bert-base-uncased")
# huggingface的API中,使用torchscript=True參數可以直接加載TorchScript model
script_model = BertModel.from_pretrained("bert-base-uncased", torchscript=True)
script_tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', torchscript=True)
# Tokenizing input text
text = "[CLS] Who was Jim Henson ? [SEP] Jim Henson was a puppeteer [SEP]"
tokenized_text = script_tokenizer.tokenize(text)
# Masking one of the input tokens
masked_index = 8
tokenized_text[masked_index] = '[MASK]'
indexed_tokens = script_tokenizer.convert_tokens_to_ids(tokenized_text)
segments_ids = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
# Creating a dummy input
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])
然后分別在CPU和GPU上測試eager mode的pytorch推理速度。
# 在CPU上測試eager model推理性能
native_model.eval()
np.mean([timer(native_model,tokens_tensor,segments_tensors) for _ in range(100)])
# 在GPU上測試eager model推理性能
native_model = native_model.cuda()
native_model.eval()
tokens_tensor_gpu = tokens_tensor.cuda()
segments_tensors_gpu = segments_tensors.cuda()
np.mean([timer(native_model,tokens_tensor_gpu,segments_tensors_gpu) for _ in range(100)])
再分別在CPU和GPU上測試script mode的TorchScript模型的推理速度
# 在CPU上測試TorchScript性能
traced_model = torch.jit.trace(script_model, [tokens_tensor, segments_tensors])
# 因模型的trace時,已經包含了.eval()的行為,因此不必再去顯式調用model.eval()
np.mean([timer(traced_model,tokens_tensor,segments_tensors) for _ in range(100)])
# 在GPU上測試TorchScript的性能
最終運行結果如表

我使用的硬件規格是google colab,cpu是Intel(R) Xeon(R) CPU @ 2.00GHz,GPU是Tesla T4。
從結果來看,在CPU上,TorchScript比pytorch eager快了3.5%,在GPU上,TorchScript比pytorch快了55.6%。
然后我們再用ResNet做一個測試。
import torchvision
import torch
from time import perf_counter
import numpy as np
def timer(f,*args):
start = perf_counter()
f(*args)
return (1000 * (perf_counter() - start))
# Pytorch cpu version
model_ft = torchvision.models.resnet18(pretrained=True)
model_ft.eval()
x_ft = torch.rand(1,3, 224,224)
print(f'pytorch cpu: {np.mean([timer(model_ft,x_ft) for _ in range(10)])}')
# Pytorch gpu version
model_ft_gpu = torchvision.models.resnet18(pretrained=True).cuda()
x_ft_gpu = x_ft.cuda()
model_ft_gpu.eval()
print(f'pytorch gpu: {np.mean([timer(model_ft_gpu,x_ft_gpu) for _ in range(10)])}')
# TorchScript cpu version
script_cell = torch.jit.script(model_ft, (x_ft))
print(f'torchscript cpu: {np.mean([timer(script_cell,x_ft) for _ in range(10)])}')
# TorchScript gpu version
script_cell_gpu = torch.jit.script(model_ft_gpu, (x_ft_gpu))
print(f'torchscript gpu: {np.mean([timer(script_cell_gpu,x_ft.cuda()) for _ in range(100)])}')

TorchScript相比PyTorch eager model,CPU性能提升4.2%,GPU性能提升45%。與Bert的結論一致。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
cpu
+關注
關注
68文章
11279瀏覽量
225017 -
數據
+關注
關注
8文章
7335瀏覽量
94778 -
模型
+關注
關注
1文章
3752瀏覽量
52112
發布評論請先 登錄
相關推薦
熱點推薦
DAC5672的model 有沒有其他格式的?
DAC問題
誰可以提供DAC5672的 *** model,或提供與DAC5672性能相近的DAC的model 也可以,還是說TI的網站上,對于DAC除了有IBIS格式的,沒有其他格式的嗎?希望大家給個準信!
發表于 01-21 06:14
BLE MESH 智能開關開發 情景模式(睡眠、明亮) 藍牙model如何分配,如何配置model
server 和 client model 再加上一個vendor model(對應阿里的那個vendor model),每個繼電器元素的模型有generic onoff server mo
發表于 02-12 23:54
PSpice如何利用Model Editor建立模擬用的Model
PSpice 提供Model Editor 建立組件的Model,從組件供貨商那邊拿該組件的Datasheet,透過描點的方式就可以簡單的建立組件的Model,來做電路的模擬。PSpice 如何利用
發表于 03-31 11:38
IC設計基礎:說說wire load model
說起wire load model,IC設計EDA流程工程師就會想到DC的兩種工具模式:線負載模式(wire load mode)和拓撲模式(topographicalmode)。為什么基本所有深亞
發表于 05-21 18:30
Model B的幾個PCB版本
盡管樹莓派最新版的型號Model B+目前有著512 MB的內存和4個USB端口,但這些都不會是一成不變的。除了Model B+外,標準的Model B還有兩個變種的型號。如果你買到的是一個雙面的樹莓派
發表于 08-08 07:17
Model3電機是什么
—Model3電機拆解 汽車攻城獅交流異步電機交流異步電機也叫感應電機,由定子和轉子組成。定子鐵芯一般由硅鋼片疊壓而成,有良好的導磁性能,定子鐵芯的內圓上有分布均勻的槽口,這個槽口是用來安放定子繞組的
發表于 08-26 09:12
Cycle Model Studio 9.2版用戶手冊
高性能可鏈接對象,稱為Cycle Model,它既精確于循環,又精確于寄存器。循環模型提供了與驗證環境對接的功能。
此外,Cycle Model Studio可以編譯與特定設計平臺兼容的模型,如SoC
發表于 08-12 06:26
性能全面升級的特斯拉Model S/Model X到來
據外媒7月3日消息,在全新車型Model 3即將上市之際,特斯拉公布了對其現有兩款車型Model S和Model X的一系列升級,旨在提高其非性能車型的加速能力。
發表于 07-06 09:13
?1714次閱讀
Model Y車型類似Model3 但續航里程會低于Model3
馬斯克在連續發布了Model3標準版上市、關閉線下門店等多項重大消息之后,繼續放大招,在Twitter上,馬斯克表示,將于3月14日在洛杉磯發布旗下跨界SUV Model Y純電動汽車根據馬斯克此前
發表于 03-05 16:17
?2609次閱讀
仿真器與Model的本質區別
仿真器所需的“時間”和“精度”怎么協調?想快就向Digital仿真器靠攏;想準就向Analog靠攏。做Model不是做加法、就是做減法。做Analog出身的熟悉Schematic
特斯拉再次調整Model 3/Model Y長續航版的售價
2月22日消息,據國外媒體報道,在對標準續航升級版和Performance高性能版價格進行調整后,特斯拉再次調整Model 3/Model Y長續航版的起售價。
特斯拉Model Y高性能版國內正式交付
近日,首批特斯拉Model Y高性能版車型已經正式啟動交付,新款特斯拉Model Y在動力方面比標準版和長續航版更強。目前Model Y已經取得了不錯的銷量,特斯拉
TorchScript的重要特性和用途
PyTorch支持兩種模式:eager模式和script模式。eager模式主要用于模型的編寫、訓練和調試,script模式主要是針對部署的,其包含PytorchJIT和TorchScript(一種
TorchScript model與eager model的性能區別
評論