Pytorch 指定GPU號


在使用pytorch的時候利用下面的語句指定GPU為僅為"6",但是用nvidia-smi查看GPU使用時,仍默認為"0"號

import pytorch
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '6'

解決方案:
將上述語句放到當前這個python文件的最開頭,即import torch 之前

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '6'
import torch

GPU指定總結
1. os.environ[‘CUDA_VISIBLE_DEVICES’]=‘x’
如上述,可以在運行的 .py 開頭加入

os.environ['CUDA_VISIBLE_DEVICES'] = 'x'

優點:可以指定多卡;強制設置程序可見某幾塊板子,對於其他不可見的板子就完全沒有影響,
缺點:不方便,只能放在import torch之前,即程序最開頭指定;由於很多時候我們會在.py文件里面寫很多function,然后寫一個main函數入口運行整個文件,這樣一來import torch不得不在os.environ['CUDA_VISIBLE_DEVICES'] = 'x'之前,這種情況下,每次想要換卡的時候,還需要點開.py文件手動修改,不能通過外部傳參修改
2.torch.cuda.set_device(x)
在構建網絡之前,調用torch的set_device指定

torch.cuda.set_device(x)

優點:比較靈活,可以在程序不同地方指定,適用於需要在一個程序里,先后將多個模型分別放到多塊板子上的情況;可以傳參換卡
缺點:只能指定一塊板子
3.命令行運行時指定
在命令行或者.sh文件里,可以在運行.py文件前直接指定:

CUDA_VISIBLE_DEVICES=x python xxx.py

優點:其實就是類似於os.environ['CUDA_VISIBLE_DEVICES']='x',只不過它用起來更加方便
缺點:還是只能指定一塊,而且不能再程序運行中途換卡,適用於一次run,全程只需要占單卡的.py文件
4. torch.nn.DataParallel
當某些情況下需要用到並行訓練的時候,可以用下列語句指定多卡

torch.nn.DataParallel(module, device_ids=[x1,x2,x3,x4,x5,x6,x7])

x1,x2不僅可以是 int. . 還可以是 torch.device

5. export 環境變量
最推薦的是這種,可以在shell里面export CUDA的可見環境變量

`gpu=$1`
`echo "export CUDA_VISIBLE_DEVICES=${gpu}"`
export CUDA_VISIBLE_DEVICES=${gpu}

python main.py # 你要運行的python進程

  


比方說上述這幾條cmd是寫在一個shell:run.sh里面的,那么只要

sh run.sh 1,2

那么這一整個sh里面的python進程都只能可視1,2塊板子
相比於其他方法,這種指定方式是最便捷的,也可以指定多張GPU.

其他注意點
當有小伙伴想要在程序里混合使用上述指定GPU的語句時,需要注意:

os.environ['CUDA_VISIBLE_DEVICES']是設定程序對哪幾張卡可視,一般設定成功之后,接下來程序中任何有關卡號的指定都是相對的。
例如:os.environ['CUDA_VISIBLE_DEVICES'] = '1,2,3',生效之后,再設置torch.cuda.set_device(0),此時pytorch將會使用1號cuda.
其他類似…

torch.cuda.set_device(x)設置GPU之后,torch.cuda.device_count()返回的還是你所有的板子數目,這樣一來后面的程序需要注意一下,可能會有問題
例如:Hugging face 或者google-rearch這種開源的預訓練模型使用Demo,會在程序里count device數目n_gpu,然后會根據n_gpu調整是否使用torch.nn.DataParallel並行訓練BERT,還會影響batch_size。如果你自己設置 torch.cuda.set_device(x),記得最好手動修改n_gpu為1,
其他類似…
————————————————
版權聲明:本文為CSDN博主「WhlittLou」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43301333/article/details/108854504


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM