Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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あり

image.png

GPUなし

image.png

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系のコード変換と動作が試せた
tomo_makes
書いたもの: 『図解速習DEEP LEARNING』『機械学習の炊いたん。』ほか すきなもの: 機械学習、グラフ、いろんな可視化、つくる、アジア・中東各国料理と音楽
https://amzn.to/2J0QNGF
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away