深度模型訓練時CPU或GPU的使用model.to(device)

一、使用device控制使用CPU還是GPU

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
# 單GPU或者CPU.先判斷機器上是否存在GPU,沒有則使用CPU訓練
model = model.to(device)
data = data.to(device)#或者在確定有GPU的情況下,直接使用
model = model.cuda()
data = data.cuda()#在確定沒有GPU的情況下,直接使用
model = model.cpu()
data = data.cpu()

注意:

1.tensor和numpy都是矩陣,前者能在GPU上運行,后者只能在CPU運行,所以要注意數據類型的轉換。

2.當你使用model.to(device)時,它會將模型的參數和緩沖區移動到指定的設備上。而當你使用model = model.to(device)時,它會將整個模型移動到指定的設備上。

二、.to(device)和.cuda()設置GPU的區別

建議使用model.to(device)的方式,這樣可以顯示指定需要使用的計算資源,特別是有多個GPU的情況下,可以并行處理,加快速度。

參考.to(device)和.cuda()設置GPU的區別_.cuda()和to(device)-CSDN博客

.to(device) 可以指定CPU 或者GPU

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
# 單GPU或者CPU
model.to(device)
#如果是多GPU
if torch.cuda.device_count() > 1:model = nn.DataParallel(model,device_ids=[0,1,2])
model.to(device)

.cuda() 只能指定GPU

#指定某個GPU
os.environ['CUDA_VISIBLE_DEVICES']="1"
model.cuda()
#如果是多GPU
os.environ['CUDA_VISIBLE_DEVICES'] = "0,1,2,3"
device_ids = [0,1,2,3]
net  = torch.nn.Dataparallel(net, device_ids =device_ids)
net  = torch.nn.Dataparallel(net) # 默認使用所有的device_ids 
net = net.cuda()model.cuda()
#如果是多GPU
os.environment['CUDA_VISIBLE_DEVICES'] = '0,1,2,3'
device_ids = [0,1,2,3]
net  = torch.nn.Dataparallel(net, device_ids =device_ids)
net  = torch.nn.Dataparallel(net) # 默認使用所有的device_ids 
net = net.cuda()

三、指定使用的GPU

使用方式

import os# 給服務器上的GPU編號
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = '0,1,2,3'# 指定要使用哪張卡
device_ids = [0, 1] #假設只用兩張卡# 將模型搬到GPU上,并行化處理
model = torch.nn.DataParallel(model, device_ids=device_ids)
model = model.cuda()
# 或者直接
model = torch.nn.DataParallel(model, device_ids=device_ids).cuda()

四、GPU利用率很低的可能原因分析

訓練中GPU利用率很低4%,CPU利用率很高80%左右,原因分析:

(1)CPU性能不足,沒有ssd加速;

(2)電腦只有一張顯卡,無法并行訓練model;——轉移到服務器上多卡一起并行訓練

(3)模型太復雜,要訓練的參數多;——優化模型

(4)且Dataloader讀入數據的時候numworks=0,單線程讀入比較慢;——numworks=4,適當增大,觀察GPU的提升,但CPU跑滿就沒法再繼續增加了

(5)程序中每次迭代訓練都采用日志保存所有的訓練結果,頻繁I/O讀取;——先不記錄,調好參數之后再訓練時記錄;

小結:主要考慮優化數據讀取(I/O速度);數據傳輸;數據GPU上預處理;優化算法;調整硬件資源;

在不改變硬件條件的情況下,最能夠努力的就是增加數據讀取的進程,以及盡量把數據預處理操作能移到GPU上進行的就都移到GPU上

GPU利用率低解決方案

跑深度學習模型的時候我的gpu利用率很低_mob64ca12d2a342的技術博客_51CTO博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決 Cannot read properties of undefined (reading ‘getUserMedia‘) 報錯

[TOC](解決 Cannot read properties of undefined (reading ‘getUserMedia’) 報錯) 0. 背景 使用瀏覽器輸入語音時,瀏覽器的控制臺里面有下面錯誤信息。 Cannot read properties of undefined (reading getUserMedia)1. 解決方法 在瀏覽器中訪問 chrome://fla…

半導體材料

半導體材料 電子元器件百科 文章目錄 半導體材料前言一、半導體材料是什么二、半導體材料的類別三、半導體材料的應用實例四、半導體材料的作用原理總結前言 半導體材料具有獨特的電學性質,使其在電子器件和集成電路中有廣泛的應用。通過控制半導體材料中載流子的濃度和運動方…

數字化浪潮下,你的企業數字化轉型了嗎?

企業數字化轉型面臨的挑戰 技術轉型挑戰:數字化轉型涉及到各種新技術、新軟件和新硬件,需要企業有一定的技術實力和專業知識,并且需要不斷學習和適應變化。對于傳統企業來說,可能面臨技術門檻高、技術更新快等問題。組織結構轉型…

如何用flex布局設計登錄頁?

使用 Flex 布局設計登錄頁是一種簡單而靈活的方式&#xff0c;讓頁面在不同屏幕大小下都能有良好的布局。以下是一個簡單的例子&#xff0c;演示如何使用 Flex 布局設計登錄頁&#xff1a; HTML 結構&#xff1a; <!DOCTYPE html> <html lang"en"> <…

從Android源碼中生成系統簽名文件

從Android源碼中生成系統簽名文件 文章目錄 從Android源碼中生成系統簽名文件1、在linux中打開編譯android源碼目錄。2、cd到簽名文件位置3、生成 platform.pem文件4、生成 platform.p12 文件5、生成 最終的 platform.jks系統簽名文件6、把platform.jks 放到Studio 項目app 根目…

word中,文本框如何跨頁?

我們經常使用word編輯一些文檔&#xff0c;文檔中往往會有一些比較大的文本框&#xff0c;需要跨多頁&#xff0c;我們可以使用本文章中的方法&#xff0c;將文本框連接在一起&#xff0c;是的內容自動跨頁。 在文字中插入兩個文本框如下圖&#xff1a; 將內容放到第一個文本框…

ubuntu上搭建bazel編譯環境,構建Android APP

背景是github上下載的工程&#xff0c;說明僅支持bazel編譯&#xff0c;折騰了一天Android studio&#xff0c;失敗。 不得不嘗試單價bazel編譯環境&#xff0c;并不復雜&#xff0c;過程記錄如下 說明&#xff1a;ubuntu環境是20.04&#xff0c;pve虛擬機安裝 1.安裝jdk sudo…

Android audio環形緩沖隊列

1、背景 在學習audio的過程中&#xff0c;看到了大神zyuanyun的博客&#xff0c;在博客的結尾&#xff0c;大神留下了這些問題&#xff1a; 但是大神沒有出后續的博文來說明audio環形緩沖隊列的具體實現&#xff0c;這勾起了我強烈的好奇心。經過一段時間的走讀代碼&#xff…

樸素貝葉斯 樸素貝葉斯原理

樸素貝葉斯 樸素貝葉斯原理 判別模型和生成模型 監督學習方法又分生成方法 (Generative approach) 和判別方法 (Discriminative approach)所學到的模型分別稱為生成模型 (Generative Model) 和判別模型 (Discriminative Model)。 樸素貝葉斯原理 樸素貝葉斯法是典型的生成學習…

深度學習之全面了解網絡架構

在這篇文章中&#xff0c;我們將和大家探討“深度學習中的網絡架構”這個主題&#xff0c;解釋相關背景知識&#xff0c;并就一些問題進行解答。 我選擇的問題反映的是常見用法&#xff0c;而不是學術用例。我將概括介紹該主題&#xff0c;然后探討以下四個問題&#xff1a; …

Java的I/O演進之路

文章目錄 通信技術整體解決的問題1 I/O 模型基本說明2 I/O模型Java BIOJava NIOJava AIO 3 BIO、NIO、AIO 適用場景分析 通信技術整體解決的問題 局域網內的通信要求。多系統間的底層消息傳遞機制。高并發下&#xff0c;大數據量的通信場景需要。游戲行業。無論是手游服務端&a…

區塊鏈的可拓展性研究【04】分片

分片屬于layer1擴容 區塊鏈分片是一種技術實現&#xff0c;可以將區塊鏈網絡分成多個片段&#xff0c;每個片段負責處理一部分的交易數據。這種方法可以提高區塊鏈網絡的處理速度和吞吐量&#xff0c;降低交易確認時間和費用&#xff0c;同時也可以減輕節點運行負擔。 在傳統…

【出現模塊node_modules里面包找不到】

#pic_center R 1 R_1 R1? R 2 R^2 R2 目錄 一、出現的問題二、解決辦法三、其它可供參考 一、出現的問題 在本地運行 npm run docs:dev之后&#xff0c;出現 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…

微信小程序base64與十六進制相互轉換(使用btoa、atob方法報undefined)

前言&#xff1a;搜到很多方法都用到了btoa()、atob()&#xff0c;這兩個屬于Window 對象&#xff0c;在瀏覽器端可以直接使用&#xff0c;但是在小程序里面使用會報undefined。看到uniapp和微信小程序官方文檔都提供了下面兩個api&#xff0c;就想著經過ArrayBuffer 對象轉換一…

入門Redis學習總結

記錄之前剛學習Redis 的筆記&#xff0c; 主要包括Redis的基本數據結構、Redis 發布訂閱機制、Redis 事務、Redis 服務器相關及采用Spring Boot 集成Redis 實現增刪改查基本功能 一&#xff1a;常用命令及數據結構 1.Redis 鍵(key) # 設置key和value 127.0.0.1:6379> set …

解釋AI決策,這10個強大的 Python 庫記得收藏!

本文整理了10個常用于可解釋AI的Python庫&#xff0c;方便我們更好的理解AI模型的決策。 什么是XAI&#xff1f; XAI&#xff08;Explainable AI&#xff09;的目標是為模型的行為和決策提供合理的解釋&#xff0c;這有助于增加信任、提供問責制和模型決策的透明度。XAI 不僅…

《深入淺出進階篇》洛谷P3197 越獄——集合

洛谷P3197 越獄 題目大意&#xff1a; 監獄有 n 個房間&#xff0c;每個房間關押一個犯人&#xff0c;有 m 種宗教&#xff0c;每個犯人會信仰其中一種。如果相鄰房間的犯人的宗教相同&#xff0c;就可能發生越獄&#xff0c;求有多少種狀態可能發生越獄。 答案對100,003 取模。…

Temu賣家如何獲取流量?Temu新手賣家流量來源哪里?——站斧瀏覽器

流量對于每個平臺來說都是很重要的&#xff0c;那么Temu賣家如何獲取流量&#xff1f;流量來源哪里&#xff1f; Temu賣家如何獲取流量&#xff1f; 1、優化產品標題和描述&#xff1a;在Temu平臺上&#xff0c;買家通常通過搜索關鍵詞來尋找他們感興趣的產品。因此&#xff…

【數電筆記】58-同步D觸發器

目錄 說明&#xff1a; 1. 電路組成 2. 邏輯功能 3. 特性表、特性方程 4. 狀態轉移圖 例題 5. 同步D觸發器的特點 6. 集成同步D觸發器&#xff1a;74LS375 74LS375內部原理 說明&#xff1a; 筆記配套視頻來源&#xff1a;B站本系列筆記并未記錄所有章節&#xff0c;…

服務器部署網易開源TTS | EmotiVoice部署教程

一、環境 ubuntu 20.04 python 3.8 cuda 11.8二、部署 1、docker方式部署 1.1、安裝docker 如何安裝docker&#xff0c;可以參考這篇文章 1.2、拉取鏡像 docker run -dp 127.0.0.1:8501:8501 syq163/emoti-voice:latest2、完整安裝 安裝python依賴 conda create -n Emo…