Google Colab 使用教學
為什麼有jupter notebook了還要用這個?
如果說有個環境可以讓你不用在一開始安裝一大堆軟體、不挑作業系統、能夠立即實驗、實作資料科學或機器學習專案、有著像 Jupyter Notebook 這樣的互動式環境、在學習時不用預花太多成本(例如雲端虛擬機器費用)、如果還能支援加速硬體(如:GPU)或是自定環境的話,是不是會讓你有更大的動力把資料科學或是機器學習學得更好呢?
是的, Google Colaboratory 就是符合上述所說的。
沒什麼閒錢可以買Tesla T4顯卡(專門用於AI訓練)的我,需要訓練大型模型時就會用這個跑。
開始使用 Google Colaboratory
Google Colaboratory (以下簡稱 Google Colab)是一個基於 Jupyter Notebook 的免費服務(須註冊一個 Google 帳號),所以如果你曾經用過 Jupyter Notebook 來學習 Python 的話,那應該不必特別學習就能立即上手這個服務了,就算有些不熟悉,第一次使用的歡迎 notebook 也有完整的教學文件,有不會用的地方讀一下就可以了。
首先打開你的goole帳號,然後進入雲端硬碟,對中間空白處按右鍵--更多--連結更多應用程式
然後搜尋Colaboratory,並且安裝下來
然後你就可以在更多那邊看到colab了,然後按下去
對,就是這麼簡單。你可別小看這個運行環境,雖然你沒有執行任何安裝過程,但是它基本上涵蓋了你做數據科學分析要用到的各種工具,這些工具包括但不限於Numpy、Scipy、Pandas等,甚至連深度學習的框架,例如Tensorflow、Keras和Pytorch,也是一應俱全。
Google Colab的深度學習環境支援,可不只是軟體那麼簡單。Google慷慨的提供了GPU,甚至是更專業化的TPU,供你免費使用。
預設狀態下,這些雲端硬體是不開啟的。你需要在選單欄中選擇編輯--筆記本設定
想知道 Python 是哪個版本,你可以在 notebook 中插入 !python -V 這樣的 system alias 來觀察,所以當然也可以使用 !pip list 觀察到底預裝了哪些函式庫,如果想用的還沒裝,當然可以 !pip install --upgrade xxx 來安裝,而 notebook 的運行環境也可以隨時重置(執行階段 > 恢復原廠設定),所以不用怕把函式庫又搞爛。不過可能還是要注意一下是否有作業系統的相依性,Google Colab 的運行環境是 Ubuntu Linux。
將筆記本設定調整成GPU後,輸入!nvidia-smi,可於最下方顯示你的GPU是甚麼
提醒: 1)為避免啟動GPU後沒運算,程式先預設是使用CPU。當需要GPU時請到左上"執行階段"內的"變更執行階段類型"選GPU,並按右上的重新連線重啟一個container。2) 當你點選的GPU或TPU container運作後,若超過十幾分鐘沒有run程式,請關掉有GPU/TPU container,避免colab認為你佔著免費稀有資源不做事,會把你高檔加速器使用權暫時關掉"數小時",期間只能用CPU。3)若記憶體占用過大,也會造成kernel died,造成container重啟,暫存檔案都會不見。
假設在寫的過程中有遇到error可以點search stack overflow,會直接幫你查,方便你debug
最後附上一段程式碼,深度學習框架,炫耀用
import torch import torch.nn as nn import torchvision.datasets as dsets import torchvision.transforms as transforms from torch.autograd import Variable import torch.utils.data as Data import matplotlib.pyplot as plt # Hyper Parameters input_size = 784 hidden_size = 500 num_classes = 10 num_epochs = 5 batch_size = 100 learning_rate = 0.001 # MNIST Dataset train_dataset = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = dsets.MNIST(root='./data', train=False, transform=transforms.ToTensor()) # Data Loader (Input Pipeline) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) test_y=test_dataset.targets # Neural Network Model (1 hidden layer) class Net(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(Net, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out net = Net(input_size, hidden_size, num_classes) # Loss and Optimizer criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate) # Train the Model for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # Convert torch tensor to Variable images = Variable(images.view(-1, 28*28)) labels = Variable(labels) # Forward + Backward + Optimize optimizer.zero_grad() # zero the gradient buffer outputs = net(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() if (i+1) % 100 == 0: print ('Epoch [%d/%d], Step [%d/%d], Loss: %.4f' %(epoch+1, num_epochs, i+1, len(train_dataset)//batch_size, loss.item())) # Test the Model correct = 0 total = 0 for images, labels in test_loader: images = Variable(images.view(-1, 28*28)) outputs = net(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum() print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total)) # Save the Model for i in range(1,4): plt.imshow(train_dataset.data[i].numpy(), cmap='gray') plt.title('%i' % train_dataset.targets[i]) plt.show() torch.save(net.state_dict(), 'model.pkl') test_output = net(images[:20]) pred_y = torch.max(test_output, 1)[1].data.numpy().squeeze() print('prediction number',pred_y) print(' real number',test_y[:20].numpy())
官方介紹,裡面有更詳細的介紹,有興趣的可以看一下