日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

基于Pytorch使用GPU運行模型方法及可能出現的問題解決方法

作者:rothschildlhl 更新時間: 2022-10-25 編程語言

基于Pytorch使用GPU運行模型方法及注意事項

一、在基于pytorch深度學習進行模型訓練和預測的時候,往往數據集比較大,而且模型也可能比較復雜,但如果直接訓練調用CPU運行的話,計算運行速度很慢,因此使用GPU進行模型訓練和預測是非常有必要的,可以大大提高實驗效率。如果還沒有配置好運行環境的博友們可以參考下面博主的文章。

1、點擊打開《基于Windows中學習Deep Learning之搭建Anaconda+Cudnn+Cuda+Pytorch+Pycharm工具和配置環境完整最簡版》文章
2、點擊打開《基于Pytorch查看本地或者遠程服務器GPU及使用方法》文章

二、具體方法分為兩個大部分(模型和數據集)。

  • 首先將模型model移動到cuda設備也就是GPU上,注意:此大模型可以內含多個子模型,子模型無需再重復移動到GPU上
model = Net() # 舉例模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
model.to(device) # 移動舉例模型到cuda

或者

model = Net() # 舉例模型
device = torch.cuda.current_device() if args.cuda else torch.device('cpu')
model.to(device) # 移動舉例模型到cuda
  • 將數據集(包含訓練集和測試集及所包含的標簽數據集)移動到cuda設備也就是GPU上,使用數據集.cuda()形式完成。
drug_embeddings = drug_embeddings.cuda()
protein_embeddings = protein_embeddings.cuda()
effectives = effectives.cuda()

或者

drug_embeddings = drug_embeddings.to(device)
protein_embeddings = protein_embeddings.to(device)
effectives = effectives.to(device)

三、問題及方法

  • 問題 1:torch.FloatTensor和torch.cuda.FloatTensor的差異
    在這里插入圖片描述
Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same or input should be a MKLDNN tensor and weight is a dense tensor

問題中文翻譯成

輸入類型(torch.FloatTensor)和權重類型(torch.cuda.FloatTensor)應該相同,或者輸入應該是MKLDNN張量,權重是密集張量
  • 問題 2:數據運算過程中需交互的情況下不在同一個設備上
    在這里插入圖片描述
Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

問題中文翻譯成

預期所有張量都在同一設備上,但至少找到了兩個設備,cuda:0 和 cpu !
  • 問題1和問題2解決方法(相同):首先根據錯誤的提示找到代碼中是哪行數據出現的問題,然后針對性的解決,以數據XR出問題舉例,分兩種情況:第一種情況是如果此數據XR通過torch.FloatTensor(數據XR)構造,那么改成torch.cuda.FloatTensor(數據XR)即可;第二種情況是并非構造數據XR,而是將數據XR傳輸到另一個子模型中,那么直接在數據XR的后面加上cuda即可,也就是“數據XR.cuda()”即可。
    在這里插入圖片描述
    在這里插入圖片描述

  • 問題 3:代碼運行過程中CUDA運輸內存不夠分配
    在這里插入圖片描述

CUDA out of memory. Tried to allocate 490.00 MiB (GPU 0; 2.00 GiB total capacity; 954.66 MiB already allocated; 62.10 MiB free; 978.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

問題中文翻譯成

CUDA內存不足。嘗試分配490.00 MiB(GPU 02.00 GiB總容量;954.66 MiB已分配;62.10 MiB可用;PyTorch總共保留978.00 MiB)如果保留內存>>已分配內存,請嘗試設置max_split_size_mb以避免碎片。請參閱內存管理和PYTORCH_CUDA_ALLOC_CONF的文檔
  • 問題3解決方法:運算內存不夠的情況下有兩種解決方法,第一種方法一般縮小數據集批次大小,也就是batch_size縮小,比如:可以將原來batch_size=256那么縮小成batch_size=16;第二種就是去服務器上跑代碼,也就是更換更好的GPU去運行,如果還是出現同樣的問題,那么此兩種方法結合使用最好。
    在這里插入圖片描述
  • 后續出現新的問題會繼續更新,敬請期待!

原文鏈接:https://blog.csdn.net/rothschild666/article/details/127446694

欄目分類
最近更新