Edited at

【CUDA10化でGPUもOK!】TensorFlow 2.0 Previewを最速で試す on Colaboratory


19/2/8更新 ColaboratoryのCUDAが10.0に上がったため、GPU版も動くようになりました



TL;DR


  • 待ちに待ったTensorFlow 2.0 PreviewがPyPIに公開された。インストール方法は -


    • GPUなし: pip install tf-nightly-2.0-preview

    • GPUあり: pip install tf-nightly-gpu-2.0-preview



      • ただし現状CUDA 10.0前提なのでGPUなし版のみ動く(ColabはCUDA 9.2) ColabはCUDA 10.0



    • 付属 tf_upgrade_v2 ツールで1.x系コードを2.0系に変換できる

    • TFHub他、まだ2.0対応していないプロジェクトあり。alphaで対応する



  • Colabでどこまでできるかやってみよう


    • 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)


      • Transfer LearningでGPUあり/なし両方の動作が試せた



    • 非公式チュートリアル(ageron/tf2_course)のipynbを試せた

    • SEEDBANKのFashionMNISTで、1.x系->2.0系のコード変換と動作が試せた




はじめに - TensorFlow 2.0とは

経緯や利点は、下記の記事に詳しく紹介されています。

2018年内とアナウンスされていましたが、少し遅れ、このほどPreview版が公開されました。Colaboratory上で動作を確認してみます。(Colaboratoryの詳しい使い方はこちら)


本記事の構成


  1. ColabでTensorFlow 2.0を使うには

  2. 2.0系 公式チュートリアルを試す

  3. 2.0系 非公式チュートリアル(Deep Learning with TensorFlow 2 and Keras course)を試す

  4. TensorFlow 2.0で、1.x系のコードを使うには


1. ColabでTensorFlow 2.0を使うには


新しいColaboratoryノートブックを開く

https://colab.research.google.com/ を開き、 Python 3の新しいノートブック を選択。


TensorFlow 2.0 Previewをインストール

新しいコードセルで、下記を実行すると、最新のTensorFlow 2.0 Preview版がインストールされます。

!pip install  tf-nightly-2.0-preview

GPUなしでは動作する。


注: GPUインスタンスに !pip install tf-nightly-gpu-2.0-preview を試したがエラーで動かない(Colabは現状CUDA 9.2。tf2.0 previewはCUDA 10.0前提?)



コード変換(1.x系->2.0系)のユーティリティについて

1.x系のコードを2.0環境で使うには tf_upgrade_v2 を使い、ソースコードを変換します。

!tf_upgrade_v2

で、Usageが表示されます。


  • 1ファイルだけ変換する場合 --infile で入力.py、 --outfile で出力.pyを指定

  • ディレクトリ全体を変換する場合 --intree で入力ディレクトリ、 --outtree で出力ディレクトリを指定

  • 入力ディレクトリの.py以外を、出力ディレクトリにコピーしたくなければ --copyotherfiles False を付加

  • 変換すると、結果が report.txt として保存

あたりを押さえておくとよいでしょう。実際の変換方法は後述します。また詳細は、 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/compatibility に実コードや README.md があります。


2. TensorFlow 2.0公式チュートリアル

tensorflow/docs/site/en/r2 に公式の2.0系チュートリアルipynbがあります。下記のリンクから、すぐにColab notebookが開きます。

ノートブックに含まれていない場合は !pip install tf-nightly-2.0-preview を実行し、TensorFlow Preview 2.0をインストールしてから始めます。


2.1 Transfer LearningのチュートリアルでGPUあり/なしを試す

上記から、Transfer Learning Using Pretrained ConvNetsで、CUDA 10.0化後のGPU動作を確認してみました。20倍程度速く学習が進んでいるのがわかります。

GPUあり

GPUなし


3. TensorFlow 2.0の非公式チュートリアルを試す

早速公開されたDeep Learning with TensorFlow 2 and Keras courseのipynbを試してみましょう。下記のリンクから、すぐにColab notebookが開きます。

最初のセルで忘れず !pip install tf-nightly-2.0-preview を実行し、TensorFlow Preview 2.0をインストールしてから始めます。

20190111現在、TensorFlow 2.0ベースで、すでに3つの講座が準備されています。

それぞれ対話型で進められます。途中演習問題があり、詰まったら、後の解答を参照することができます。


4. TensorFlow 2.0で、1.x系のコードを使うには

SEEDBANK tf.keras Fashion MNISTで、1.x系から2.0系へのコード変換と実行を試してみます。


.pyの取得

Seedbank: "Fashion MNIST with tf.keras" このColaboratoryノートブックを.py 形式で取得し、それを2.0用コードに変換し、動作するか試す。


  • 上記で開いたノートブック(以下、元ノートブック)とは別に、Seedbank: "Fashion MNIST with tf.keras"から、 Run seed in Colab を押し、ノートブックをColab上で開く


  • ファイル> .pyをダウンロード で、ローカル上に basic_classification.py を保存

  • 元ノートブックのファイルブラウザ(左ペイン)から、 basic_classification.py をアップロード


2.0系対応コードへの変換


  • 元ノートブックで下記を実行

!tf_upgrade_v2 --infile basic_classification.py --outfile basic_classification_upgraded.py

すると、変換が成功した。

Line 240:24: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'

TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 1 files

Detected 0 errors that require attention
--------------------------------------------------------------------------------

Make sure to read the detailed log 'report.txt'

report.txt に結果が出ているので見てみる。Adam optimizerが、1.x系互換性のための tf.compat.v1.* 配下に変換されたようだ。

--------------------------------------------------------------------------------

Processing file 'basic_classification.py'
outputting to 'basic_classification_upgraded.py'
--------------------------------------------------------------------------------

Line 240:24: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
--------------------------------------------------------------------------------


逐次実行してみる

変更されたのはoptimizerだけですが、動きました。

# TensorFlow and tf.keras

import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

2.0 ではなく、 1.13.0-dev20190110 と表示されているが、それでよい。

fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
train_images = train_images / 255.0
test_images = test_images / 255.0

model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])

# ここのOptimizerが変換されている
model.compile(optimizer=tf.compat.v1.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=5)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
predictions = model.predict(test_images)

とりあえず動きました。


まとめ (20190111初稿、20190208更新)


  • 待ちに待ったTensorFlow 2.0 PreviewがPyPIに公開された。インストール方法は -


    • GPUなし: pip install tf-nightly-2.0-preview

    • GPUあり: pip tf-nightly-gpu-2.0-preview



      • ただし現状CUDA 10.0前提なのでGPUなし版のみ動く(ColabはCUDA 9.2) ColabはCUDA 10.0



    • 付属 tf_upgrade_v2 ツールで1.x系コードを2.0系に変換できる

    • TFHub他、まだ2.0対応していないプロジェクトあり。alphaで対応する



  • Colabでどこまでできるかやってみよう


    • 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)


      • Transfer LearningでGPUあり/なし両方の動作が試せた



    • 非公式チュートリアル(ageron/tf2_course)のipynbを試せた

    • SEEDBANKのFashionMNISTで、1.x系->2.0系のコード変換と動作が試せた