網站首頁 編程語言 正文
基于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 0;2.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
相關推薦
- 2022-11-30 GoLang?channel底層代碼分析詳解_Golang
- 2023-07-27 Android webview加載https鏈接錯誤或無響應的解決
- 2021-12-17 element-ui dialog彈窗 點擊空白處使彈窗區不關閉
- 2022-06-21 Android實現登陸界面的記住密碼功能_Android
- 2022-06-29 tomcat下部署jenkins的實現方法_Tomcat
- 2023-02-28 ts之 Mixin混入(ts對象的混入、類的混入)
- 2023-05-21 詳解在Anaconda環境下Python安裝pydot與graphviz的方法_python
- 2022-10-15 Python?pycharm提交代碼遇到沖突解決方法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支