Colab配置: 使用gpu訓練模型


Colab 配置

一步操作

!nvidia-smi
from google.colab import drive
drive.mount('/content/drive')
%cd "/content/drive/My Drive/Colab"
%ls

分步執行

新建Colab文件夾

這樣的話若是網絡不穩定或是使用時間到期,臨時文件仍然保存, 據說重連後可以繼續訓練?有待確認

新建ipynb文件

  • 打開,即進入Colab
  • 重命名

設置GPU, 查看參數

  • 設置 GPU 加速: 修改 -> 筆記本設置 選擇GPU
    在這裏插入圖片描述
  • 運行命令, 查看分配的GPU參數: Tesla K80, CUDA 10.1, RAM 12GB
!nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   49C    P8    30W / 149W |      0MiB / 11441MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

掛載Google Drive

  • 直接點擊左側欄中的文件, 選擇裝載GOOGLE雲端硬盤
    在這裏插入圖片描述
    這時會出現如下的運行單元, Ctrl+Enter 運行即可

    from google.colab import drive
    drive.mount('/content/drive')
    

切換Colab目錄

%cd "/content/drive/My Drive/Colab"
%ls

設置斷線自動重連

打開瀏覽器F12,找到console將下面代碼粘貼到控制檯, 回車運行; 若刷新了頁面再重新執行一次. 參考原文

setInterval(()=>{
	if(Array.from(document.getElementById("connect").children[0].children[2].innerHTML).splice(3,4).toString() === '重,新,連,接'){
		document.getElementById("connect").children[0].children[2].click()
	}
},1000)

出錯: 重啓Colab

!kill -9 -1

設置Colab字體

設置等寬字體, 縮進一致, 方便閱讀.
在這裏插入圖片描述
參考: How to change the font size in colab

  • 安裝advanced font setting插件
  • 設置字號爲14, 字體爲Consolas
    在這裏插入圖片描述

MXNet-GPU 計算

安裝

!pip install mxnet-cu101

2019/11/22 更新: colab安裝mxnet-cu100導入出錯, 只能安裝匹配的101版本, 原因未知.
注意: 雖然顯示的CUDA是10.1, 但實測發現, mxnet只支持CUDA 10.0 , 否則安裝成功但import失敗. 可能是環境變量的問題? 設置 .bashrc 可能奏效? 但在Colab中還是直接用 mxnet-cu100 吧, 畢竟每次重連都需要重新安裝.

食用方法

PyTorch-GPU 計算

安裝

colab 環境已安裝PyTorch-GPU版本, 可直接食用.

import torch
from torch import nn

print(f"\n cuda is available: {torch.cuda.is_available()}",
      f"\n device count     :  {torch.cuda.device_count()}",
      f"\n device name      :  {torch.cuda.get_device_name(0)}",)

食用方法

  • 可以創建時指定device
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = torch.tensor([1, 2, 3], device=device)
# 輸出 tensor([1, 2, 3], device='cuda:0')
  • 也可以創建後轉移到cuda
y = torch.tensor([1, 2, 3]).cuda()
net = nn.Linear(3, 1).cuda()

在這裏插入圖片描述

下載數據集

!wget -O [filename] [url]

注意!!! 不要上傳大文件到drive,然後mount訓練,雲主機和drive並不在同一集羣內,訓練中讀取數據非常耗時!以下是我微調ResNet對FashionMNIST數據集的log截圖,GPU是Tesla K80. 可以看到每個Epoch基本要花費 24 min,1440 sec,效率低,沒有實用性。

在這裏插入圖片描述

而將數據集下載到雲主機上,同機讀取則會好很多
在這裏插入圖片描述

導入成功, 開始訓練

複製 測試代碼, 在單元格中直接運行. 運行結果如下, 每個epoch只需要 9 sec, 快得飛起!

Epoch 1/12
60000/60000 [==============================] - 17s 291us/step - loss: 0.2623 - acc: 0.9180 - val_loss: 0.0537 - val_acc: 0.9829
Epoch 2/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0883 - acc: 0.9736 - val_loss: 0.0397 - val_acc: 0.9860
Epoch 3/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0668 - acc: 0.9798 - val_loss: 0.0354 - val_acc: 0.9886
Epoch 4/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0542 - acc: 0.9835 - val_loss: 0.0351 - val_acc: 0.9881
Epoch 5/12
60000/60000 [==============================] - 9s 146us/step - loss: 0.0473 - acc: 0.9853 - val_loss: 0.0277 - val_acc: 0.9903
Epoch 6/12
60000/60000 [==============================] - 9s 146us/step - loss: 0.0414 - acc: 0.9875 - val_loss: 0.0276 - val_acc: 0.9914
Epoch 7/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0365 - acc: 0.9890 - val_loss: 0.0268 - val_acc: 0.9911
Epoch 8/12
60000/60000 [==============================] - 9s 146us/step - loss: 0.0335 - acc: 0.9894 - val_loss: 0.0249 - val_acc: 0.9919
Epoch 9/12
60000/60000 [==============================] - 9s 146us/step - loss: 0.0327 - acc: 0.9900 - val_loss: 0.0242 - val_acc: 0.9911
Epoch 10/12
60000/60000 [==============================] - 9s 146us/step - loss: 0.0299 - acc: 0.9909 - val_loss: 0.0258 - val_acc: 0.9911
Epoch 11/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0278 - acc: 0.9914 - val_loss: 0.0265 - val_acc: 0.9918
Epoch 12/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0263 - acc: 0.9918 - val_loss: 0.0259 - val_acc: 0.9912
Test loss: 0.025935380621160586
Test accuracy: 0.9912
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章