[譯] Google Colab 免費 GPU 使用教程

Google Colab 免費 GPU 使用教程

如今你可使用 Google Colaboratory(帶有免費的 Tesla K80 GPU)使用 KerasTensorflowPyTorch 來開發深度學習的程序了。html

你們好!我將向你們展現如何使用 Google 面向 AI 開發者的免費雲服務 —— Google Colab。在 Colab 上,你可使用免費的 GPU 來開發深度學習應用程序。前端

感謝 KDnuggets!

我很高興地宣佈,這篇博文在 2018 年 2 月被選爲 KDnuggets 的銀質博文!文章內容能夠在 KDnuggets 看到。python

Google Colab 是什麼?

Google Colab 是一個免費的雲服務,如今它還支持免費的 GPU!linux

你能夠:android

  • 提升你的 Python 語言的編碼技能。
  • 使用 KerasTensorFlowPyTorchOpenCV 等流行庫開發深度學習應用程序。

Colab 與其它免費的雲服務最重要的區別在於:Colab 提供徹底免費的 GPU。ios

關於這項服務的詳細信息能夠在 faq 頁面上找到。git

準備好使用 Google Colab

在 Google Drive 上建立文件夾

因爲 Colab 是在 Google Drive 上工做的,因此咱們須要首先指定工做文件夾。我在 Google Drive 上建立了一個名爲 「app」 的文件夾。固然,你可使用不一樣的名稱或選擇默認的 Colab Notebooks 文件夾,而不是 app 文件夾github

我建立了一個空的 「app」 文件夾編程

建立新的 Colab 筆記(Notebook)

經過 右鍵點擊 > More > Colaboratory 步驟建立一個新的筆記。json

右鍵點擊 > More > Colaboratory

經過點擊文件名來重命名筆記

設置免費的 GPU

經過很簡單的步驟就能夠將默認硬件從 CPU 更改成 GPU,或者反過來。依照下面的步驟 Edit > Notebook settings 或者進入 Runtime > Change runtime type,而後選擇 GPU 做爲 Hardware accelerator(硬件加速器)

使用 Google Colab 運行基本的 Python 代碼

如今咱們能夠開始使用 Google Colab 了。

我會運行一些 Python Numpy 教程關於基本數據類型的代碼。

能夠正常運行!:) 若是你對在 AI 中最流行的編程語言 Python 還不是很瞭解,我推薦你去學習這個簡明教程。

在 Google Colab 中運行或導入 .py 文件

首先運行這些代碼,以便安裝一些必要的庫並執行受權。

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 Driveapp 文件夾中。

mnist_cnn.py 文件內容

MNIST 數據集上運行下面的代碼來訓練一個簡單的卷積網絡(convnet)。

!python3 "/content/drive/My Drive/app/mnist_cnn.py"
複製代碼

從結果能夠看到,每輪次(epoch)運行只用了 11 秒

下載 Titanic 數據集(.csv 文件)並顯示文件的前 5 行內容

若是你想從一個 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)
複製代碼

克隆 GitHub 倉庫到 Google Colab

使用 Git 能夠很輕鬆克隆 GitHub 倉庫。

步驟 1: 找到 GitHub 倉庫並獲取 「Git」 連接

找到所需的 GitHub 倉庫。

好比: github.com/wxs/keras-m…

點擊 Clone or download(克隆或下載) > Copy the link(複製連接)!

2. 使用 Git 克隆

運行如下命令便可:

!git clone github.com/wxs/keras-m…

3. 打開 Google Drive 中對應的文件夾

固然,Google Drive 中對應的文件夾與 GitHub 倉庫名是相同的。

4. 打開筆記

右鍵點擊 > Open With > Colaboratory

5. 運行

如今你能夠在 Google Colab 中運行 GitHub 倉庫代碼了。

一些有用的提示

1. 如何安裝第三方庫?

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 安裝其它庫。

2. GPU 是否正常工做?

要查看是否在 Colab 中正確使用了 GPU,能夠運行下面的代碼進行交叉驗證:

import tensorflow as tf
tf.test.gpu_device_name()
複製代碼

3. 我使用的是哪個 GPU?

from tensorflow.python.client import device_lib
device_lib.list_local_devices()
複製代碼

目前, Colab 只提供了 Tesla K80

4. 輸出 RAM 信息?

!cat /proc/meminfo
複製代碼

5. 輸出 CPU 信息?

!cat /proc/cpuinfo
複製代碼

6. 改變工做文件夾

通常,當你運行下面的命令:

!ls
複製代碼

你會看到 datalab 和 drive 文件夾。

所以,在定義每個文件名時,須要在前面添加 drive/app

要解決這個問題,更改工做目錄便可。(在本教程中,我將其更改成 app 文件夾)可使用下面的代碼:

import os
os.chdir("drive/app") 
# 譯者注:掛載網盤目錄後,前面沒有切換過目錄,這裏應該輸入
# os.chdir("drive/My Drive/app")
複製代碼

運行上述代碼後,若是你再次運行

!ls
複製代碼

你會看到 app 文件夾的內容,不須要再一直添加 drive/app 了。

7. 「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 都在使用時,就會出現這種錯誤信息。

參考這裏

8. 如何清空全部單元行的運行輸出?

能夠依次點擊 Tools>>Command Palette>>Clear All Outputs

9. 「apt-key output should not be parsed (stdout is not a terminal)」 警告

若是你遇到這個警告:

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
複製代碼

10. 如何在 Google Colab 中使用 Tensorboard?

我推薦參考這個倉庫代碼:

github.com/mixuala/col…

11. 如何重啓 Google Colab?

要重啓(或重置)你打開的虛擬機器,運行下面的命令便可:

!kill -9 -1
複製代碼

12. 如何向 Google Colab 中添加表單(Form)?

爲了不每次在代碼中更改超參數,你能夠簡單地向 Google Colab 中添加表單。

例如,我添加了一個包含有 learning_rate(學習率) 變量和 optimizer(優化器) 字符串的表單。

13. 如何查看方法的參數?

在 TensorFlow、Keras 等框架中查看方法的參數,能夠在方法名稱後面添加問號標識符(?)

這樣不須要點擊 TensorFlow 的網站就能夠看到原始文檔。

14. 如何將大文件從 Colab 發送到 Google Drive?

# 須要發送哪一個文件?
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)
複製代碼

15. 如何在 Google Colab 中運行 Tensorboard?

若是你想在 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 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索