Using TensorFlow on cloud

Using TensorFlow in Colab

Google Colab 是谷歌的免费在线交互式 Python 运行环境,且提供 GPU 支持,使得机器学习开发者们无需在自己的电脑上安装环境,就能随时随地从云端访问和运行自己的机器学习代码。

进入 Colab(https://colab.research.google.com),新建一个 Python3 笔记本,界面如下:

../../_images/new.png

如果需要使用 GPU,则点击菜单 “代码执行程序 - 更改运行时类型”,在 “硬件加速器” 一项中选择 “GPU”,如下图所示:

../../_images/select_env.png

我们在主界面输入一行代码,例如 import tensorflow as tf ,然后按 ctrl + enter 执行代码(如果直接按下 enter 是换行,可以一次输入多行代码并运行)。此时 Colab 会自动连接到云端的运行环境,并将状态显示在右上角。

运行完后,点击界面左上角的 “+ 代码”,此时界面上会新增一个输入框,我们输入 tf.__version__ ,再次按下 ctrl + enter 执行代码,以查看 Colab 默认的 TensorFlow 版本,执行情况如下:

../../_images/tf_version.png

小技巧

Colab 支持代码提示,可以在输入 tf. 后按下 tab 键,即会弹出代码提示的下拉菜单。

可见,截至本文写作时,Colab 中的 TensorFlow 默认版本是 1.14.0。在 Colab 中,可以使用 !pip install 或者 !apt-get install 来安装 Colab 中尚未安装的 Python 库或 Linux 软件包。比如在这里,我们希望使用 TensorFlow 2.0 beta1 版本,即点击左上角的 “+ 代码”,输入:

!pip install tensorflow-gpu==2.0.0-beta1

按下 ctrl + enter 执行,结果如下:

../../_images/install_tf.png

可见,Colab 提示我们重启运行环境以使用新安装的 TensorFlow 版本。于是我们点击运行框最下方的 Restart Runtime(或者菜单 “代码执行程序 - 重新启动代码执行程序”),然后再次导入 TensorFlow 并查看版本,结果如下:

../../_images/view_tf_version.png

我们可以使用 tf.test.is_gpu_available 函数来查看当前环境的 GPU 是否可用:

../../_images/view_gpu.png

可见,我们成功在 Colab 中配置了 TensorFlow 2.0 环境并启用了 GPU 支持。

你甚至可以通过 !nvidia-smi 查看当前的 GPU 信息:

../../_images/nvidia_smi.png

可见 GPU 的型号为 Tesla T4。

Using TensorFlow on Google Cloud Platform (GCP)

Google Cloud Platform(GCP) 是 Google 的云计算服务。GCP 收费灵活,默认按时长计费。也就是说,你可以迅速建立一个带 GPU 的实例,训练一个模型,然后立即关闭(关机或删除实例)。GCP 只收取在实例开启时所产生的费用,关机时只收取磁盘存储的费用,删除后即不再继续收费。

我们可以通过两种方式在 GCP 中使用 TensorFlow:使用 Compute Engine 建立带 GPU 的实例,或使用 AI Platform 中的 Notebook 建立带 GPU 的在线 JupyterLab 环境。

Instantiating on Compute Engine with GPU and deploying TensorFlow

GCP 的 Compute Engine 类似于 AWS、阿里云等,允许用户快速建立自己的虚拟机实例。在 Compute Engine 中,可以很方便地建立具有 GPU 的虚拟机实例,只需要进入 Compute Engine 的 VM 实例(https://console.cloud.google.com/compute/instances),并在创建实例的时候选择 GPU 类型和数量即可。

../../_images/create_instance.png

需要注意两点:

  1. 只有特定区域的机房具有 GPU,且不同类型的 GPU 地区范围也不同,可参考 GCP 官方文档 并选择适合的地区建立实例;

  2. 默认情况下 GCP 账号的 GPU 配额非常有限(可能是怕你付不起钱?)。你很可能需要在使用前申请提升自己账号在特定地区的特定型号 GPU 的配额,可参考 GCP 官方文档:申请提升配额 ,GCP 会有工作人员手动处理申请,并给你的邮箱发送邮件通知,大约需要数小时至两个工作日不等。

当建立好具有 GPU 的 GCP 虚拟机实例后,配置工作与在本地基本相同。系统中默认并没有 NVIDIA 显卡驱动,依然需要自己安装。

以下命令示例了在 Tesla K80,Ubuntu 18.04 LTS 的 GCP 虚拟机实例中配置 NVIDIA 410 驱动、CUDA 10.0、cuDNN 7.6.0 以及 TensorFlow 2.0 beta 环境的过程:

sudo apt-get install build-essential    # 安装编译环境
wget http://us.download.nvidia.com/tesla/410.104/NVIDIA-Linux-x86_64-410.104.run    # 下载NVIDIA驱动
sudo bash NVIDIA-Linux-x86_64-410.104.run   # 安装驱动(一路Next)
# nvidia-smi  # 查看虚拟机中的GPU型号
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh  # 下载Miniconda
bash Miniconda3-latest-Linux-x86_64.sh      # 安装Miniconda(安装完需要重启终端)
conda create -n tf2.0-beta-gpu python=3.6
conda activate tf2.0-beta-gpu
conda install cudatoolkit=10.0
conda install cudnn=7.6.0
pip install tensorflow-gpu==2.0.0-beta1

输入 nvidia-smi 会显示:

~$ nvidia-smi
Fri Jul 12 10:30:37 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104      Driver Version: 410.104      CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   63C    P0    88W / 149W |      0MiB / 11441MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Using Notebook in AI Platform to establish online JupyterLab environment with GPU

如果你不希望繁杂的配置,希望迅速获得一个开箱即用的在线交互式 Python 环境,可以使用 GCP 的 AI Platform 中的 Notebook。其预安装了 JupyterLab,可以理解为 Colab 的付费升级版,具备更多功能且限制较少。

进入 https://console.cloud.google.com/mlengine/notebooks ,点击 “新建实例 - TensorFlow 2.0-With 1 NVIDIA Tesla K80”,界面如下:

../../_images/create_notebook.png

也可以点击 “自定义” 来进一步配置实例,例如选择区域、GPU 类型和个数,与创建 Compute Engine 实例类似。

提示

和 Compute Engine 实例一样,你很可能需要在这里选择自己适合的区域,以及申请提升自己账号在特定地区的特定型号 GPU 的配额。

建立完成后,点击 “打开 JUPYTERLAB”,即可进入以下界面:

../../_images/notebook_index.png

建立一个 Python 3 笔记本,测试 TensorFlow 环境:

../../_images/notebook_test.png

我们还可以点击左上角的 “+” 号,新建一个终端:

../../_images/notebook_terminal.png

Running TensorFlow on Aliyun instance with GPU

国内也有部分云服务商(如 阿里云腾讯云 )提供了 GPU 实例,且可按量计费。至本手册撰写时,具备单个 GPU 的实例价格在数元(Tesla P4)至二十多元(Tesla V100)每小时不等。以下我们简要介绍在阿里云使用 GPU 实例。

提示

根据不同的地区、配置和付费方式,实例的价格也是多样化的,请根据需要合理选择。如果是临时需要的计算任务,可以考虑按量付费以及使用抢占式 VPS,以节约资金。

访问 https://cn.aliyun.com/product/ecs/gpu ,点击购买,界面如下:

../../_images/vps_select.png

此处,我们选择一个带有 Tesla P4 计算卡的实例。

在系统镜像中,阿里云提供多种选择,可以根据需要选择合适的镜像。

../../_images/os_image_config_with_driver.png

如果选择 “公共镜像”,可以根据提示选择提前预装 GPU 驱动,可以避免后续安装驱动的麻烦。

../../_images/os_image_with_RAPIDS.png

在 “镜像市场” 中,官方也提供了适合深度学习的定制镜像。在本示例中我们选择预装了 NVIDIA RAPIDS 的 Ubuntu 16.04 镜像。

然后,通过 ssh 连接上我们选购的服务器,并使用 nvidia-smi 查看 GPU 信息:

(rapids) root@iZ8vb2567465uc1ty3f4ovZ:~# nvidia-smi
Sun Aug 11 23:53:52 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            On   | 00000000:00:07.0 Off |                    0 |
| N/A   29C    P8     6W /  75W |      0MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

确认了驱动无误之后,其他操作就可以照常执行了。

提示

阿里云这类国内的云服务提供商一般对于 VPS 的端口进行了安全策略限制,请关注所使用的端口是否在安全策略的放行列表中,以免影响 Tensorflow Serving 和 Tensorboard 的使用。