出一期用於連線遠端Ubuntu系統並配置pytorch環境的教學。2021-07-07 13:35:57-
現在的礦難導致顯示卡大幅度的漲價對很多要做深度學習領域的小夥伴們非常的不友好,配置裝置固然要掏空錢包,那麼租個雲GPU變成個非常經濟的選擇!
但是用黑框命令列操控的Linux系統對很對習慣了用wingdows的同學顯的十分不友好!
於是乎,我出了今天這期教程!
Xshell 7(win系統)是一個用於MS Windows平臺的強大的SSH、TELNET和RLOGIN終端模擬軟體。它使得使用者能輕鬆和安全地從Windows PC上訪問UniX/Linux主機。
簡單地說,X shell就是一個終端模擬軟體,就是模擬伺服器所在的linux,在Xshell中可以輸入命令,就像在伺服器的linux中輸入命令一樣,從而實現遠端控制伺服器。
下面放上基礎的Xshell 7使用教程,介紹一點Xshell使用技巧。
登入伺服器
Xshell 7使用教程的第一部分當然是登入伺服器了。
第一步,登入首先需要我們擁有一臺伺服器,這樣你就有伺服器的IP地址、賬戶和密碼。
第二步,開啟Xshell 7,這時會開啟兩個相疊的視窗,點選上面一個視窗的新建來新建一個新的會話。
第三步,修改名稱以區別主機,並在主機後面的方框中正確地輸入你所擁有的伺服器的IP地址。
第四步,點選左側類別中的使用者身份驗證,然後在對應位置輸入你的伺服器的使用者名稱和密碼。然後點選確認就可以登陸了。
常用快捷鍵
Xshell 7使用教程當然少不了介紹一些常用的快捷鍵。在介紹快捷鍵之前,我們首先要完成一個設定。在選單欄檔案中選擇預設會話屬性,在左側選擇鍵盤,將下圖方框中的兩個選項勾上,操作更加方便。
下面就進入Xshell 7使用教程快捷鍵的介紹。
Ctrl+f 向後移動一個字元
Ctrl+b 向前移動一個字元
Ctrl+a 將游標移至輸入行頭,相當於Home鍵
Ctrl+e 將游標移至輸入行末,相當於End鍵
Alt+f 以單詞為單位,向前移動
Alt+b 以單詞為單位,向前移動
Shift+PgUp 將終端顯示向上滾動
Shift+PgDn 將終端顯示向下滾動
Alt+s 切換到簡單版模式
Alt+Enter 切換至全屏
Ctrl+s 鎖住終端,可用來停留在當前屏
Ctrl+q 解鎖終端,恢復刷屏
Ctrl+d 鍵盤輸入結束或退出終端
Ctrl+s 暫停當前程式,暫停後按下任意鍵恢復執行
Ctrl+z 將當前程式放到後臺執行,恢復到前臺為命令fg
Ctrl+Shift+r 重新連線
Ctrl+Insert 複製
Shift+Insert 貼上
好了,Xshell 7使用教程就先介紹到這裡
接下來是CUDA的安裝教程!
檢視顯示卡是否支援CUDA
基本的環境
首先了解自己伺服器的作業系統核心版本等資訊:
檢視自己作業系統的版本資訊:cat /etc/issue
或者是 cat /etc/lsb-release
等命令
檢視伺服器顯示卡資訊:
lspci | grep -i nvidia
檢視全部顯示卡資訊。nvidia-smi
如果已經安裝了對應的顯示卡驅動的話可以採用這個命令。cat /proc/driver/nvidia/version
檢視安裝的顯示卡的驅動資訊。
CUDA驅動可以去英偉達官網自行下載安裝。如果不會安裝的同學可以看這個教程https://zhuanlan.zhihu.com/p/79059379
建立虛擬環境,構建pytorch環境!
1、進入官網選擇要下載的版本和作業系統
https://www.anaconda.com/distribution/
安裝
一、
找到下載好的檔名為Anaconda3-xxxx-Linux-x86_64的安裝包,如果你是通過自己的電腦下載的安裝包,想在伺服器上面安裝Anaconda,那麼你可以通過scp命令傳輸安裝包到Centos伺服器。如果你是在伺服器上面下載的,那麼請略過此步。
傳輸命令為:scp Anaconda3-xxxx-Linux-x86_64 [email protected]:/home 然後根據提示輸入密碼即可。
等待讀條完成後,就將安裝包傳輸到了Centos伺服器。
二、或者通過xftp 上傳到伺服器home資料夾下
接著進入終端到Anaconda3-2018.12-Linux-x86_64.sh目錄下:
在Linux裡面.sh檔案是可執行的指令碼檔案,需要用命令bash來進行安裝。
此時我們輸入命令bash Anaconda3-2018.12-Linux-x86_64.sh
然後開啟安裝,在安裝過程中,基本上不斷按回車或者yes預設就行了。
環境變數配置
安裝完成後,我們還需要對環境變數進行新增,方便我們啟動。
無論是哪種核心(版本)的系統,都可以通過修改/etc/profile或者/etc/bashrc的配置資訊來達到設定環境變數的目的
在這裡我們修改profile檔案
sudo vi /etc/profile
輸入密碼後進入檔案編輯
這裡sudo是加許可權類似root使用者進行操作,vi是一種編輯器
這裡的i代表INSERT輸入模式,然後按向下鍵切換到最下面,
在檔案的末尾加上下述程式碼:
export PATH=$PATH:/home/software/anaconda3/bin
這個地址是自己安裝的anaconda3的路徑
按下ESC鍵,輸入:,然後輸入wq按下回車就儲存退出了
最後重新載入配置檔案,輸入source /etc/profile
完成上述步驟,環境變數就配置好
測試
開啟終端(Terminal),輸入python3,如果顯示如下圖,則表示安裝成功。
conda建立並激活虛擬環境
命令:
conda create -n your_env_name python=2.7/3.6
source activate your_env_name
其中,-n中n表示name,即你建立環境的名字。
之後如果忘記自己建立的環境的名字,可以檢視conda中的環境:
conda env list
之後選擇你建立的環境啟用。之後進入pytorch官網選擇你要安裝的版本以及作業系統、CUDA版本號,便可以得到下載的命令。比如本人得到的命令是:
conda install pytorch torchvision cuda80 -c pytorch
若不知道自己CUDA的版本號,可以輸入下面命令查詢:
cat /usr/local/cuda/version.txt
若希望快速下載,可以把源換為國內的映象源,從而提高下載速度。在下載前輸入:
vim ~/.condarc
開啟檔案後,輸入:
channels:
- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
- https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true
若配置好環境後需要別的包,用conda或者pip下載皆可
執行py檔案
直接呼叫指令 python xxxxx.py 即可
編輯py檔案
直接呼叫指令 vi xxxxx.py即可
pytorch下多GPU並行執行教程
1. nn.DataParallel
1
|
torch.nn.DataParallel(module, device_ids = None , output_device = None , dim = 0 ) |
- module -要並行化的模組
- device_ids (python列表:int或torch.device) - CUDA裝置(預設:所有裝置)
- output_device (int或torch.device) -輸出的裝置位置(預設:device_ids[0]) (用於彙總梯度資訊的裝置)
在模組級別實現資料並行。此容器通過在批尺寸維度中分塊(其他物件將在每個裝置上覆制一次),在指定的裝置上分割輸入,從而並行化給定模組的應用程式。
在正向傳遞過程中,模型被複制到每個裝置上,每個副本處理輸入的一部分。在向後傳遞過程中,每個副本的梯度將累加到原始模組中。
批尺寸的大小應該大於所使用的gpu的數量。
https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html
1
2
|
if torch.cuda.device_count() > 1 : model = nn.DataParallel(model.cuda(), device_ids = gpus, output_device = gpus[ 0 ]) |
DataParallel 可以自動拆分資料併發送作業指令到多個gpu上的多個模型。在每個模型完成它們的工作之後,dataparparallel收集併合並結果,然後再返回給您。
DataParallel 使用起來非常方便,我們只需要用 DataParallel 包裝模型,再設定一些引數即可。需要定義的引數包括:參與訓練的 GPU 有哪些,device_ids=gpus;用於彙總梯度的 GPU 是哪個,output_device=gpus[0] 。DataParallel 會自動幫我們將資料切分 load 到相應 GPU,將模型複製到相應 GPU,進行正向傳播計算梯度並彙總。
DataParallel 僅需改動一行程式碼即可。但是DataParallel 速度慢,GPU 負載存在不均衡的問題。
2. 使用 torch.distributed 加速並行訓練
It is recommended to use DistributedDataParallel
, instead of DataParallel
to do multi-GPU training, even if there is only a single node.
對於單節點多GPU資料並行訓練,事實證明,DistributedDataParallel的速度明顯高於torch.nn.DataParallel。
torch.nn.parallel.
DistributedDataParallel
(module, device_ids=None, output_device=None, dim=0, broadcast_buffers=True, process_group=None, bucket_cap_mb=25, find_unused_parameters=False, check_reduction=False, gradient_as_bucket_view=False)
在模組級別實現基於torch.distributed包的分散式資料並行。
此容器通過在批尺寸維度中分組,在指定的裝置之間分割輸入,從而並行地處理給定模組的應用程式。模組被複制到每臺機器和每臺裝置上,每個這樣的複製處理輸入的一部分。在反向傳播過程中,每個節點的梯度取平均值。
批處理的大小應該大於本地使用的gpu數量。
輸入的約束與torch.nn.DataParallel中的約束相同。
此類的建立要求torch.distributed已通過呼叫torch.distributed.init_process_group()
進行初始化。
要在具有N個GPU的主機上使用DistributedDataParallel,應生成N個程序,以確保每個程序在0到N-1的單個GPU上獨自工作。這可以通過為每個程序設定CUDA_VISIBLE_DEVICES或呼叫以下命令來完成:
1
|
torch.cuda.set_device(i) |
i從0到N-1。 在每個程序中,都應參考以下內容來構造此模組:
1
2
3
|
torch.distributed.init_process_group(backend = 'nccl' , world_size = N, init_method = '...' ) model = DistributedDataParallel(model, device_ids = [i], output_device = i) |
為了在每個節點上生成多個程序,可以使用torch.distributed.launch或torch.multiprocessing.spawn。
如果使用DistributedDataParallel,可以使用torch.distributed.launch啟動程式,請參閱第三方後端(Third-party backends)。
當使用gpu時,nccl後端是目前最快的,並且強烈推薦使用。這適用於單節點和多節點分散式訓練。
區別
DistributedDataParallel和DataParallel之間的區別是:DistributedDataParallel使用多程序,其中為每個GPU建立一個程序,而DataParallel使用多執行緒。
通過使用多程序,每個GPU都有其專用的程序,從而避免了Python直譯器的GIL導致的效能開銷。