在Google Cloud Platform(GCP)中使用TensorFlow

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

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

在Compute Engine建立带GPU的实例并部署TensorFlow

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

../../_images/create_instance.png

需要注意两点:

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

  • 默认情况下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环境的过程:

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

输入 nvidia-smi 会显示:

  1. ~$ nvidia-smi
  2. Fri Jul 12 10:30:37 2019
  3. +-----------------------------------------------------------------------------+
  4. | NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
  5. |-------------------------------+----------------------+----------------------+
  6. | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
  7. | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
  8. |===============================+======================+======================|
  9. | 0 Tesla K80 Off | 00000000:00:04.0 Off | 0 |
  10. | N/A 63C P0 88W / 149W | 0MiB / 11441MiB | 100% Default |
  11. +-------------------------------+----------------------+----------------------+
  12.  
  13. +-----------------------------------------------------------------------------+
  14. | Processes: GPU Memory |
  15. | GPU PID Type Process name Usage |
  16. |=============================================================================|
  17. | No running processes found |
  18. +-----------------------------------------------------------------------------+

使用AI Platform中的Notebook建立带GPU的在线JupyterLab环境

如果你不希望繁杂的配置,希望迅速获得一个开箱即用的在线交互式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