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

pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹

這篇具有很好參考價值的文章主要介紹了pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 測量時間的方式

time.time()
time.perf_counter()
time.process_time()

time.time() 和time.perf_counter() 包括sleep()time 可以用作一般的時間測量,time.perf_counter()精度更高一些
time.process_time()當前進程的系統(tǒng)和用戶CPU時間總和的值

測試代碼:

def show_time():
    print('我是time()方法:{}'.format(time.time()))
    print('我是perf_counter()方法:{}'.format(time.perf_counter()))
    print('我是process_time()方法:{}'.format(time.process_time()))
    t0 = time.time()
    c0 = time.perf_counter()
    p0 = time.process_time()
    r = 0
    for i in range(10000000):
        r += i
    time.sleep(2)
    print(r)
    t1 = time.time()
    c1 = time.perf_counter()
    p1 = time.process_time()
    spend1 = t1 - t0
    spend2 = c1 - c0
    spend3 = p1 - p0
    print("time()方法用時:{}s".format(spend1))
    print("perf_counter()用時:{}s".format(spend2))
    print("process_time()用時:{}s".format(spend3))
    print("測試完畢")

測試結果:
pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹
更詳細解釋參考
Python3.7中time模塊的time()、perf_counter()和process_time()的區(qū)別

2. model.eval(), model.train(), torch.no_grad()方法介紹

2.1 model.train()和model.eval()

我們知道,在pytorch中,模型有兩種模式可以設置,一個是train模式、另一個是eval模式。

model.train()的作用是啟用 Batch Normalization 和 Dropout。在train模式,Dropout層會按照設定的參數(shù)p設置保留激活單元的概率,如keep_prob=0.8,Batch Normalization層會繼續(xù)計算數(shù)據(jù)的mean和var并進行更新。

model.eval()的作用是不啟用 Batch Normalization 和 Dropout。在eval模式下,Dropout層會讓所有的激活單元都通過,而Batch Normalization層會停止計算和更新mean和var,直接使用在訓練階段已經(jīng)學出的mean和var值。

在使用model.eval()時就是將模型切換到測試模式,在這里,模型就不會像在訓練模式下一樣去更新權重。但是需要注意的是model.eval()不會影響各層的梯度計算行為,即會和訓練模式一樣進行梯度計算和存儲,只是不進行反向傳播。

2.2 model.eval()和torch.no_grad()

在講model.eval()時,其實還會提到torch.no_grad()。

torch.no_grad()用于停止autograd的計算,能起到加速和節(jié)省顯存的作用,但是不會影響Dropout層和Batch Normalization層的行為。

如果不在意顯存大小和計算時間的話,僅僅使用model.eval()已足夠得到正確的validation的結果;而with torch.zero_grad()則是更進一步加速和節(jié)省gpu空間。因為不用計算和存儲梯度,從而可以計算得更快,也可以使用更大的batch來運行模型。

3. 模型推理時間方式

在測量時間的時候,與一般測試不同,比如下面的代碼不正確:

start = time.time()
result = model(input)
end = time.time()

而應該采用:

torch.cuda.synchronize()
start = time.time()
result = model(input)
torch.cuda.synchronize()
end = time.time()

因為在pytorch里面,程序的執(zhí)行都是異步的。
如果采用代碼1,測試的時間會很短,因為執(zhí)行完end=time.time()程序就退出了,后臺的cu也因為python的退出退出了。
如果采用代碼2,代碼會同步cu的操作,等待gpu上的操作都完成了再繼續(xù)成形end = time.time()

4. 一個完整的測試模型推理時間的代碼

一般是首先model.eval()不啟用 Batch Normalization 和 Dropout, 不啟用梯度更新
然后利用mode創(chuàng)建模型,和初始化輸入數(shù)據(jù)(單張圖像)

def measure_inference_speed(model, data, max_iter=200, log_interval=50):
    model.eval()

    # the first several iterations may be very slow so skip them
    num_warmup = 5
    pure_inf_time = 0
    fps = 0

    # benchmark with 2000 image and take the average
    for i in range(max_iter):

        torch.cuda.synchronize()
        start_time = time.perf_counter()

        with torch.no_grad():
            model(*data)

        torch.cuda.synchronize()
        elapsed = time.perf_counter() - start_time

        if i >= num_warmup:
            pure_inf_time += elapsed
            if (i + 1) % log_interval == 0:
                fps = (i + 1 - num_warmup) / pure_inf_time
                print(
                    f'Done image [{i + 1:<3}/ {max_iter}], '
                    f'fps: {fps:.1f} img / s, '
                    f'times per image: {1000 / fps:.1f} ms / img',
                    flush=True)

        if (i + 1) == max_iter:
            fps = (i + 1 - num_warmup) / pure_inf_time
            print(
                f'Overall fps: {fps:.1f} img / s, '
                f'times per image: {1000 / fps:.1f} ms / img',
                flush=True)
            break
    return fps
if __name__ == "__main__":
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    # device = 'cpu'
    print(device)
    img_channel = 3
    width = 32

    enc_blks = [2, 2, 4, 8]
    middle_blk_num = 12
    dec_blks = [2, 2, 2, 2]

    width = 16
    enc_blks = [1, 1, 1]
    middle_blk_num = 1
    dec_blks = [1, 1, 1]

    net = NAFNet(img_channel=img_channel, width=width, middle_blk_num=middle_blk_num,
                 enc_blk_nums=enc_blks, dec_blk_nums=dec_blks)
    net = net.to(device)

    data = [torch.rand(1, 3, 256, 256).to(device)]
    fps = measure_inference_speed(net, data)
    print('fps:', fps)

    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    # device = 'cpu'
    print(device)
	
	# sample 2
    net = UNetSeeInDark()
    net = net.to(device)

    data = [torch.rand(1, 4, 400, 400).to(device)]
    fps = measure_inference_speed(net, data)
    print('fps:', fps)

    # gpu : 32ms  cpu: 350ms
    summary(net, input_size=(1, 4, 400, 400), col_names=["kernel_size", "output_size", "num_params", "mult_adds"])
    from ptflops import get_model_complexity_info

    macs, params = get_model_complexity_info(net, (4, 400, 400), verbose=True, print_per_layer_stat=True)
    print(macs, params)

pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹

5. 參考:

https://blog.csdn.net/weixin_44317740/article/details/104651434
https://zhuanlan.zhihu.com/p/547033884
https://deci.ai/blog/measure-inference-time-deep-neural-networks/
https://github.com/xinntao/BasicSR文章來源地址http://www.zghlxwxcb.cn/news/detail-462115.html

到了這里,關于pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 模型訓練時使用的 model.train() 和模型測試時使用的 model.eval()

    在 PyTorch 中,模型訓練時使用的? model.train() ?和模型測試時使用的? model.eval() ?分別用于開啟和關閉模型的訓練模式和測試模式。 model.train() ?會將模型設置為訓練模式,啟用 Dropout 和 Batch Normalization 等訓練時特有的操作。這種模式適用于訓練階段,由于 Dropout 在每次迭代時

    2024年02月11日
    瀏覽(32)
  • 【學習】pytorch中with torch.no_grad():和 model.eval()的區(qū)別

    model.eval()和with torch.no_grad()的區(qū)別 先給出結論: 這兩個的所起的作用是不同的。 model.eval()的作用是不啟用Batch Normalization 和 Dropout. 相當于告訴網(wǎng)絡,目前在eval模式,dropout層不會起作用(而在訓練階段,dropout會隨機以一定的概率丟棄掉網(wǎng)絡中間層的神經(jīng)元,而且在實際操作

    2024年02月22日
    瀏覽(22)
  • 【PyTorch如何實現(xiàn)CPU、GPU相互轉換?】

    【PyTorch如何實現(xiàn)CPU、GPU相互轉換?】

    寫代碼時非常困惑,明明下載了cuda支持包和PyTorch-GPU版本,進行NN和CNN時卻是用CPU在進行計算(CPU利用率超90%,GPU利用率不到5%),如下圖: 首先我檢查了PyTorch是否安裝成功,輸入命令print(torch.cuda.is_available()),返回值為True,說明PyTorch是安裝成功了,這可讓我有點捉急。 看

    2024年02月06日
    瀏覽(25)
  • pytorch 安裝部署(cpu+gpu) linux+windows

    pytorch 安裝部署(cpu+gpu) linux+windows

    官網(wǎng)打開可能較慢,耐心等待,可以正常打開。 鏈接:pytorch官網(wǎng) 2023年12月10日更新,演示版本2.1.1 如果中間有任何報錯,參考最后一節(jié)的處理 1.pytorch是一個和tensorflow類似的框架 如果需要安裝tensorflow,可以參考: tensorflow 1,2 cpu+gpu(windows+linux)安裝 2.安裝anaconda 主要是為

    2024年02月03日
    瀏覽(21)
  • pytorch如何查看tensor和model在哪個GPU上以及指定GPU設備

    pytorch如何查看tensor和model在哪個GPU上以及指定GPU設備

    1. 查看tensor所在的設備: 2. 查看model所在的設備 3. Pytorch中將模型和張量加載到GPU的常用方法有兩種。 方式1: 方式2: 4. 指定GPU代碼 參考鏈接:PyTorch 中 選擇指定的 GPU 注意需要將指定GPU代碼放在程序段最開始的部位,如下圖所示: 5.查看gpu個數(shù)

    2024年02月13日
    瀏覽(24)
  • 怎么把pytorch從CPU版本替換成GPU版本

    怎么把pytorch從CPU版本替換成GPU版本

    使用pip命令 pip uninstall torch 就可以卸載當前的torch版本。(不是cpu版本一般也沒有必要重裝吧?) 接著找到官網(wǎng)https://pytorch.org/get-started/locally/ 在里面選擇 根據(jù)你自己的需要選擇最新的(我現(xiàn)在是11.8)或者沒那么新的(11.7)的GPU版torch 接著復制下面的pip3的安裝命令 pip3 ins

    2024年02月13日
    瀏覽(21)
  • conda安裝GPU版pytorch,結果總是cpu版本

    conda安裝GPU版pytorch,結果總是cpu版本

    正常安裝某版本pytorch時,采用官網(wǎng)的方法和對應的命令,選擇適合的pytorch、cudatoolkit版本 Previous PyTorch Versions | PyTorch 由于要在GPU上運行,但測試發(fā)現(xiàn)pytorch裝的是cpuonly的版本: 得到的結果是false 再檢查安裝的pytorch版本,可以看到是cpuonly的版本: 這里建議直接采用解決三 參

    2024年02月06日
    瀏覽(23)
  • pytorch實現(xiàn)簡單的線性回歸cpu版本和gpu版本

    實現(xiàn)步驟 準備數(shù)據(jù) 定義模型 實例化模型,實例優(yōu)化器類,實例loss 循環(huán)進行梯度下降,參數(shù)更新 cpu版本實現(xiàn)

    2024年02月16日
    瀏覽(74)
  • 解決conda安裝的pytorch是CPU版本/conda安裝pytorch的GPU版本

    解決conda安裝的pytorch是CPU版本/conda安裝pytorch的GPU版本

    激活conda環(huán)境,并查看 發(fā)現(xiàn)pytorch版本是cpu_py38*********,代表是CPU版本。 (別太在意原有的庫包,因為cpu版本關聯(lián)了很多包,一個是cpu版本會有不少包都是cpu版本,重裝后缺什么再安裝什么就是了) 我這里指定3.8的py版本重裝一個叫env的環(huán)境 查看當前的conda源中,pytorch的安裝

    2024年02月05日
    瀏覽(19)
  • pytorch2.0.1 安裝部署(cpu+gpu) linux+windows

    pytorch2.0.1 安裝部署(cpu+gpu) linux+windows

    官網(wǎng)打開可能較慢,耐心等待,可以正常打開。 鏈接:pytorch官網(wǎng) 2023年12月10日更新,演示版本2.1.1 如果中間有任何報錯,參考最后一節(jié)的處理 1.pytorch是一個和tensorflow類似的框架 如果需要安裝tensorflow,可以參考: tensorflow 1,2 cpu+gpu(windows+linux)安裝 2.安裝anaconda 主要是為

    2024年02月09日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包