Pytorch基礎:torch.cuda.set_device函數

相關閱讀

Pytorch基礎icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12457644.html?spm=1001.2014.3001.5482


????????torch.cuda.set_device函數用于設置當前使用的cuda設備,在當擁有多個可用的GPU且能被pytorch識別的cuda設備情況下(環境變量CUDA_VISIBLE_DEVICES可以影響GPU設備到cuda設備的映射)。

? ? ? ? 由于有些情況下,可以不顯式寫出cuda設備的編號,此時指的是當前使用的cuda設備,默認為cuda0設備,如下所示。

import torch
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備a=torch.tensor([1, 2, 3, 4, 5], device='cuda') # 在當前cuda設備上創建一個張量
print(a)device=torch.device('cuda')                    # 創建一個當前cuda設備b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在當前cuda設備上創建一個張量
print(b)c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 將張量移動到當前cuda設備
print(c)d=torch.tensor([1, 2, 3, 4, 5]).to('cuda')     # 將張量移動到當前cuda設備
print(d)e=torch.tensor([1, 2, 3, 4, 5]).cuda()         # 將張量移動到當前cuda設備
print(e)f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 將張量移動到當前cuda設備
print(f)輸出:
當前cuda設備是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')

? ? ? ? 可以看到上面幾個例子的在創建和轉移張量時,指定了沒有編號的當前cuda字符串,創建和使用的設備也是沒有編號的當前cuda設備,在使用.cuda()方法時也沒有指定編號或者使用了當前cuda設備。

? ? ? ? 使用torch.cuda.set_device函數可以設置任意一個可用的cuda設備為當前cuda設備,這會影響有關當前cuda設備的命令,如下所示。

import torchtorch.cuda.set_device(1)                            # 設置當前cuda設備編號為1
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
a=torch.tensor([1, 2, 3, 4, 5], device='cuda') # 在當前cuda設備上創建一個張量
print(a)device=torch.device('cuda')                    # 創建一個當前cuda設備torch.cuda.set_device(2)                       # 設置當前cuda設備編號為2
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在當前cuda設備上創建一個張量
print(b)torch.cuda.set_device(0)                       # 設置當前cuda設備編號為0
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 將張量移動到當前cuda設備
print(c)torch.cuda.set_device(1)                       # 設置當前cuda設備編號為1
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
d=torch.tensor([1, 2, 3, 4, 5]).to('cuda')     # 將張量移動到當前cuda設備
print(d)torch.cuda.set_device(2)                       # 設置當前cuda設備編號為2
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
e=torch.tensor([1, 2, 3, 4, 5]).cuda()         # 將張量移動到當前cuda設備
print(e)torch.cuda.set_device(0)                       # 設置當前cuda設備編號為0
print("當前cuda設備是", torch.cuda.current_device()) # 獲取當前cuda設備
f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 將張量移動到當前cuda設備
print(f)輸出:
當前cuda設備是 1
tensor([1, 2, 3, 4, 5], device='cuda:1')
當前cuda設備是 2
tensor([1, 2, 3, 4, 5], device='cuda:2')
當前cuda設備是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')
當前cuda設備是 1
tensor([1, 2, 3, 4, 5], device='cuda:1')
當前cuda設備是 2
tensor([1, 2, 3, 4, 5], device='cuda:2')
當前cuda設備是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')

? ? ? ? 從上面的例子中,可以看出torch.cuda.set_device函數可以接受一個正整數參數作為編號,改變當前cuda設備。它還可以接受一個device對象作為參數,前提是這個device對象是有編號(即不能是當前cuda設備)。

device =torch.device('cuda:1')
torch.cuda.set_device(device) # 這是可行的
device =torch.device('cuda')
torch.cuda.set_device(device) # 這是錯誤的,因為device是一個沒有編號的當前cuda設備對象輸出:
ValueError: Expected a torch.device with a specified index or an integer, but got:cuda

? ? ? ? pytorch官方不建議使用這個函數,而是直接顯式指明有關cuda設備的編號,而不是依賴當前設備,如下所示。

import torcha=torch.tensor([1, 2, 3, 4, 5], device='cuda:1') # 在cuda1設備上創建一個張量
print(a)device=torch.device('cuda:2')                  # 創建一個cuda2設備b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在cuda2設備上創建一個張量
print(b)c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 將張量移動到cuda2設備
print(c)d=torch.tensor([1, 2, 3, 4, 5]).to('cuda:0')   # 將張量移動到cuda0設備
print(d)e=torch.tensor([1, 2, 3, 4, 5]).cuda(1)        # 將張量移動到cuda1設備
print(e)f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 將張量移動到cuda2設備
print(f)輸出:
tensor([1, 2, 3, 4, 5], device='cuda:1')
tensor([1, 2, 3, 4, 5], device='cuda:2')
tensor([1, 2, 3, 4, 5], device='cuda:2')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:1')
tensor([1, 2, 3, 4, 5], device='cuda:2')

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

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

相關文章

【AI大模型】自動生成紅隊攻擊提示--GPTFUZZER

本篇參考論文為: Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 雖然LLM在今天的各個領域得到了廣泛的運用…

計算方法實驗7:實現三次樣條插值算法

任務 point.txt文件中包含了21個壓鐵的位置信息 利用大M法計算出木條在壓鐵控制下的曲線,邊界條件取自然邊界條件;將第10個壓鐵的位置移動至(0,10),計算出新的曲線,觀察每個區間內的三次函數是否改變。 算法 μ i M i ? 1 2 …

MacOS java多版本安裝與管理

Home - SDKMAN! the Software Development Kit Manager # 安裝sdkman curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk version正常出現sdkman版本號就安裝成功了 # 安裝java # 安裝java8 sdk install java 8.0…

論文筆記:僅一個進程故障就無法達成共識

僅一個進程故障就無法達成共識 僅一個進程故障指的是在異步的分布式系統中 摘要 異步系統的共識問題(consensus)涉及一組進程,其中有的進程可能不可靠(unreliable)。共識問題要求可靠的進程一致地從兩個侯選中決定&…

【MATLAB源碼-第207期】基于matlab的單相光伏并網系統仿真,并網策略采用基于擾動觀測法的MPPT模型和使用電壓電流雙閉環SPWM控制。

操作環境: MATLAB 2022a 1、算法描述 本文將重點分析光伏發電最大功率點跟蹤(MPPT)技術和逆變器的并網控制技術,并在Simulink環境下建立模擬系統,以體現這些技術的應用與效果。文章結構如下:首先簡介光伏…

OpenAI下周發布更新;TikTok將自動標記AIGC;智譜AI亮相2024 ICLR

OpenAI 官宣下周舉辦直播發布更新 OpenAI 今日凌晨官宣,將在當地時間 5 月 13 日上午十點(北京時間 5 月 14 日凌晨兩點)在官網進行直播,屆時將演示一些 ChatGPT 和 GPT-4 的更新。 OpenAI CEO Sam Altman 補充表示,屆…

【算法刷題day44】Leetcode:518. 零錢兌換 II、377. 組合總和 Ⅳ

文章目錄 Leetcode 518. 零錢兌換 II解題思路代碼總結 Leetcode 377. 組合總和 Ⅳ解題思路代碼總結 草稿圖網站 java的Deque Leetcode 518. 零錢兌換 II 題目:518. 零錢兌換 II 解析:代碼隨想錄解析 解題思路 先遍歷物品,再遍歷背包。 代碼…

2024軟件測試面試必備面試題大全

1. 請自我介紹一下(需簡單清楚的表述自已的基本情況,在這過程中要展現出自信,對工作有激情,上進,好學) 面試官您好,我叫###,今年26歲,來自江西九江,就讀專業是電子商務,…

PCIE協議-2-事務層規范-MEM/IO/CFG request rules

2.2.7 內存、I/O和配置請求規則 以下規則適用于所有內存、I/O和配置請求。每種類型的請求還有特定的額外規則。 所有內存、I/O和配置請求除了常見的頭標字段外,還包括以下字段:requester ID[15:0]和Tag[9:0],形成事務ID。Last DW BE[3:0] a…

ICode國際青少年編程競賽- Python-2級訓練場-列表遍歷

ICode國際青少年編程競賽- Python-2級訓練場-列表遍歷 1、 for i in range(3):Flyer[i].step(2) Dev.step(6)2、 for i in range(7):Flyer[i].step() Dev.step(Item.x - Dev.x)3、 for i in range(3):Flyer[i].step(1) Dev.step(4) Dev.turnLeft() Dev.step(2) Dev.turnL…

【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana鏈路追蹤(一)

文章目錄 1、最終效果2、前提準備2、環境信息3、服務集成(Opentelemetry ->Tempo)3.1 上報鏈路數據3.1.1 下載opentelemetry-agent3.1.2 啟動配置業務app3.1.3 配置opentelemetry輸入輸出3.1.4 配置grafana datasource3.1.4.1 配置tempo3.1.4.2 配置l…

快速判斷出485從站設備是否支持MODBUS RTU無線通訊

對于變頻器和儀表設備,都支持485串口通訊,那么怎么判斷從站設備支持那種協議呢?通常分為兩種方式去判斷:1.從設備參數參看2.從設備通訊報文查看。本次文章以以臺達MH300系列變頻器為例。 1.從設備通訊參數查看 使用設備之前一定…

資料如何打印更省錢

在日常工作和學習中,我們經常需要打印各種資料。然而,隨著打印成本的不斷提高,如何更省錢地打印資料成為了大家關注的焦點。今天,就為大家分享一些資料打印的省錢技巧,并推薦一個省錢又省心的打印平臺。 首先&#xff…

【話題】軟件開發的航海圖:程序員的實用神器探秘

大家好,我是全棧小5,歡迎閱讀小5的系列文章,這是《話題》系列文章 目錄 背景一、代碼編寫二、版本控制三、測試與調試四、部署與運維五、總結文章推薦 背景 在軟件開發的廣闊海洋中,每一位程序員都是一位勇敢的航海家&#xff0c…

大模型日報2024-05-13

大模型日報 2024-05-13 大模型資訊 谷歌推出Gemini生成式AI平臺 摘要: 生成式人工智能正在改變我們與技術的互動方式。谷歌最近推出了名為Gemini的新平臺,該平臺代表了其在生成式AI領域的最新進展。Gemini平臺集成了一系列先進的工具和功能,旨在為用戶提…

什么是圖片的像素與分辨率?

什么是像素像素是組成圖像的最小單元,把圖片放大到一定程度,你可以看到許多小方塊,一個方塊就是一個像素,這些小方塊都有一個明確的位置和被分配的色彩數值一個個的小方塊拼合起來,就決定圖像所呈現出來的樣子。 像素…

數據結構-棧的講解

棧的概念及結構 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。 進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底(因為先進后出)。棧中的數據元素遵守后進先出LIFO(Last In Firs…

學習注意力機制并將其應用到網絡中

什么是注意力機制 注意力機制的核心重點就是讓網絡關注到它更需要關注的地方。 當我們使用卷積神經網絡去處理圖片的時候,我們會更希望卷積神經網絡去注意應該注意的地方,而不是什么都關注,我們不可能手動去調節需要注意的地方,…

【Pytest官方文檔翻譯及學習】2.1 如何調用pytest

目錄 2.1 如何調用pytest 2.1.1 指定要運行的測試 2.1.2 獲取有關版本、選項名稱、環境變量的幫助 2.1.3 分析測試執行時間 2.1.4 管理加載插件 2.1.5 調用pytest的其他方式 2.1 如何調用pytest 2.1.1 指定要運行的測試 Pytest支持幾種從命令行運行和選擇測試的方法。、…

證明力引導算法forceatlas2為什么不是啟發式算法

一、基本概念 吸引力 F a ( n i ) ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j \displaystyle \bm{F}_a(n_i) \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} Fa?(ni?)nj?∈Nctd?(ni?)∑?ωi,j?dE?(ni?,nj?…