Skip to content

如何使用 Google Colab 提供的免費 GPU

Google Colab 的全名為 Google Colaboratory, 顧名思義,是個由 Google 所提供的服務。Colab 最大的優點在於它提供了後台的免費 GPU,雖然有著一天只能使用十二小時的時限、以及訓練太長的模型會被認為是在做加密貨幣的挖掘而被 ban 調 —— 但總體而言,Colab 仍然是手邊沒有 GPU 的人們最適合進行機器學習的平台。

Colab 是一個線上 Python 執行平台,其底層的運作方法與著名的 Jupyter notebook 十分相像。

在 Colab 的常見問題說明裡頭,也是這樣說明的:

相信使用過 Jupyter notebook 的朋友肯定不陌生 Colab 這樣的操作模式。

那麼,以下我就使用我曾寫過的《使用 CNN 進行 MNIST 的手寫數字辨識 —— by Keras (實戰篇)》 來進行該如何使用 Colab 的說明吧!


擁有 Google 帳號

要使用 Colab 最重要的事情,便是擁有一個 Google 帳號!現代的人們大多已經有了,因為 Google 提供了太多服務、實在是太方便了。

如果你還沒有 Google 帳號,那麼我極力推薦你註冊一個。


使用 GPU

搜尋 Google Colab,大概在你搜尋結果的第一項,就是 Colab 的網址。

點開後,大概會顯示下面這樣的畫面。

Good! 這代表你順利地來到 Colab 了!

點擊 File -> New Python3 notebook 創建一個新的筆記本,並在裡頭貼上 Python 程式碼:

# -*- coding: utf-8 -*-
import os
from keras.models import Sequential, load_model
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D
from keras.utils import np_utils, plot_model
from keras.datasets import mnist
import matplotlib.pyplot as plt
import pandas as pd


# Mnist Dataset
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
x_train = X_train.reshape(60000, 1, 28, 28)/255
x_test = X_test.reshape(10000, 1, 28, 28)/255
y_train = np_utils.to_categorical(Y_train)
y_test = np_utils.to_categorical(Y_test)

# Model Structure
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=3, input_shape=(1, 28, 28), activation='relu', padding='same'))
model.add(MaxPool2D(pool_size=2, data_format='channels_first'))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(10, activation='softmax'))
print(model.summary())

# Train
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=64, verbose=1)

# Test
loss, accuracy = model.evaluate(x_test, y_test)
print('Test:')
print('Loss: %s\nAccuracy: %s' % (loss, accuracy))

# Save model
model.save('./CNN_Mnist.h5')

# Load Model
model = load_model('./CNN_Mnist.h5')

# Display
def plot_img(n):
    plt.imshow(X_test[n], cmap='gray')
    plt.show()


def all_img_predict(model):
    print(model.summary())
    loss, accuracy = model.evaluate(x_test, y_test)
    print('Loss:', loss)
    print('Accuracy:', accuracy)
    predict = model.predict_classes(x_test)
    print(pd.crosstab(Y_test.reshape(-1), predict, rownames=['Label'], colnames=['predict']))


def one_img_predict(model, n):
    predict = model.predict_classes(x_test)
    print('Prediction:', predict[n])
    print('Answer:', Y_test[n])
    plot_img(n)


if __name__ == '__main__':
    all_img_predict(model)

不過先別執行,我們最好將我們的後端調整為有 GPU 的類型。這也是 Colab 最吸引人的地方。

點擊 Runtime -> Change Runtime Type -> 將 Hardware accelerator 選擇為 GPU。Save 存檔後,你應該就會連接上有 GPU 的後端。

按下 ctrl + Enter 就會開始執行程式碼。有 GPU 的加持,Mnist 應該會跑得非常非常地快。

你可以任意地替換你的任務,盡情地使用這免費的 GPU 吧!

Leave a Reply