[译] 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前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏