出一期用於連接遠程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 aliyun@192.168.1.122:/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導致的性能開銷。