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帳號,然後進入雲端硬碟,對中間空白處按右鍵--更多--連結更多應用程式
![](https://assets.matters.news/embed/dc5d52d4-1936-4552-86c6-1790edb8642e.png)
然後搜尋Colaboratory,並且安裝下來
![](https://assets.matters.news/embed/783b6d27-49ce-4d5d-8253-3ebf73c2cfff.png)
然後你就可以在更多那邊看到colab了,然後按下去
![](https://assets.matters.news/embed/edad2128-e514-45d7-bffb-c53f8dd51386.png)
![](https://assets.matters.news/embed/d33053fc-4b3d-46c9-83c3-f3f0474113d7.png)
對,就是這麼簡單。你可別小看這個運行環境,雖然你沒有執行任何安裝過程,但是它基本上涵蓋了你做數據科學分析要用到的各種工具,這些工具包括但不限於Numpy、Scipy、Pandas等,甚至連深度學習的框架,例如Tensorflow、Keras和Pytorch,也是一應俱全。
Google Colab的深度學習環境支援,可不只是軟體那麼簡單。Google慷慨的提供了GPU,甚至是更專業化的TPU,供你免費使用。
預設狀態下,這些雲端硬體是不開啟的。你需要在選單欄中選擇編輯--筆記本設定
![](https://assets.matters.news/embed/2656c25c-4fe6-40dd-9c2c-3622c0d6f895.png)
![](https://assets.matters.news/embed/e20c46a9-8fcc-4ec1-a210-5b4fcbbc0791.png)
想知道 Python 是哪個版本,你可以在 notebook 中插入 !python -V 這樣的 system alias 來觀察,所以當然也可以使用 !pip list 觀察到底預裝了哪些函式庫,如果想用的還沒裝,當然可以 !pip install --upgrade xxx 來安裝,而 notebook 的運行環境也可以隨時重置(執行階段 > 恢復原廠設定),所以不用怕把函式庫又搞爛。不過可能還是要注意一下是否有作業系統的相依性,Google Colab 的運行環境是 Ubuntu Linux。
![](https://assets.matters.news/embed/eab3bcd1-5f4a-4db0-b127-8c7dd1c12a5a.png)
將筆記本設定調整成GPU後,輸入!nvidia-smi,可於最下方顯示你的GPU是甚麼
![](https://assets.matters.news/embed/253703a2-7109-40df-b9a9-1db2d6ef0753.png)
提醒: 1)為避免啟動GPU後沒運算,程式先預設是使用CPU。當需要GPU時請到左上"執行階段"內的"變更執行階段類型"選GPU,並按右上的重新連線重啟一個container。2) 當你點選的GPU或TPU container運作後,若超過十幾分鐘沒有run程式,請關掉有GPU/TPU container,避免colab認為你佔著免費稀有資源不做事,會把你高檔加速器使用權暫時關掉"數小時",期間只能用CPU。3)若記憶體占用過大,也會造成kernel died,造成container重啟,暫存檔案都會不見。
![](https://assets.matters.news/embed/af0770e1-a101-4f30-b7ca-50119ff90eed.png)
假設在寫的過程中有遇到error可以點search stack overflow,會直接幫你查,方便你debug
![](https://assets.matters.news/embed/98e998b9-2757-4da5-92bc-b7796736fc12.png)
最後附上一段程式碼,深度學習框架,炫耀用
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())
官方介紹,裡面有更詳細的介紹,有興趣的可以看一下
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/avatar/55afa8e4-f5e0-42e3-8d90-b9bd1c085b18.gif/public)
- 来自作者
- 相关推荐