- 原文地址:Google Colab Free GPU Tutorial
- 原文做者:fuat
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:haiyang-tju
- 校對者:DevMcryYu
如今你可使用 Google Colaboratory(帶有免費的 Tesla K80 GPU)使用 Keras、Tensorflow 和 PyTorch 來開發深度學習的程序了。html
你們好!我將向你們展現如何使用 Google 面向 AI 開發者的免費雲服務 —— Google Colab。在 Colab 上,你可使用免費的 GPU 來開發深度學習應用程序。前端
我很高興地宣佈,這篇博文在 2018 年 2 月被選爲 KDnuggets 的銀質博文!文章內容能夠在 KDnuggets 看到。python
Google Colab 是一個免費的雲服務,如今它還支持免費的 GPU!linux
你能夠:android
Colab 與其它免費的雲服務最重要的區別在於:Colab 提供徹底免費的 GPU。ios
關於這項服務的詳細信息能夠在 faq 頁面上找到。git
因爲 Colab 是在 Google Drive 上工做的,因此咱們須要首先指定工做文件夾。我在 Google Drive 上建立了一個名爲 「app」 的文件夾。固然,你可使用不一樣的名稱或選擇默認的 Colab Notebooks 文件夾,而不是 app 文件夾。github
我建立了一個空的 「app」 文件夾編程
經過 右鍵點擊 > More > Colaboratory 步驟建立一個新的筆記。json
右鍵點擊 > More > Colaboratory
經過點擊文件名來重命名筆記
經過很簡單的步驟就能夠將默認硬件從 CPU 更改成 GPU,或者反過來。依照下面的步驟 Edit > Notebook settings 或者進入 Runtime > Change runtime type,而後選擇 GPU 做爲 Hardware accelerator(硬件加速器)。
如今咱們能夠開始使用 Google Colab 了。
我會運行一些 Python Numpy 教程中關於基本數據類型的代碼。
能夠正常運行!:) 若是你對在 AI 中最流行的編程語言 Python 還不是很瞭解,我推薦你去學習這個簡明教程。
首先運行這些代碼,以便安裝一些必要的庫並執行受權。
from google.colab import drive
drive.mount('/content/drive/')
複製代碼
運行上面的代碼,會獲得以下的結果:
點擊 這個連接,複製驗證代碼並粘貼到下面的文本框中。
完成受權流程後,應該能夠看到:
如今能夠經過下面的命令訪問你的 Google Drive 了:
!ls "/content/drive/My Drive/"
複製代碼
安裝 Keras:
!pip install -q keras
複製代碼
上傳文件 mnist_cnn.py 到你的 Google Drive 的 app 文件夾中。
mnist_cnn.py 文件內容
在 MNIST 數據集上運行下面的代碼來訓練一個簡單的卷積網絡(convnet)。
!python3 "/content/drive/My Drive/app/mnist_cnn.py"
複製代碼
從結果能夠看到,每輪次(epoch)運行只用了 11 秒。
若是你想從一個 url 中下載 .csv 文件到 「app」 文件夾,只需運行下面的命令:
!wget raw.githubusercontent.com/vincentarel… -P "/content/drive/My Drive/app"
不使用 wget 方法,你能夠直接將本身的 .csv 文件上傳到 「app」 文件夾中。
讀取 「app」 文件夾中的 .csv 文件並顯示前 5 行的內容:
import pandas as pd
titanic = pd.read_csv(「/content/drive/My Drive/app/Titanic.csv」)
titanic.head(5)
複製代碼
使用 Git 能夠很輕鬆克隆 GitHub 倉庫。
找到所需的 GitHub 倉庫。
點擊 Clone or download(克隆或下載) > Copy the link(複製連接)!
運行如下命令便可:
!git clone github.com/wxs/keras-m…
固然,Google Drive 中對應的文件夾與 GitHub 倉庫名是相同的。
右鍵點擊 > Open With > Colaboratory
如今你能夠在 Google Colab 中運行 GitHub 倉庫代碼了。
Keras
!pip install -q keras
import keras
複製代碼
PyTorch
from os import path
from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag
platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())
accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'
複製代碼
!pip install -q download.pytorch.org/whl/{accele… torchvision
import torch
或者試試這個:
!pip3 install torch torchvision
MxNet
!apt install libnvrtc8.0
!pip install mxnet-cu80
import mxnet as mx
複製代碼
OpenCV
!apt-get -qq install -y libsm6 libxext6 && pip install -q -U opencv-python
import cv2
複製代碼
XGBoost
!pip install -q xgboost==0.4a30
import xgboost
複製代碼
GraphViz
!apt-get -qq install -y graphviz && pip install -q pydot
import pydot
複製代碼
7zip 閱讀器
!apt-get -qq install -y libarchive-dev && pip install -q -U libarchive
import libarchive
複製代碼
其它庫
!pip install
或者 !apt-get install
安裝其它庫。
要查看是否在 Colab 中正確使用了 GPU,能夠運行下面的代碼進行交叉驗證:
import tensorflow as tf
tf.test.gpu_device_name()
複製代碼
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
複製代碼
目前, Colab 只提供了 Tesla K80。
!cat /proc/meminfo
複製代碼
!cat /proc/cpuinfo
複製代碼
通常,當你運行下面的命令:
!ls
複製代碼
你會看到 datalab 和 drive 文件夾。
所以,在定義每個文件名時,須要在前面添加 drive/app。
要解決這個問題,更改工做目錄便可。(在本教程中,我將其更改成 app 文件夾)可使用下面的代碼:
import os
os.chdir("drive/app")
# 譯者注:掛載網盤目錄後,前面沒有切換過目錄,這裏應該輸入
# os.chdir("drive/My Drive/app")
複製代碼
運行上述代碼後,若是你再次運行
!ls
複製代碼
你會看到 app 文件夾的內容,不須要再一直添加 drive/app 了。
No backend with GPU available
」 錯誤解決方案若是你遇到這個錯誤:
Failed to assign a backend No backend with GPU available. Would you like to use a runtime with no accelerator? #指定後端失敗。沒有可用的 GPU 後端。須要使用沒有加速器的運行時嗎?
能夠稍後再試一次。有許多人如今都在使用 GPU,當全部 GPU 都在使用時,就會出現這種錯誤信息。
能夠依次點擊 Tools>>Command Palette>>Clear All Outputs
若是你遇到這個警告:
Warning: apt-key output should not be parsed (stdout is not a terminal) #警告:apt-key 輸出沒法被解析(當前 stdout 不是終端)
複製代碼
這意味着你已經完成了受權。只須要掛載 Google Drive 便可:
!mkdir -p drive
!google-drive-ocamlfuse drive
複製代碼
我推薦參考這個倉庫代碼:
要重啓(或重置)你打開的虛擬機器,運行下面的命令便可:
!kill -9 -1
複製代碼
爲了不每次在代碼中更改超參數,你能夠簡單地向 Google Colab 中添加表單。
例如,我添加了一個包含有 learning_rate(學習率)
變量和 optimizer(優化器)
字符串的表單。
在 TensorFlow、Keras 等框架中查看方法的參數,能夠在方法名稱後面添加問號標識符(?):
這樣不須要點擊 TensorFlow 的網站就能夠看到原始文檔。
# 須要發送哪一個文件?
file_name = "REPO.tar"
from googleapiclient.http import MediaFileUpload
from googleapiclient.discovery import build
auth.authenticate_user()
drive_service = build('drive', 'v3')
def save_file_to_drive(name, path):
file_metadata = {'name': name, 'mimeType': 'application/octet-stream'}
media = MediaFileUpload(path, mimetype='application/octet-stream', resumable=True)
created = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
return created
save_file_to_drive(file_name, file_name)
複製代碼
若是你想在 Google Colab 中運行 Tensorboard,運行下面的代碼。
# 你能夠更改目錄名
LOG_DIR = 'tb_logs'
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip
import os
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR))
get_ipython().system_raw('./ngrok http 6006 &')
!curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
複製代碼
你能夠經過建立 ngrok.io 連接來追蹤 Tensorboard 日誌。你能夠在輸出的最後找到這個 URL 連接。
注意,你的 Tensorboard 日誌將保存到 tb_logs 目錄。固然,你能夠更改這個目錄名。
以後,咱們就能夠看到 Tensorboard 了!運行下面的代碼,能夠經過 ngrok URL 連接來追蹤 Tensorboard 日誌。
from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
from keras.callbacks import TensorBoard
batch_size = 128
num_classes = 10
epochs = 12
# 輸入圖像維度
img_rows, img_cols = 28, 28
# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# 將類別向量轉換成二分類矩陣
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
tbCallBack = TensorBoard(log_dir=LOG_DIR,
histogram_freq=1,
write_graph=True,
write_grads=True,
batch_size=batch_size,
write_images=True)
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test),
callbacks=[tbCallBack])
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
複製代碼
Tensorboard :)
我認爲 Colab 會給全世界的深度學習和 AI 研究帶來新的氣息。
若是你發現了這篇文章頗有幫助,那麼請給它一些掌聲 👏,並與他人分享,這將會很是有意義。歡迎在下面留言。
你能夠在 Twitter 上找到我。
英文原文會持續跟進更新,若有須要請移步英文原文。
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。