0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TorchScript model與eager model的性能區(qū)別

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

JIT Trace

torch.jit.trace使用eager model和一個dummy input作為輸入,tracer會根據(jù)提供的model和input記錄數(shù)據(jù)在模型中的流動過程,然后將整個模型轉(zhuǎn)換為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參數(shù)可以直接加載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時,已經(jīng)包含了.eval()的行為,因此不必再去顯式調(diào)用model.eval()
np.mean([timer(traced_model,tokens_tensor,segments_tensors) for _ in range(100)])


# 在GPU上測試TorchScript的性能

最終運行結(jié)果如表

圖片

我使用的硬件規(guī)格是google colab,cpu是Intel(R) Xeon(R) CPU @ 2.00GHz,GPU是Tesla T4。

從結(jié)果來看,在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的結(jié)論一致。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10771

    瀏覽量

    210435
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6759

    瀏覽量

    88616
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3060

    瀏覽量

    48575
收藏 人收藏

    評論

    相關(guān)推薦

    Java開發(fā):Web開發(fā)模式——ModelⅠ#Java

    JAVAModel
    學(xué)習(xí)硬聲知識
    發(fā)布于 :2022年11月16日 13:25:45

    Java開發(fā):Web開發(fā)模式——ModelⅡ#Java

    JAVAModel
    學(xué)習(xí)硬聲知識
    發(fā)布于 :2022年11月16日 13:26:13

    PSpice如何利用Model Editor建立模擬用的Model

    PSpice 提供Model Editor 建立組件的Model,從組件供貨商那邊拿該組件的Datasheet,透過描點的方式就可以簡單的建立組件的Model,來做電路的模擬。PSpice 如何利用
    發(fā)表于 03-31 11:38

    PSpice Model Editor建模

    PSpice Model Editor建模參考資料
    發(fā)表于 06-21 11:02

    IC設(shè)計基礎(chǔ):說說wire load model

    說起wire load model,IC設(shè)計EDA流程工程師就會想到DC的兩種工具模式:線負(fù)載模式(wire load mode)和拓?fù)淠J?topographicalmode)。為什么基本所有深亞
    發(fā)表于 05-21 18:30

    使用Redis緩存model

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

    Model B的幾個PCB版本

    盡管樹莓派最新版的型號Model B+目前有著512 MB的內(nèi)存和4個USB端口,但這些都不會是一成不變的。除了Model B+外,標(biāo)準(zhǔn)的Model B還有兩個變種的型號。如果你買到的是一個雙面的樹莓派
    發(fā)表于 08-08 07:17

    Model3電機是什么

    Model3電機拆解 汽車攻城獅交流異步電機交流異步電機也叫感應(yīng)電機,由定子和轉(zhuǎn)子組成。定子鐵芯一般由硅鋼片疊壓而成,有良好的導(dǎo)磁性能,定子鐵芯的內(nèi)圓上有分布均勻的槽口,這個槽口是用來安放定子繞組的
    發(fā)表于 08-26 09:12

    Cycle Model Studio 9.2版用戶手冊

    性能可鏈接對象,稱為Cycle Model,它既精確于循環(huán),又精確于寄存器。循環(huán)模型提供了與驗證環(huán)境對接的功能。 此外,Cycle Model Studio可以編譯與特定設(shè)計平臺兼容的模型,如SoC
    發(fā)表于 08-12 06:26

    性能全面升級的特斯拉Model S/Model X到來

     據(jù)外媒7月3日消息,在全新車型Model 3即將上市之際,特斯拉公布了對其現(xiàn)有兩款車型Model S和Model X的一系列升級,旨在提高其非性能車型的加速能力。
    發(fā)表于 07-06 09:13 ?1464次閱讀

    Model Y車型類似Model3 但續(xù)航里程會低于Model3

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

    仿真器與Model的本質(zhì)區(qū)別

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

    特斯拉再次調(diào)整Model 3/Model Y長續(xù)航版的售價

    2月22日消息,據(jù)國外媒體報道,在對標(biāo)準(zhǔn)續(xù)航升級版和Performance高性能版價格進(jìn)行調(diào)整后,特斯拉再次調(diào)整Model 3/Model Y長續(xù)航版的起售價。
    的頭像 發(fā)表于 02-22 10:23 ?4064次閱讀

    特斯拉Model Y高性能版國內(nèi)正式交付

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

    TorchScript的重要特性和用途

    PyTorch支持兩種模式:eager模式和script模式。eager模式主要用于模型的編寫、訓(xùn)練和調(diào)試,script模式主要是針對部署的,其包含PytorchJIT和TorchScript(一種
    的頭像 發(fā)表于 11-08 16:56 ?442次閱讀