start DL from stratch (2)!!!
- 一、CPU and GPU
- cpu
- GPU
- 安培架構
- 愛達·洛夫萊斯架構
- 二、使用conda創建一個新的虛擬環境
- 三、autodl操作先知
- Linux復習
- 目錄
- 文件和數據上傳
- 對于整個鏡像的操作
- 守護進程
- Tips
- 四、autodl租用
- 創建實例
- ==<big>沒有所需要的版本的話<big>==
- 連接pycharm
- 配置環境
- GitHub上項目
- 開具發票
- 五、ssh和sftp
- 六、性能
- nvidia-smi -l 1
- 如果發現GPU利用率較低時可以按下述方法排查瓶頸
- numpy
- 其余經驗
主要解決DL入門關于相關軟件的配置問題,使用autodl遠程使用實例。
續前節 Start DL from stratch(1) !!!
一、CPU and GPU
參考:::
CPU-GPU
cpu
CPU非常重要!盡管CPU并不直接參與深度學習模型計算,但CPU需要提供大于模型訓練吞吐的數據處理能力。比如,一臺8卡NVIDIA V100的DGX服務器,訓練ResNet-50 ImageNet圖像分類的吞吐就達到8000張圖像/秒,而擴展到16卡V100的DGX2服務器卻沒達到2倍的吞吐,說明這臺DGX2服務器的CPU已經成為性能瓶頸了。
理想情況下,模型計算吞吐隨GPU數量線性增長,單GPU的合理CPU邏輯核心數分配可以直接線性擴展到多GPU上。每塊GPU應配備至少4~8核心的CPU,以滿足多線程的異步數據讀取。
GPU
我們建議在實例上啟用深度學習框架的混合精度訓練來加速模型計算。 相較于單精度訓練,混合精度訓練通常能夠提供2倍以上的訓練加速。
GPU的數量選擇與訓練任務有關。一般我們認為模型的一次訓練應當在24小時內完成,這樣隔天就能訓練改進之后的模型。以下是選擇多GPU的一些建議:
1塊GPU。適合一些數據集較小的訓練任務,如Pascal VOC等。
2塊GPU。同單塊GPU,但是你可以一次跑兩組參數或者把Batchsize擴大。
4塊GPU。適合一些中等數據集的訓練任務,如MS COCO等。
8塊GPU。經典永流傳的配置!適合各種訓練任務,也非常方便復現論文結果。
我要更多!用于訓練大參數模型、大規模調參或超快地完成模型訓練。
內存和CPU配置的分配邏輯為按GPU的數量成倍數分配,比如在主機上看到的CPU和內存分配規則為:32GB/GPU、8核/GPU,那么租用1塊GPU時實例的配置為1卡GPU; 8核CPU; 32GB內存,租用2塊GPU時實例的配置為2卡GPU; 16核CPU; 64GB內存,依此類推。
安培架構
NVIDIA Ampere 架構
安培架構是繼圖靈(Turing)架構之后的下一代架構
用于其 RTX 30 系列顯卡(如 RTX 3090、RTX 3080、RTX 3070 等)。
愛達·洛夫萊斯架構
NVIDIA Ada Lovelace架構
是繼安培架構之后推出的下一代 GPU 架構,命名來源于 19 世紀數學家 Ada Lovelace,她被認為是世界上第一位計算機程序員
RTX 40 系列
二、使用conda創建一個新的虛擬環境
三、autodl操作先知
Linux復習
在AutoDL租用實例的系統默認為Linux Ubuntu發行版,因此熟悉使用基本的Linux命令對于訓練模型非常有必要
Linux操作系統中,幾乎所有的東西都以文件夾或文件形式存在,這些文件夾/文件有一個共同的根目錄/。如果我們在某塊磁盤A上(無其他分區)安裝了Linux操作系統后,那么根目錄下將會有此類默認的系統目錄:
$ ls /
bin etc lib mnt proc run tmp var boot dev home root srv sys usr
具體命令如下:::
經常去pwd + ls + tree!!!
ls # 列出當前目錄下的文件和文件夾
ls -l # 列出文件和文件夾的詳細信息:權限,Owner,Group和創建/更新時間
mkdir test_dir # 新建一個叫test_dir的路徑
mkdir a b # 創建兩個文件夾a和b
cd test_dir/ # 進入 test_dir 路徑
cd …/test_dir/ # 上一級目錄下有test_dir目錄
pwd # 查看當前路徑
mv test_dir/ test_directory # 將test_dir目錄重命名為test_directory,文件重命名同樣適用
mv a b/ # 將a移動到b目錄下。如果b目錄不存在的話,這條命令相當于將a重命名為b
cp -r a b # 將a文件夾拷貝到b文件夾下,-r代表遞歸拷貝
-rf folder/* # *是通配符號,這樣代表remmove刪除此文件夾下所有
vim # 編輯文本文件
zip和unzip。如果沒有zip請使用apt-get update && apt-get install -y zip安裝
user@host:/tmp/$ zip -r dir.zip test_directory/ # 將test_directory文件夾壓縮為dir.zip文件
ser@host:/tmp/$ unzip dir.zip # 將dir.zip文件解壓
tar. 以下參數c代表壓縮,x表示解壓,z代表壓縮/解壓為gz格式的壓縮包
user@host:/tmp/$ tar czf dir.tar.gz test_directory/ # 將test_directory文件夾壓縮為dir.tar.gz文件
user@host:/tmp/$ tar xzf dir.tar.gz # 將dir.tar.gz文件解壓
tar還可以用于壓縮和解壓其他格式的壓縮文件,比如bz2
user@host:/tmp/$ tar cjf dir.tar.bz2 test_directory/ # 將test_directory文件夾壓縮為dir.tar.bz2文件
user@host:/tmp/$ tar xjf dir.tar.bz2 # 將dir.tar.bz2文件解壓
目錄
在AutoDL實例中安裝的系統軟件以及用內置的miniconda安裝的python依賴,都是安裝在了**系統盤中。 系統盤( 即系統環境 )
數據盤 temp 可存放讀寫IO要求高的數據 ,所以叫做數據盤,但是不能保存至鏡像中以及進行實例遷移。
文件存儲會掛載文件存儲至實例**/root/autodl-fs**
平臺內置的所有鏡像都安裝了Miniconda,安裝路徑為/root/miniconda3/
JupyerLab的工作路徑是/root,數據盤、網盤、公共數據目錄都在/root目錄下,因此進入JupyterLab后可直接看到這些平臺默認創建的目錄
題外話:::JupyterLab在關閉終端/Notebook選項卡后默認不會終止,仍然在運行
所以右鍵復制路徑之后::沒有帶root的,所以需要自己手動加上/root/
文件和數據上傳
- 公網網盤,直接使用阿里云盤、百度網盤上傳下載數據,一般推薦
(阿里云盤在2024年7月左右對三方應用進行了限制,需要購買三方權益包才能獲得良好的上傳下載速度
百度網盤由于規則調整,不再支持個人認證及個人創建應用功能,需要企業認證才可開通應用) - JupyterLab上傳,和網盤類似,優點簡單,但是只支持文件不支持文件夾 推薦
- scp命令支持文件和文件夾上傳下載,由于是命令行執行,上手難度稍高
- FileZilla軟件支持文件和文件夾,拖拉拽即可上傳下載,推薦使用(免費、全平臺(Mac、Linux、Windows))
- XShell軟件支持管理SSH連接,而且集成了xftp,支持拖拉拽上傳下載文件夾/文件(但是付費版軟件)啊啊啊
- AutoDL文件存儲 上傳數據,優點簡單而且不用開實例,缺點是網頁不支持上傳文件夾
(當只是需要上傳一個zip壓縮包時,或者其他類型的單個文件時,建議直接進入到文件存儲中上傳。因為這樣可以少了連接到Xftp這個步驟,以及可以少費點錢。)
上傳數據的時候選擇無卡開機模式,可以減少費用
對于整個鏡像的操作
您在一個實例中配置好了環境等,在更換主機以及開新的實例時希望復用該環境,以及長期留存該環境以備日后使用,那么保存鏡像將是最好的選擇,還支持共享鏡像給其他用戶之后的保存鏡像請在我的鏡像菜單中查看
重置系統->更換鏡像,都是系統盤清空,數據盤不動
克隆實例把整個都給復制一份
點擊克隆實例后,在創建實例頁面選擇一臺新主機創建實例即可。
Tips:如果您在克隆時忘了勾選同時拷貝數據盤,那么可以在新實例創建完成后,在原實例的更多操作中點擊【跨實例拷貝數據】,再對數據盤進行拷貝
守護進程
遠程執行程序時,那么請注意開守護進程來執行程序,避免因為SSH連接中斷導致程序終止
最簡單的方式是通過jupyterlab的終端來執行,只要jupyterlab不出現重啟(幾乎不會),jupyterlab的終端就會一直運行,無論是本地主機斷網還是關機!!!!!
Tips
- 可以在pycharm 中調試好 ,然后再 jupyterlab的終端 執行,這樣頁面可以關閉去做其他事情
- 按量計費實例在關機后會釋放GPU給其他用戶租用,如果想一直占有GPU,可選擇變更計費方式為包年包月
- 有時候搶不到服務器,可以提前租用多個實例,等到15天快結束的時候開機一會,又可以延時了
- 如果在編寫/調試代碼、上傳下載數據到實例、給他人做代碼展示等不需要GPU卡場景時,可以關機后使用無卡模式開機,無卡模式開機的區別在于對于這次開機會使用0.5核;2GB內存;無GPU卡的配置,價格統一為¥0.1/小時,對于實例之前和之后的數據均無影響,今后仍然可以使用正常的模式開關機。使用方法
四、autodl租用
更多詳細參考:-> Autodl
創建實例
首先平臺鏡像中有沒有您需要的Torch、TensorFlow等框架的相應版本,如果有首選平臺內置的鏡像
如果平臺中沒有合適的Torch、TensorFlow等框架版本,那么查詢自己的框架需要什么CUDA版本,比如PyTorch=1.9.0需要CUDA=11.1,那么可以選擇Miniconda/CUDA=11.1的平臺鏡像,然后在鏡像內安裝自己需要的框架,免去安裝cudatoolkit的麻煩。(平臺內置的CUDA均帶.h頭文件,如有二次編譯代碼的需求更方便)
沒有所需要的版本的話
安裝其他版本的Python: 參考
安裝其他版本的CUDA: 參考
安裝PyTorch: 參考
安裝TensorFlow: 參考
方法一:::可隨便挑選一個Miniconda鏡像,在開機后自行安裝相關框架、CUDA、甚至其他版本的Python。(miniconda鏡像即內部未安裝任何深度學習框架,保持運行環境干凈)
方法二:::在連接ssl的時候選擇conda 環境
這個就相當于你
conda create -n Untrack python=3.7 # 構建一個虛擬環境
conda init bash && source /root/.bashrc # 更新bashrc中的環境變量
conda activate Untrack # 切換到創建的虛擬環境
注意創建位置/envs里面,此外 在編譯器這里就是用的他的環境,如下:::
但是在termial中:::還是顯示的base環境+root目錄的
綜上,所以說開始不選miniconda也是可以的,就是新建一個環境,但是在克隆實例,保存鏡像什么的時候會很大的,相當與有兩份了
那python interpreter 怎么換到base里面呢,還是在ssl配置那里,選擇已有的base conda環境就可以了,注意路徑就是圖中的 /root/miniconda3
那怎么Notebook環境切換呢??
–>參考<–
# 創建Conda新的虛擬環境(如已創建,請忽略!)
conda create -n tf python=3.7 # 構建一個虛擬環境,名為:tf
conda init bash && source /root/.bashrc # 更新bashrc中的環境變量# 將新的Conda虛擬環境加入jupyterlab中
conda activate tf # 切換到創建的虛擬環境:tf
conda install ipykernel
ipython kernel install --user --name=tf # 設置kernel,--user表示當前用戶,tf為虛擬環境名稱
具體例子,參考我的另一篇->>>
連接pycharm
選擇File—Settings,點擊Add interpreter----On SSH即可。
或者 Tools -> Deployment -> Configuration點擊…進入SSH Configurations
檢驗:::
配置環境
在PyCharm中進入終端,或者在通過JupyterLab進入終端------>>>>編輯文件+刷新,使得能使用conda的一些其他命令,比如conda activate 環境,以進行后續的環境配置
否則報錯
怎么辦呢::::::
輸入:vim ~/.bashrc
開始進行編輯:輸入i
光標移動到文件的最后一行,插入source /root/miniconda3/etc/profile.d/conda.sh
保存文件并退出:按Esc鍵,輸入:wq,再回車
輸入bash重啟終端(即刷新一下)
重新輸入命令:::
進來啦:::
參考AutoDL
Autodl
GitHub上項目
- 記得下面兩個文件加上目錄,就可以直接install
- 如果項目提供了 requirements.txt,你可以直接使用以下命令安裝依賴:
pip install -r requirements.txt
- 使用 conda
若項目有 environment.yml 文件,可以用以下命令創建 conda 環境:
conda env create -f environment.yml
開具發票
發票抬頭請填寫真實姓名,統一社會信用代碼請填寫身份證號之后會發送到郵箱電子版的
單次開票金額滿10元可開票
autod開具的都是具有增值稅的,沒有 普通的個人發票貌似嘞
五、ssh和sftp
- SSH (Secure Shell)
作用:SSH 是一種安全的遠程登錄協議,主要用于通過不安全的網絡(例如互聯網)安全地訪問和管理遠程計算機。它允許用戶通過命令行界面(CLI)連接到遠程服務器,執行命令、管理文件和執行其他管理任務。
加密:SSH 使用加密技術(如對稱加密、非對稱加密、哈希算法等)來確保數據傳輸的安全性,因此,它比傳統的 Telnet 或 FTP 更加安全。
主要功能:
遠程登錄:使用終端在遠程服務器上執行命令。
安全的文件傳輸:SSH 本身并不直接用于文件傳輸,但它可以與 SCP 或 SFTP 一起使用。 - SFTP (Secure File Transfer Protocol)
作用:SFTP 是一種通過 SSH 提供的安全文件傳輸協議。它用于通過安全的加密通道,在遠程計算機和本地計算機之間傳輸文件。與 FTP 相比,SFTP 是加密的,因此數據在傳輸過程中不會被竊取或篡改。
加密:SFTP 使用 SSH 協議進行加密,確保傳輸過程中的文件和命令的保密性和完整性。
六、性能
nvidia-smi -l 1
NVIDIA System Management Interface
-l 1:是該工具的一個參數,表示以每秒 1 次的loop刷新輸出
- GPU 信息:
GPU:表示 GPU 的編號。例如,GPU 0、GPU 1 等,這個編號通常是按照設備的插槽順序分配的。
GPU-Name:顯示 GPU 的具體型號,例如 Tesla T4、GeForce RTX 3090 等。
Bus-Id:表示 GPU 在系統中的 PCI 總線地址(例如 00000000:00:1E.0),可以幫助區分不同的 GPU。
Disp.A:表示是否有顯示器連接到該 GPU。如果顯示器連接,通常顯示 On,如果沒有顯示器連接,顯示 Off。 - GPU 使用情況:
GPU-Util:表示 GPU 的當前計算利用率,范圍從 0% 到 100%。顯示 GPU 在進行計算時的負載情況。如果 GPU 沒有進行計算或處于空閑狀態,值通常為 0%。
Memory-Usage:顯示 GPU 顯存的使用情況。格式通常為 XMiB / YMiB,其中 X 是已用的顯存,Y 是總顯存大小。例如 100MiB / 8192MiB 表示已用顯存為 100MiB,總顯存為 8GB。
GPU Temp:表示 GPU 當前的溫度,單位是攝氏度(°C)。GPU 溫度過高可能會影響性能,并且可能會自動降低性能以避免過熱。
Power-Usage:顯示 GPU 當前的功耗,單位為瓦特(W)。這表明 GPU 在運行時的功率消耗情況。
Fan Speed:表示 GPU 風扇的轉速,單位是 RPM(轉/分鐘)。如果 GPU 溫度過高,風扇轉速通常會增大,以提供更多的冷卻。 - 計算進程(Processes):
PID (Process ID):顯示正在使用 GPU 的進程的 ID。每個正在運行的程序都會有一個唯一的進程 ID。
User:顯示啟動該進程的用戶。例如,root 或 user。
GPU Memory Usage:顯示該進程使用的 GPU 顯存大小。例如,100MiB 表示該進程已使用了 100MB 顯存。
Type:顯示該進程是計算任務(C)還是顯示任務(G)。例如,C 表示該進程在執行計算任務,G 表示該進程用于顯示或渲染圖形。
Process Name:顯示該進程的名稱,通常是啟動該進程的應用程序的名稱,如 python、tensorflow 等。
Memory-Usage:顯示該進程占用的顯存量。如果該值較高,表示該進程正在進行大型計算任務。 - 驅動與 CUDA 版本:
Driver Version:顯示當前系統安裝的 NVIDIA 驅動版本。例如,460.39 表示安裝了 NVIDIA 460.39 版本的驅動。
CUDA Version:顯示當前系統支持的 CUDA 版本。
如果發現GPU利用率較低時可以按下述方法排查瓶頸
如果GPU占用率為0說明代碼可能沒有使用GPU,需檢查代碼。
如果GPU占用率忽高忽低、占用率峰值在50%以下,那么可能是數據預處理跟不上GPU的處理速度 數據處理和CPU掛鉤
如果CPU占用率遠沒有達到N00%的,說明您的代碼沒有把CPU的算力壓榨出來,一般可以通過修改Torch Dataloader中的worker_num提高CPU負載,經驗值num_worker = 略小于核心數量,最好測試不同worker num值對性能的影響。
numpy
NumPy會使用OpenBlas或MKL做計算加速。Intel的CPU支持MKL,AMD CPU僅支持OpenBlas。
如果使用Intel的CPU,MKL會比OpenBlas有幾倍的性能提升(部分矩陣計算),對最終的性能影響非常大。一般來說AMD CPU使用OpenBlas會比Intel的CPU使用OpenBlas更快,因此不用過份擔心AMD CPU使用OpenBlas的性能差。
在使用清華等國內的Conda源時,安裝NumPy時默認會使用OpenBlas的加速方案
我的設備是:::
所以不用修改了
修改的話參考:::Pref
# 第一步:卸載當前的NumPy
pip uninstall numpy (如果是conda安裝的, conda uninstall numpy)
# 第二步:刪除國內的Conda源
echo "" > /root/.condarc
# 第三步:重新安裝NumPy
conda install numpy
其余經驗
如果您在使用單機多卡并行,并且使用了PyTorch框架,那么一般將torch.nn.DataParallel (DP)更換為torch.nn.DistributedDataParallel (DDP) 能提升性能。官方原文是:DistributedDataParallel offers much better performance and scaling to multiple-GPUs.