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

PyTorch多GPU訓(xùn)練模型——使用單GPU或CPU進(jìn)行推理的方法

這篇具有很好參考價值的文章主要介紹了PyTorch多GPU訓(xùn)練模型——使用單GPU或CPU進(jìn)行推理的方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 問題描述

PyTorch提供了非常便捷的多GPU網(wǎng)絡(luò)訓(xùn)練方法:DataParallelDistributedDataParallel。在涉及到一些復(fù)雜模型時,基本都是采用多個GPU并行訓(xùn)練并保存模型。但在推理階段往往只采用單個GPU或者CPU運行。這時怎么將多GPU環(huán)境下保存的模型權(quán)重加載到單GPU/CPU運行環(huán)境下的模型上成了一個關(guān)鍵的問題。

如果忽視環(huán)境問題直接加載往往會出現(xiàn)兩類問題:

1 出現(xiàn)錯誤:IndexError: list index out of range

PyTorch多GPU訓(xùn)練模型——使用單GPU或CPU進(jìn)行推理的方法,神經(jīng)網(wǎng)絡(luò),pytorch,深度學(xué)習(xí),DataParallel,模型加載

出現(xiàn)這個錯誤的原因是:現(xiàn)有模型參數(shù)是在多GPU上獲得并保存的,因此在讀入時默認(rèn)會保存至對應(yīng)的GPU上,但是目前推理環(huán)境中只有一塊GPU,所以導(dǎo)致那些本來在其它GPU上的參數(shù)找不到自己應(yīng)該去的GPU編號,出現(xiàn)了一個溢出錯誤,本質(zhì)是GPU編號溢出。

2 出現(xiàn)錯誤:Missing key(s) in state_dict:

PyTorch多GPU訓(xùn)練模型——使用單GPU或CPU進(jìn)行推理的方法,神經(jīng)網(wǎng)絡(luò),pytorch,深度學(xué)習(xí),DataParallel,模型加載

出現(xiàn)這個錯誤的原因是:由于模型訓(xùn)練和推理的環(huán)境不同,導(dǎo)致一些參數(shù)丟失,因此報錯。目前在網(wǎng)上的一些解決策略是忽視這些丟失的參數(shù),例如使用命令:model.load_state_dict(torch.load('model.pth'), strict=False)
來成功導(dǎo)入模型。這條命令可以讓程序不報錯并看似成功的導(dǎo)入模型參數(shù)。但實際上這條命令的含義是在導(dǎo)入模型參數(shù)時通過設(shè)置 strict=False 來忽略丟失的參數(shù),也就是說那些丟失參數(shù)地方的模型權(quán)重初仍為初始化隨機(jī)狀態(tài),等同于沒有進(jìn)行訓(xùn)練和學(xué)習(xí),何談推理與驗證?。?!

2 模型保存方式

不論是用哪種方式進(jìn)行推理,在訓(xùn)練的時候要保證程序保存模型的方式是這樣的:

torch.save(model.state_dict(), "model.pth")

3 單塊GPU上加載模型

將多GPU訓(xùn)練的權(quán)重文件加載到單GPU上:

# 1 加載模型
model = Model()
# 2 指定運行設(shè)備,這里為單塊GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 3 將模型用DataParallel方法封裝一次
model = torch.nn.DataParallel(model)
# 4 將模型讀入到GPU設(shè)備上
model = model_E2E.to(device)
# 5 加載權(quán)重文件
model.load_state_dict(torch.load(weight_path, map_location=device))

通過上面的程序就可以實現(xiàn)將多塊GPU上訓(xùn)練得到的權(quán)重文件加載到單塊GPU環(huán)境下的模型中。這里有兩點需要注意:

  • 在多GPU訓(xùn)練時,模型使用了 DataParallel
    DistributedDataParallel 方法,這兩種并行化工具會修改模型的結(jié)構(gòu),將模型封裝在一個新的模塊中,通常名為:module。因此在權(quán)重文件中保存的模型是經(jīng)過 DataParallel 封裝后的結(jié)構(gòu)。為了能夠載入全部參數(shù),需要通過步驟3使推理模型與原始多GPU訓(xùn)練模型在結(jié)構(gòu)上保持一致。

  • 在步驟5加載模型參數(shù)時使用了map_location 參數(shù)。這個參數(shù)會告訴 PyTorch在加載模型時應(yīng)該將張量放置在哪個設(shè)備上。設(shè)置map_location=device,那么無論模型原來是在哪個設(shè)備上訓(xùn)練的,現(xiàn)在都將放置在指定的設(shè)備device='cuda:0'上。

4 CPU上加載模型

在CPU上加載模型:

from collections import OrderedDict

# 1 加載模型
model = Model()
# 2 指定設(shè)備CPU
device = "cpu"
# 3 讀取權(quán)重文件
state_dict = torch.load(weight_path, map_location=device)
# 4 剝除權(quán)重文件中的module層
if next(iter(state_dict)).startswith("module."):
    new_state_dict = OrderedDict()
    for k, v in state_dict.items():
        name = k[7:]  # remove `module.`
        new_state_dict[name] = v
    state_dict = new_state_dict
# 5 加載權(quán)重文件
model.load_state_dict(state_dict)
# 6 將模型載入到CPU
model = model.to(device)

在CPU上加載模型的邏輯和GPU的差不多,核心都是因為原權(quán)重文件中的模型被封裝成了module.Model,所以需要將這層外殼去掉,最后再進(jìn)行讀取并將模型加載到CPU上。

5 總結(jié)

在深度學(xué)習(xí)任務(wù)中訓(xùn)練與推理環(huán)境存在差異的情況十分常見 ,有差異的環(huán)境下實現(xiàn)網(wǎng)絡(luò)權(quán)重文件的正確讀取十分重要。實際操作中一定要確保正確的權(quán)重文件被讀入,這是進(jìn)行推理最基本的前提!最好在推理前做一些對比實驗(例如:選取一部分?jǐn)?shù)據(jù),分別套用已有的程序進(jìn)行訓(xùn)練和推理,對比二者的效果)來確保已經(jīng)讀入到正確的權(quán)重。文章來源地址http://www.zghlxwxcb.cn/news/detail-699399.html

到了這里,關(guān)于PyTorch多GPU訓(xùn)練模型——使用單GPU或CPU進(jìn)行推理的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 訓(xùn)練模型時 遇到速度過慢時的深思 & 速度提升 (From GPU & CPU)

    訓(xùn)練模型時 遇到速度過慢時的深思 & 速度提升 (From GPU & CPU)

    torch.nn.DataParallel 在使用多GPU的時候, 使用os.environ[‘CUDA_VISIBLE_DEVICES’]來限制使用的GPU個數(shù) 例如我要使用第0和第3編號的GPU, 那么只需要在程序中設(shè)置: Note: 這個參數(shù)的設(shè)定要保證在模型加載到gpu上之前, 一般在程序開始的時候就設(shè)定好這個參數(shù) 之后, 將模型加載到多GPU上面 如

    2024年01月24日
    瀏覽(22)
  • Pytorch遷移學(xué)習(xí)使用Resnet50進(jìn)行模型訓(xùn)練預(yù)測貓狗二分類

    Pytorch遷移學(xué)習(xí)使用Resnet50進(jìn)行模型訓(xùn)練預(yù)測貓狗二分類

    目錄 ? 1.ResNet殘差網(wǎng)絡(luò) 1.1 ResNet定義 ?1.2 ResNet 幾種網(wǎng)絡(luò)配置 ?1.3 ResNet50網(wǎng)絡(luò)結(jié)構(gòu) 1.3.1 前幾層卷積和池化 1.3.2?殘差塊:構(gòu)建深度殘差網(wǎng)絡(luò) 1.3.3?ResNet主體:堆疊多個殘差塊 1.4 遷移學(xué)習(xí)貓狗二分類實戰(zhàn) 1.4.1 遷移學(xué)習(xí) 1.4.2 模型訓(xùn)練 1.4.3 模型預(yù)測 ? 深度學(xué)習(xí)在圖像分類、目標(biāo)檢

    2024年02月16日
    瀏覽(92)
  • pytorch 測量模型運行時間,GPU時間和CPU時間,model.eval()介紹

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

    time.time() time.perf_counter() time.process_time() time.time() 和time.perf_counter() 包括sleep()time 可以用作一般的時間測量,time.perf_counter()精度更高一些 time.process_time()當(dāng)前進(jìn)程的系統(tǒng)和用戶CPU時間總和的值 測試代碼: 測試結(jié)果: 更詳細(xì)解釋參考 Python3.7中time模塊的time()、perf_counter()和proce

    2024年02月06日
    瀏覽(29)
  • Tensorflow調(diào)用訓(xùn)練好的yolov5模型進(jìn)行推理

    Tensorflow調(diào)用訓(xùn)練好的yolov5模型進(jìn)行推理

    conda search找找當(dāng)前源下的CUDA與cuDNN有沒有我們要的版本: Onnx(Open Neural Network Exchange)是一種開放的深度學(xué)習(xí)模型交換格式,用于在不同的深度學(xué)習(xí)框架之間共享模型。它提供了一個中間格式,可以將模型從一個框架轉(zhuǎn)換為另一個框架。 Tensorflow是一個廣泛使用的深度學(xué)習(xí)框

    2024年02月11日
    瀏覽(26)
  • Python從零開始進(jìn)行AIGC大模型訓(xùn)練與推理

    ????????本專欄將詳細(xì)介紹從零開始進(jìn)行AIGC大模型訓(xùn)練與推理(Python),包括文本生成(GPT系列)和圖片生成(Stable Diffusion系列)等,初步計劃從以下提綱逐步進(jìn)行博文分享,歡迎關(guān)注。 (1)《解密AIGC:人工智能生成內(nèi)容技術(shù)的優(yōu)勢和未來發(fā)展趨勢》,地址為“解密

    2024年02月09日
    瀏覽(46)
  • Pytorch調(diào)用GPU訓(xùn)練兩種方法

    Pytorch調(diào)用GPU訓(xùn)練兩種方法

    我們可以通過對網(wǎng)絡(luò)模型,數(shù)據(jù),損失函數(shù)這三種變量調(diào)用 .cuda() 來在GPU上進(jìn)行訓(xùn)練。 指定 訓(xùn)練的設(shè)備 使用 GPU 訓(xùn)練 查看GPU使用情況 ? ?

    2024年02月17日
    瀏覽(19)
  • 【深入了解PyTorch】PyTorch分布式訓(xùn)練:多GPU、數(shù)據(jù)并行與模型并行

    在深度學(xué)習(xí)領(lǐng)域,模型的復(fù)雜性和數(shù)據(jù)集的巨大規(guī)模使得訓(xùn)練過程變得極具挑戰(zhàn)性。為了加速訓(xùn)練過程,利用多個GPU進(jìn)行并行計算是一種常見的方法。PyTorch作為一種流行的深度學(xué)習(xí)框架,提供了強(qiáng)大的分布式訓(xùn)練工具,使得多GPU、數(shù)據(jù)并行和模型并行等技術(shù)變得更加容易實現(xiàn)

    2024年02月12日
    瀏覽(25)
  • pytorch基于ray和accelerate實現(xiàn)多GPU數(shù)據(jù)并行的模型加速訓(xùn)練

    在pytorch的DDP原生代碼使用的基礎(chǔ)上,ray和accelerate兩個庫對于pytorch并行訓(xùn)練的代碼使用做了更加友好的封裝。 以下為極簡的代碼示例。 ray.py acc.py

    2024年02月11日
    瀏覽(15)
  • 使用onnxruntime-gpu 模型推理

    使用onnxruntime-gpu 模型推理

    1.安裝onnxruntime-gpu 新版的onnxruntime-gpu 即支持gpu的推理,也支持cpu的推理。 卸載舊的1.7.1 cpu版本,安裝新的gpu版本: 檢查是否安裝成功: 2.修改推理代碼 在推理代碼上增加 providers參數(shù),選擇推理的框架??醋约褐С帜膫€就選擇自己支持的就可以了。 如果運行推理代碼出現(xiàn)

    2024年02月15日
    瀏覽(23)
  • 試用阿里云GPU服務(wù)器進(jìn)行深度學(xué)習(xí)模型訓(xùn)練

    最近在用PyTorch時發(fā)現(xiàn)在本地訓(xùn)練模型速度一言難盡,然后發(fā)現(xiàn)阿里云可以白嫖gpu服務(wù)器,只要沒有申請過PAI-DSW資源的新老用戶都可以申請5000CU*H的免費額度,三個月內(nèi)有效。 阿里云免費試用活動頁面 一、申請試用并創(chuàng)建實例 點擊試用,完成注冊、實名、領(lǐng)取產(chǎn)品,然后前往

    2024年04月17日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包