衡阳派盒市场营销有限公司

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

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

3天內不再提示

TorchScript model與eager model的性能區別

麥辣雞腿堡 ? 來源:古月居 ? 作者:bug404 ? 2023-11-08 17:08 ? 次閱讀

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])

然后分別在CPUGPU上測試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
    cpu
    +關注

    關注

    68

    文章

    10905

    瀏覽量

    213029
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89582
  • 模型
    +關注

    關注

    1

    文章

    3313

    瀏覽量

    49229
收藏 人收藏

    評論

    相關推薦

    DAC5672的model 有沒有其他格式的?

    DAC問題 誰可以提供DAC5672的 *** model,或提供與DAC5672性能相近的DAC的model 也可以,還是說TI的網站上,對于DAC除了有IBIS格式的,沒有其他格式的嗎?希望大家給個準信!
    發表于 01-21 06:14

    Java開發:Web開發模式——ModelⅠ#Java

    JAVAModel
    學習硬聲知識
    發布于 :2022年11月16日 13:25:45

    Java開發:Web開發模式——ModelⅡ#Java

    JAVAModel
    學習硬聲知識
    發布于 :2022年11月16日 13:26:13

    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

    使用Redis緩存model

    〈譯〉使用REDIS處理RAILS MODEL緩存
    發表于 04-18 17:07

    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 ?1499次閱讀

    Model Y車型類似Model3 但續航里程會低于Model3

    馬斯克在連續發布了Model3標準版上市、關閉線下門店等多項重大消息之后,繼續放大招,在Twitter上,馬斯克表示,將于3月14日在洛杉磯發布旗下跨界SUV Model Y純電動汽車根據馬斯克此前
    發表于 03-05 16:17 ?2283次閱讀
    <b class='flag-5'>Model</b> Y車型類似<b class='flag-5'>Model</b>3 但續航里程會低于<b class='flag-5'>Model</b>3

    仿真器與Model的本質區別

    仿真器所需的“時間”和“精度”怎么協調?想快就向Digital仿真器靠攏;想準就向Analog靠攏。做Model不是做加法、就是做減法。做Analog出身的熟悉Schematic
    的頭像 發表于 06-08 17:23 ?6715次閱讀

    特斯拉再次調整Model 3/Model Y長續航版的售價

    2月22日消息,據國外媒體報道,在對標準續航升級版和Performance高性能版價格進行調整后,特斯拉再次調整Model 3/Model Y長續航版的起售價。
    的頭像 發表于 02-22 10:23 ?4181次閱讀

    特斯拉Model Y高性能版國內正式交付

    近日,首批特斯拉Model Y高性能版車型已經正式啟動交付,新款特斯拉Model Y在動力方面比標準版和長續航版更強。目前Model Y已經取得了不錯的銷量,特斯拉
    的頭像 發表于 11-25 16:06 ?8960次閱讀

    TorchScript的重要特性和用途

    PyTorch支持兩種模式:eager模式和script模式。eager模式主要用于模型的編寫、訓練和調試,script模式主要是針對部署的,其包含PytorchJIT和TorchScript(一種
    的頭像 發表于 11-08 16:56 ?537次閱讀
    百家乐怎么注册| 金都百家乐官网现金网| 大发888 制度| 大发888娱乐场下载co| 全讯网768866| 大发888娱乐场手机| 百家乐官网投注网出租| 网上百家乐官网骗人吗| 百家乐官网网址是多少| 百家乐官网事电影| 百家乐官网赌场娱乐城大全| 百家乐官网游戏大小| 巨星百家乐官网的玩法技巧和规则| 大亨百家乐官网游戏| 澳门百家乐官网赢钱秘诀| 太阳城百家乐官网公司| 百家乐官网游戏网上投注| 亚洲百家乐官网的玩法技巧和规则| 百家乐高手论坮| 电脑百家乐官网的玩法技巧和规则 | 最好百家乐官网的玩法技巧和规则| 国际娱百家乐官网的玩法技巧和规则 | 上海德州扑克比赛| 突泉县| 百家乐官网游戏试| 百家乐游戏机在哪有| 百家乐新庄| 澳门顶级赌场手机在线登陆| 皇冠国际足球| 15人百家乐官网桌布| 百家乐官网贴士介绍| 百家乐视频二人雀神| 威尼斯人娱乐城送38| 联众德州扑克| 视频百家乐官网赌法| 缅甸百家乐网上投注| 曼哈顿百家乐的玩法技巧和规则 | 百家乐官网智能软件| 百家乐真钱棋牌| 威尼斯人娱乐cheng| 威尼斯人娱乐城免费注册|