- 投稿日:2020-01-15T23:47:09+09:00
Tensorflow2のMirroredStrategyを使って複数GPUで計算する
概要
非常に簡単。tf.distribute.MirroredStrategy
tf.distribute.MirroredStrategy
のスコープ内でネットワークを構築するだけ。変更は数行ですむ。Keras APIを用いた実装例
ここでは簡単な例として隠れ層が1層のみからなるシンプルなネットワークを構築しています。
import tensorflow as tf from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, Input from tensorflow.keras.optimizers import Adam with tf.distribute.MirroredStrategy().scope(): # このブロックでネットワークを構築する x = Input(32, dtype=tf.int32, name='x') hidden = Dense(20, activation='relu', name='hidden')(x) y = Dense(5, activation='sigmoid', name='y')(hidden) model = Model(inputs=x, outputs=y) model.compile( optimizer=Adam(lr=0.001), loss='binary_crossentropy', ) model.fit( x_train, y_train, epochs=10, batch_size=16, )関連
公式なドキュメントは次の通り。
Keras APIをそのまま利用する場合はこの記事で紹介した通りだが、custom training loopを実装している場合などは、さらに考慮すべき点がいくつかある。その場合は上記のドキュメントを参照していただきたい。
multi_gpu_model()
は2020年4月以降に廃止予定とのこと。
- 投稿日:2020-01-15T22:43:56+09:00
Tensorflow2.0のGPU版をWindows10で使用するまで
Tensorflow2.0のGPU環境を作る手順
tensorflow2.0でGPU環境を作る際に手間取ったので、ログを残しておく目的で記載。
この記事を読んでわかること
windows10環境でGPUを使ったtensorflow2.0.0が動かせるようになる
環境
- OS:windows10
- GPU:Geforce970
- python:3.6
- tensorflow:2.0
- CUDA:1.0.0
- cuDNN:7.4.1 for CUDA10.0
バージョン確認
tensorflowのページに記載されているバージョンでインストールする
バージョンの対応は厳密に決まっていて、10.0が10.1になっただけでも動かないため注意tensorflow1.Xの時はバージョン対応表があったのだが、2020年1月時点でtensorflow2.Xは記載されていない。
上のページから、インストールするバージョンは以下となる。
+ CUDA 10.0
+ cuDNN 7.4.1 for CUDA10.0
+ tensorflow-gpu==2.0.0alpha
インストール
Microsoft Visual C++ 2017
MicrosoftのサイトからVisual Studio 2017 communityをダウンロードしてインストールしますCUDA 10.0
CUDA10.1はtensorflow2.0に公式対応していないため、CUDA10.0を選択して公式サイトからダウンロードする。インストールを実行する。
システムの環境変数のPATHに以下の3つのパスを追加する。
+ C:\Proguramu Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
+ C:\Proguramu Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp
+ C:\Proguramu Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
- cuDNN 7.4.1 for CUDA10.0
公式サイトから、cuDNN 7.4.1 for CUDA10.0をダウンロードしインストールする。
ダウンロードには無料の会員登録が必要
「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0」を選ぶこと
それ以外では動かないので注意。ダウンロードした「cudnn-10.0-windows10-x64-v7.6.4.38.zip」を解凍し、中身を「C:\Proguramu Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0」にコピーすればOK。
- tensorflow2.0
pip install tensorflow-gpu==2.0.0
でインストールする。 pythonの3.6か3.5が入っていない場合、 事前にanacondaを利用して環境を作っておくインストール確認
正常にインストールされたことの確認を行います。
- CUDAバージョン確認
nvcc -v
コマンドでバージョンを確認する。
release 10.0となっていることを確認すればOK
```nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018
Cuda compilation tools, release 10.0, V10.0.130
```
- cuDNNバージョン確認
where cudnn64_7.dll
でエラーメッセージが出なければOK
```where cudnn64_7.dll
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\cudnn64_7.dll
```
tensorflow2.0インストール確認
tensorflowでGPUが使えていることの確認
以下のコードを実行する。#TensorFlowがGPUを認識しているか確認 import tensorflow from tensorflow.python.client import device_lib device_lib.list_local_devices()出力結果にGPUが出ていればOK
今回の結果だとdevice_type: "GPU"
とあるのでGPUが認識できている。
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 14349658765200920174, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 3143997849
locality {
bus_id: 1
links {
}
}
incarnation: 12577774133916212125
physical_device_desc: "device: 0, name: GeForce GTX 970, pci bus id: 0000:01:00.0, compute capability: 5.2"]
快適なtensorflow2.0.0ライフを!
- 投稿日:2020-01-15T10:59:45+09:00
第伍回開発合宿:その先にあるものとは!?
こんにちは、はじめまして、株式会社アクシス福岡オフィスのtakimotoです。
数えること5回目、そして今年最後の弊社開発合宿を12月14日に開催しました。
バックナンバーは以下よりどうぞ!
第一回: やっていくばい!開発合宿@福岡
第二回: 第二回開発合宿を開催: 話題のFlutterでSNSアプリ開発
第三回: 第三回開発合宿: チーム開発本格始動!
第四回: 【Vue.js and Nginx on Docker】第四回開発合宿【環境構築エラーの嵐】あなたは誰?
社会人18年目くらいのエンジニアです。前回のgotoよりちょっと、、、いやかなり年上です(汗)
日々迫り来る老化とショボショボになる老眼に立ち向かいながら、「若(わ)けぇのには負けたくねぇんだよ!」という反骨精神で私もこの開発合宿に参加するようになりました。
心だけは永遠の16(43)歳(`・ω・´)開発合宿とは
弊社社員がそれぞれアイデアを持ち寄って、思い思いのものをチームまたは個人で作成する強化合宿型の勉強会です。
興味のある技術、新しい手法、知らない分野などを積極的に取り入れ自分のものにし、日々の業務に活かせることを目的にしておりますが、そこまでお堅い集まりでもなく、みんなゆる〜く、そして楽し〜く取り組んでおります。
お菓子もあるよ(゚∀゚)開催場所
いつもとは違う環境で!という思いもあり、社外のレンタルスペースを利用させていただいています。
今回もスペースマーケットで博多のレンタルスペースをお借りしました。
テーマ
5回目ということで各々テーマやアイデアも固まっており、集合と同時に皆迷うことなく自分の作業に没頭していきます。
- チーム・アプリ開発
- バックエンド(Golang)
- 環境構築
- テーブル設計
- フロントエンド(Vue.js + TypeScript)
- 画面実装
- 筋トレアプリ開発(Android+kotolin)
- 書籍管理(Laravel+Vue.js)
- 機械学習のチュートリアル(Anaconda+TensorFlow)←takimotoはコレ
TensorFlowと私
今回の私のテーマはTensorFlowです。
現在私がこの合宿で構築しているシステムで、どうしてもAIによる判断が必要なフェーズに突入してしまいました。簡単に説明すると「ある画像から連想される別のキーワードを導出する」というものです。
たとえば「みかん」の画像から「甘い」「すっぱい」「果物」「オレンジ色」などなど。
これを、興味本位もあり、AIで実施できないか?という考えが今回私が取り組むきっかけになった大まかな概要です。AIとTensorFlow
とはいえ、AIの事をまったくわからない私がGoogleを駆使してたどり着いた一つの答えがこのTensorFlowになります。
TensorFlow(テンサーフロー)とは、Googleが開発しオープンソースで公開している、 機械学習に用いるためのソフトウェアライブラリである。おー、コレコレ!(わかっていない)
そんな感じで着手しました(ノリと勢いが大事だよね!)環境構築
兎にも角にも環境がないと動かすことすらままならないTensorFlow。
今回は以下の環境を使用しました。
- Anaconda
- TensorFlow 2.0
この2つだけで機械学習が始められます。
導入はこちらの記事を参考にさせていただきました。
https://qiita.com/FukuharaYohei/items/d8f82c827e0bae70096aえ、、、私のTensorFlow高すぎない!?問題
先ほどの記事を元にAnaconda+TensorFlowインストール後、Terminalを起動!
そして古からの盟約(=お約束)である「Hello World」をいざ実行!
import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello))、、、なんかエラーでてるんですけど!?
この歳で「Hello World」が一発で動かないとショック大きいです。(歳は関係ない)
で、色々調べたところ、どうやら2019年12月14日現在の最新TensorFlowのバージョンは2.0とのこと。
記事のバージョンは1.3ということで、一部仕様の変更が行われた様子、、、どうやらこれが問題らしい。バージョン2.0だと
import tensorflow as tf msg = tf.constant('TensorFlow 2.0 Hello World') tf.print(msg)これでいいみたい。
実際に実行し、問題ないことを確認しました。
ここからさらにGoogleが用意するTensorFlowのチュートリアル「ファッションMNIST」と「映画レビューのテキスト分類」について行いましたが、これはまた次の機会に。
チュートリアルは下記にありますので、興味のある方は覗いてみてください。
https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ja番外編:恒例のランチタイム
博多と言えばコレでしょう!ということで、今回は豚骨ラーメンです。
博多ラーメンは替え玉ができますので、「もう少し食べ足りないな」という場合は、迷わず替え玉しちゃいましょう。
お店によっては「替え玉半分」が注文できるお店もありますよ!番外編 その2:その先にあるものとは、、、ビールでした!
開発合宿を始めて、最初の年末ということで、合宿終了後ついつい乾杯してしまいました(笑)
今年の反省と来年の抱負を語りながら飲むビールは格別です!!
それではまた、2020年の開発合宿の記事をお楽しみに♪