20190827のTensorFlowに関する記事は3件です。

Bazel を使用して Windows 上で TensorFlow 1.14 をビルドする(CPU版)

確認済みビルド環境

  • OS: Windows Server 2012 R2

  • Microsoft Visual C++ 2015 Update3

  • MSYS2 x64

  • bazel 0.24.1

  • Python 3.6.5

MSYS2 のセットアップ

MSYS2のサイト から 64 bit 版の MSYS2 をダウンロードしてインストールを行い、環境変数にパスを追加します。

MSYS2のコマンドプロンプトで where bash を入力して MSYS2 の bash が最初に表示されることを確認します。

出力結果の例

> where bash
C:¥msys64¥usr¥bin¥bash.exe
C:¥Program Files¥Git¥bin¥bash.exe

MSYS2 のアップデートとパッケージの追加

以下のコマンドで MSYS2 のインストール済みのパッケージをアップデートします。

pacman -Syu

次に、以下のコマンドで git, patch, unzip コマンドをインストールします。

pacman -Su
pacman -S git patch unzip

Bazel のセットアップ

Bazel はバージョンが変わると互換性がコロッと無くなってしまうので必ずバージョンを確認して 0.24.1 をダウンロード・インストールして下さい。(古いのはもちろん、新しくてもダメ)

Bazel をダウンロード・展開したら環境変数を追加して bazel.exe へパスを通しておきます。

Python のセットアップ

pip install six numpy wheel
pip install keras_applications==1.0.7 --no-deps
pip install keras_preprocessing==1.0.9 --no-deps

Windows のロングパス名を有効化

gpedit.msc を実行して「ローカルグループポリシーエディタ」を起動します。

コンピュータの構成 > 管理者用テンプレート > システム > ファイルシステム を選択し、その中の「Win32の長いパスを有効にする」を「有効」に変更します。

TensorFlow 1.14 のソースコード取得

以下のコマンドで TensorFlow のソースを取得します。

> git clone https://github.com/tensorflow/tensorflow.git
> cd tensorflow
> git checkout v1.14.0

Bazel の設定

上記の tensorflow ディレクトリ内で以下のコマンドを実行して設定を行います。"optimization flags" では "/arch:AVX2" を指定します。CUDA を使用しない場合はその他は全てデフォルトのままで問題ないはずです。

> python configure.py

設定例

設定値の内容は以下のようになります。Python の PATH は各自の環境に応じて読み替えてください。

項目 設定値
the location of python C:¥ProgramData¥Anaconda3¥envs¥py36¥python.exe
Python library paths C:¥ProgramData¥Anaconda3¥envs¥py36¥lib¥site-packages
XLA JIT support N
ROCm support N
CUDA support N
optimization flags /arch:AVX2
override eigen strong inline Y

ビルド

pip パッケージのビルド

先ず以下のコマンドで build_pip_package.exe をビルドします。

デフォルトだと bazel のビルドは C:/users/(username)/_bazel_(username)/ の下で行われます。この出力先を変えたい場合は bazel コマンドの後(bazelとbuildの間)にオプション --output_user_root=(dirname) で指定を行います。

bazel build --config=opt --copt=-nvcc_options=disable-warnings //tensorflow/tools/pip_package:build_pip_package --cpu=x64_windows --compiler=msvc-cl

成功すると以下のような出力が得られます。

Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
  C:/users/(ユーザ名)/_bazel_(ユーザ名)/(ハッシュ値)/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/tools/pip_package/build_pip_package
  C:/users/(ユーザ名)/_bazel_(ユーザ名)/(ハッシュ値)/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/tools/pip_package/build_pip_package.exe
INFO: Elapsed time: 1509.342s, Critical Path: 635.56s
INFO: 4628 processes: 4628 local.
INFO: Build completed successfully, 5234 total actions
INFO: Build completed successfully, 5234 total actions

次に、build_pip_package.exe を使用して wheel パッケージを作成します。

mkdir ..¥output
C:/users/(ユーザ名)/_bazel_(ユーザ名)/(ハッシュ値)/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/tools/pip_package/build_pip_package.exe ..¥output

成功すると指定した output ディレクトリに tensorflow-1.14.0-cp36-cp36m-win_amd64.whl という名前のファイルが生成されているはずです。

tensorflow.dll のビルド

C++ 等から TensorFlow を利用したい場合には以下のコマンドで tensorflow.dll がビルドできます。

bazel build --config=opt --copt=-nvcc_options=disable-warnings //tensorflow:tensorflow.dll --cpu=x64_windows --compiler=msvc-cl

成功すると以下のようなメッセージが表示され、表示されているパスに tensorflow.dll が置かれています。

Target //tensorflow:tensorflow.dll up-to-date:
  C:/users/(ユーザ名)/_bazel_(ユーザ名)/(ハッシュ値)/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/tensorflow.dll
INFO: Elapsed time: 141.033s, Critical Path: 83.40s
INFO: 1 process: 1 local.
INFO: Build completed successfully, 5 total actions
INFO: Build completed successfully, 5 total actions

出力先のディレクトリについて

Bazel はデフォルトで %USERPROFILE%¥_bazel_%USERNAME% に作業フォルダを作成します。これを変更したい場合はコマンドの実行時に引数で --output_user_root を指定します。

bazel build --config=opt --copt=-nvcc_options=disable-warnings //tensorflow/tools/pip_package:build_pip_package --cpu=x64_windows --compiler=msvc-cl

pb -> pbmm 変換ツール

以下のコマンドで pb を pbmm へ変換するツールのビルドができます。

bazel build --config=opt --copt=-nvcc_options=disable-warnings --copt=/arch:AVX --copt=/arch:AVX2 //tensorflow/contrib/util:convert_graphdef_memmapped_format --cpu=x64_windows --compiler=msvc-cl
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Coral Devboard を初期キッティングする手順

1.Introduction

本日、 Coral Devboard が手元に届きましたので、早速キッティングしてみます。 公式の手順は少しわかりにくかったですので、日本語でメモがてら作業記録としてココに残します。 奇跡的に全ての必要機材が手元に揃っていましたので、開梱して1時間ほどでキッティングが終わりました。

2.Environment

  • Ubuntu 16.04 x86_64
  • Type-C 電源アダプタ 5V / 3A
  • Type-A to microUSB ケーブル
  • Type-A to Type-C USBケーブル

3.Environment setting procedure

ホストPCのターミナルで下記のコマンドを順番に入力します。

$ sudo apt-get install screen
$ mkdir -p ~/.local/bin
$ wget -O Downloads/platform-tools-latest-linux.zip https://dl.google.com/android/repository/platform-tools-latest-linux.zip
$ unzip ~/Downloads/platform-tools*.zip -d Downloads
$ sudo mv ~/Downloads/platform-tools/fastboot ~/.local/bin/
$ rm ~/Downloads/platform-tools*.zip

$ fastboot --version
fastboot version 29.0.2-5738569
Installed as /home/xxxx/.local/bin/fastboot

$ sudo apt-get install -y python3-pip
$ sudo pip3 install pip --upgrade
$ sudo -H pip3 install --user mendel-development-tool

次に、Coral Devboard のディップスイッチの向きを確認します。 私の Devboard は最初から下表のように設定されていました。

Boot mode Switch 1 Switch 2 Switch 3 Switch 4
eMMC ON OFF OFF OFF

devboard-bootmode-emmc.jpg

続いて下記のコマンドを順番に入力します。

$ sudo sh -c "echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0525\", MODE=\"0664\", \
GROUP=\"plugdev\", TAG+=\"uaccess\"' >> /etc/udev/rules.d/65-edgetpu-board.rules"

$ sudo udevadm control --reload-rules && udevadm trigger

続いて、 Type-A to microUSB ケーブルを使用して、 ホストコンピュータのUSBポート と Devboard の microUSBポート を接続します。 microUSBポート付近のLEDが橙色に点灯します。
devboard-serial-co.jpg

次に、下記のコマンドを入力して、USBポートが正常に認識されていることを確認します。

$ dmesg | grep ttyUSB
[ 5978.379089] usb 1-3: cp210x converter now attached to ttyUSB0
[ 5978.381370] usb 1-3: cp210x converter now attached to ttyUSB1

ひとつ前のコマンドで表示された ttyUSB0 に対して、 screen コマンドを使用して接続します。

$ sudo screen /dev/ttyUSB0 115200

すると下図のように真っ黒な画面が表示されます。
Screenshot 2019-08-27 01:17:26.png
次に、Tpye-C 電源ケーブルを接続します。
devboard-serial-power-co.jpg

下記のように入力します。
Ctrl + C

u-boot=> fastboot 0

下図の状態で待ち状態になります。
Screenshot 2019-08-27 01:27:34.png
次に、 Type-A to Type-C USBケーブル [Data(OTG)] を Devboard と ホストPC へ接続します。
devboard-serial-power-data-co.jpg

screen コマンドを使用したターミナルとは別のターミナルをホストコンピュータで起動します。

Ctrl + Alt + T

続いて、新しく起動してきたターミナル上で下記のコマンドを実行します。

$ fastboot devices

Screenshot 2019-08-27 01:36:24.png

下記のコマンドを実行し、eMMCのフラッシュに必要なリソース一式をダウンロードし、 フラッシュ用スクリプト flash.sh を実行します。

$ cd ~/Downloads
$ curl -O https://dl.google.com/coral/mendel/enterprise/mendel-enterprise-chef-13.zip
$ unzip mendel-enterprise-chef-13.zip && cd mendel-enterprise-chef-13
$ rm ../mendel-enterprise-chef-13.zip 
$ bash flash.sh

フラッシュがスタートしますので、ビールでも飲みながら処理が終わるまでしばらくコンソールを眺めます。 5分ほど掛かります。
Screenshot 2019-08-27 01:41:14.png

終わりました。
Screenshot 2019-08-27 01:45:18.png

ログインしてみます。 screen コマンドを入力したターミナルで下記のように入力します。
IDは mendel
Passwordも mendel
です。

Mendel GNU/Linux (chef) lime-valet ttymxc0

lime-valet login: mendel
Password: mendel

Screenshot 2019-08-27 01:49:20.png

Wi-Fi 接続環境を整えるため、下記のコマンドを実行します。

$ nmtui

Activate a connection を選択し、表示されたSSIDのうち、適切なものを選択します。
続いて、Wi-Fiのパスワードを入力します。
うまくいっていれば、これで Wi-Fi によるインターネット接続環境が整います。

次に、 Devboard の内部パッケージを最新化します。

$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | \
sudo tee /etc/apt/sources.list.d/coral-edgetpu.list

$ sudo apt-get update
$ sudo apt-get dist-upgrade -y

最後に、 microUSBケーブルを Devboard から外して終わりです。
devboard-power-data-co.jpg

4.Finally

次回は、Edge TPU x3 + Devboard TPU x1 の合計4個仕立てで高速推論にチャレンジしてみたいと思います。
IMG_20190812_011433.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

End-to-End Machine Learning with TensorFlow on GCPを受講した話

3行で

https://www.coursera.org/learn/end-to-end-ml-tensorflow-gcp?specialization=advanced-machine-learning-tensorflow-gcp
Advanced Machine Learning with TensorFlow on Google Cloud Platform Specializationという一連のコースの1番目
GCPを使った基本的な機械学習プロジェクトの進め方を一通りさらえる

どんな人におすすめか

必須
・英語字幕で動画が理解できる
・クラウドサービスと機械学習に興味がある(触ったことがなくてもOK)

推奨
・SQLを触った事がある(SELECT, WHERE, GROUP BYの意味ぐらいわかればいい)
・オンプレの計算資源に依存しない機械学習システムを構築したい問題意識がある
・GCPの基本的な機能を使える
(不足を感じたらGoogle Cloud Platform Fundamentals: Core Infrastructureを受講するぐらいで大丈夫そう)

不適
・クラウドサービスを完全に理解しているマン
・どうしてもAWSしか使いたくないマン
・機械学習のモデリング部分にしか興味がない人
・機械学習の実際のプロジェクトを何度も回したことがある人

どんなコースか

GCPを使った基本的な機械学習プロジェクトの進め方を一通りさらう内容になっています。
公開されてる出産時の妊婦と新生児のデータを使って、出産前に新生児の体重を予測するサービスを構築する仮想のプロジェクトをベースに、
・どんな特徴量をつかうか
・どうやって(ごくごく単純に)モデルを構築するか
・構築したモデルをスケールアウトするには
・機械学習モデルをwebサービスとして提供するには
のような流れになっています。

6つ(+1つのオプション)のQwikLab実習があって実際にコードを書きながら学習することができます。

Specializationのあとに続くコースの基礎になっています。
あとに続くコースはより「質の高い」機械学習システムを構築する上で覚えるべきことが続きます。

感想など

実習も結構おんぶにだっこ感はあるけど、完全にお膳立てされてるわけでもなく、自分の裁量で考えてすすめる余地のあるものだった点は面白かった。
例えば、どんな特徴量をモデルに入れるべきか探索する実習では、一応お膳立てされた正解はあるものの、自分であれこれの特徴量を試すことができる。
あえて指示から脱線して自由に遊んでみるとより面白いし学べるんじゃないだろうか。
受講者の負担は時間とcourseraの受講料だけで、GCPの利用料が追加でかかるわけじゃないし、実習は何度も再受講可能だしね。

機械学習を実際のビジネスとして運用するまでに必要なことのうち、モデリングが占める割合なんてめちゃくちゃ少ないなとは常々思っていたけども、ここまで受講してようやく一通りさらえた感じがある。
コースの実習で使う素材はgithubで公開されているし、自分で機械学習プロジェクトを遂行する際にも大いに参照できる。
https://github.com/GoogleCloudPlatform/training-data-analyst

クラウドサービスを使うからまあ当たり前だけど、自分で環境構築せずに開発をはじめられるのはめちゃくちゃよい。
環境つくるのって時間の無駄な上に時間食うんだよな・・・。
このコースはGCP上のAI platformでJupyterLabを使って進められる。予めtensorflowを始めとしたパッケージが入ってる環境なので環境構築をすっとばして機械学習に集中できる。

これまでTensorFlowってDNNの計算ライブラリだと思ってたんですけど、それだけじゃないんですね。
機械学習のモデリングと、モデリングのすぐ近くにあるところまでカバーされてるんだね。
GCPのDataFlowからデータ受け取るとか、GCPで分散コンピューティングしてもらうとか。

次は

Advanced Machine Learning with TensorFlow on Google Cloud Platform Specializationを一通り受講したい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む