Translate

2017年9月26日火曜日

FloydHubを使ってKerasのサンプル lstm_text_generation.py を動かしてみる

タイムラインにふらっと入ってきた記事で FloydHubというものを知った。
FloydHub
https://www.floydhub.com/

Heroku風の機械学習環境のPaaSとのこと。

..そもそもHeroku知らないんですけど..というかPythonを使いだしたのも今年からだし..


どうも100時間無料らしいし、
AWSのように事前カード情報登録も要求されないらしい
(今のところ..かもしれないが..)ので
ためしに使ってみることにした。


サンプルコードは

lstm_text_generation.py :ニーチェの著作からテキスト生成
https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

のニーチェデータをダウンロードするところを

青空文庫
http://www.aozora.gr.jp/

の著作権が問題なさそうな日本語テキストを使った。

ここのサイトは数少ない日本語データサイトで、
太宰治の人間失格や宮沢賢治の風の又三郎、
夏目漱石の坊っちゃんなどがコーパスとして使えたりする。


ルビ付きテキストデータは、
先頭とお尻にメタ情報があるのでこれを外す必要がある。
あと《.. 》でルビを降っている部分と
[#..]で入力注がある部分は正規表現でカットして
Shift_JISをUTF-8にして、改行をLFのみにする。

このファイルを読み込んで動くように lstm_text_generation.py
修正しておく。

データ含め全部同じディレクトリへ置いておく。


JupyterコンソールのTerminal から

pip3 install floyd-cli

を実行してfloydコマンドを使えるようにする。


最初に実行する

floyd login

を実行するとローカルのブラウザ上げるぞみたいなメッセージが出てあせった。
キー情報をブラウザ上二表示するからコピペせよといってくるのだ。

Dockerコンテナで動かしているJupyter notebookなので
ブラウザ以前にXなんかも当然入っていない..

が、FloydHubサイトへログインして Setting>CLI Auth Tokenへいくと
取得できるようになっているので大丈夫だった..

次にサイト上でProjects>NewProjectで
適当なプロジェクト名入れて新規プロジェクトを立ち上げる。



再度Terminalで先程用意したデータとPythonファイルのある
ディレクトリへもどり

floyd init <プロジェクト名>

を実行して


floyd run --env tensorflow-1.3 "python <修正したPythonファイル名>"


を実行する。



しばらくアップロードしてそうな情報が出て動き出すが
プロンプトは帰ってくる。

floyd logs <プロジェクト名>

でコンソールを参照できるのだけど
一部だけしか見れないのでサイトの該当プロジェクトのConsoleへいくと
以下のように見ることができる。




40文字をインプットにして次の1文字を予測するLSTMモデル(128セル)なのだけど..
今のところ、完全な日本語になって無いところのほうが多い..

あ、ローカル環境で動かしていたのでiterationを40にしちゃっていたよ..

なんか重くなりそうだったからコールバック関数は一切仕込んでなかったけど
PaaSなら誰にも迷惑かからないから仕掛けていても良かったか..



無料環境はCPUのみなので floyd run --gpu を付けるとエラーになる

..コンソールの更新がひどく遅い...

GPU(有償ユーザ)になったらもっとヌルヌル流れていくのだろうか..



..そういや、生成している文章の著作権って..誰のになるんだろう..

..太宰?、サンプルコード作者?修正した私も少し権利ある?...







..2時間位まわしていたら、Consoleに

Your logs have exceeded our length guidelines for Running jobs.
Please refresh the page or download logs to view your current job's logs.


ログが実行ジョブの長さガイドラインを超えました。
現在のジョブのログを表示するには、ページを更新するか、ログをダウンロードしてください。

と出てログが更新されなくなった。
ブラウザの更新ボタンを押したが、上記メッセージが最後に出てその後一切出てこなくなった..
Console右上にあるダウンロードボタンを押せば見えるけど..
....毎回ファイルにダウンロードしないとダメなの?


生成したテキストをファイル化するように加工しとけばよかったか..


2017年9月7日木曜日

NVIDIA Tesla K20C で Tensor2Tensor を動かしてみた

ふとしたことで一時的にNVIDIA Tesla K20Cが使える機会ができた。

(TeslaはVoltaが出だした今からだと5世代前(2008年ころ)のアクセラレータです)

ので、ココぞとばかりに前に動かしたTransformerモデルの
実装サンプル Tensor2Tensor をオプションなしで動かしてみた。



ただワークフローは英独翻訳になっていて
日本語がない...

T2Tの実装サンプルを拡張しない限り
日本語コーパスがないので
ワークフロー通り日独翻訳をやるしかない..

そこで、
原文の英語と翻訳後のドイツ語をGoogle翻訳にかけて
日本語にして比較してみた。

上段:原文をOSSで翻訳したものをGoogle翻訳で日本語に
下段:原文をそのままGoogle翻訳で日本語に

------
もしもし
こんにちは世界

さよなら世界
さようなら世界

私は私が何になるのか分からない。
私は私が使用するものではありません。


注:「私は昔の私ではありません。」が正解

夏には父は私たちをビーチに連れて行きます。
夏には父は私たちをビーチに連れて行きます。

みなさんこんにちは。
皆さんこんにちは 。

私の名前はMaile Johnsonです。
私の名前はMaile Johnsonです。

私はトルクメニスタンの大学の講師です。
私はハワイの高校生です。

去年の夏、私は17歳の日本人学生、Sayuriに会いました。
去年の夏、私は17歳の日本人学生、Sayuriに会いました。

彼女の夏休み中、彼女は市を訪れ、市を訪問し、彼女を英語で訪問する
彼女は夏休み中にハワイを訪れ、英語を勉強しました。

彼女は地元の学生として2週間家にいました。
彼女はホームステイの学生として2週間滞在しました。

私たちはとても良い友達になった。
私たちはとても良い友達になった。

ある日、彼女は私に言った。「あなたの父親はしばしばアロハシャツを着ています。私は彼らが好きです。彼らはとてもハワイ人です。
ある日、彼女は私に言った、 "あなたの父親はしばしば仕事にアロハシャツを着ます。(以下、翻訳を無視)
注:Google翻訳はたまにセンテンスを無視することがあります。上記上段のハワイアン~のくだりが下段にないのはそのためです。

私は答えた日本の着物に興味があります。
「日本の着物に興味があります」と私は答えました。

最初のアロハシャツはアジアの人々が作ったものです。
実際、ハワイの最初のアロハシャツはアジアの人々によって作られたものです。

彼らは日本の着物から来ます
彼らは日本の着物から作られました。

私はこの話をSayuriに語った。
私はこの話をSayuriに語った。

彼女は好奇心をそそられた。
彼女は好奇心をそそられた。

「日本からトルクメニスタンへの着物はどうでしたか?(以下、無視)
「日本からハワイに着物はどのように届いたのですか?」と彼女は尋ねた。

注:これもGoogle翻訳の無視

今日、ハワイの文化の例として世界中で知られているアロハシャツです。
今日、ハワイの文化の例として世界中で知られているアロハシャツです。

あなたはそれらを多くの場所で見ることができます。
あなたはそれらを多くの場所で見ることができます。

文化は混在し、世界はますます小さくなっています。
文化は混じり合い、世界はより小さくなっています。

それはとても良いことではありませんか?
それは素晴らしいことではありませんか?


------

  • T2T_v1.2.0:Apache2 License
  • TensorFlow_1.3.0:Apache2 License
  • Python_3.5.2:Python Software License
  • Copus:WMT Dataset 14
  • GPU(NVIDIA K20C)でまる2日間学習


..一昔前の翻訳サイトに少し劣るくらいのレベル..かな?

独自のコーパスを追加してもうちょっと学習させれば
もうすこしは良い性能を出せるかもしれないけど..

Google翻訳も、
語句や場合により1文
まるまるをガッツリなかったかのように
無視を決める事があるので厄介だ...



こうなると、英日コーパスが欲しくなるところなのだけど..


p.s.

ちなみにUbuntu上での環境構築は
GeForceより簡単だった。

5世代前のくせにPascalのGeForce1050Tiとは全然速度が違う。
結局GPU側のメモリ量なのかもしれないなあ..

2017年8月28日月曜日

TensorFlow1.3.0 になってからTensorBoardがデフォルトでインストールされなくなった



もうタイトルで言いたいことを書いてしまったのだけど..

rcのないTensorFlow1.3.0をDockerイメージで立ち上げたのだけど
デフォルトでTensorBoardが入らなくなってしまった..

pip3 install tensorflow-tensorboard を実行すればインストールされる。


あとでRelease Noteみたら

先頭にちょこっとTensorBoardはココを見ろとか書かれていて
リンクを踏むと、いつのまにかTensorBoardだけ別プロジェクトになってて
ReleaseNoteが個別になっていた..


TensorBoardは別のpipパッケージtensorflow-tensorboard[1]としてリリースされました。 TensorFlowはこのパッケージに依存しているため、ユーザの操作は必要ありません。 TensorBoard 0.1.xシリーズはTensorFlow 1.3.xに対応しています。


..しっかり英語のドキュメントを読みなさいってことね..


..にしても、TesnorFlowのBrainチームって、日本人には冷たいねえ..


 以下、TensorBoard0.1.4ののこりのReleaseNoteドキュメントを勝手翻訳したものです。
翻訳内容at your own riskで参照してください。
--------

機能


  • TensorBoardには完全な機能を備えたプラグインシステムが追加されました。 既存のファーストパーティのダッシュボードはこのAPIを使用するように変換されているため、任意のサードパーティのプラグインよりも特権がありません。 詳細は https://github.com/tensorflow/tensorboard-plugin-example をご覧ください。
  • ビジュアライゼーションのページが変更され、大規模なデータセットによるCPUのロックが防止されます。
  • 私たちは現在、色盲ユーザにとってより使いやすくなっています。 彼の助けを借りて Paul Tol に感謝します。 #288を参照のこと
  • グラフエクスプローラで、TensorFlow関数(function.Defun)を表すノードを展開できるようになりました。
  • グラフエクスプローラでは、モデルがテンソル処理単位で実行できるかどうかを明確にするTPU互換性によってノードを色付けできます。
  • メインメニューにはアクティブなダッシュボードしか表示されないため、混乱が少なくなり、特に小さな画面で役立ちます。 



バグ修正と改善


  • TensorBoardは、より少ないHTTP要求で、ネットワーク経由でより高速にロードされるようになりました。
  • スムージングが無効になっている場合、スカラーチャートのツールチップに誤解を招くような値が表示されることはなくなりました。
  • 画像ダッシュボードには、実際のサイズで画像を表示するためのダッシュボード全体の切り替えが用意されました。
  • グラフエクスプローラからグラフをダウンロードすると、小さな画像が表示されなくなりました。
  • ログ出力がより良くなりました。


 既知の問題点


  • 関数 tensorboard.util.encode_wav とモジュール tensorboard.plugins.audio.summary は最新のNightlyバージョンのTensorFlowに依存し、TensorFlowバージョン1.3.0では動作しません。

[1] 将来的にPyPi上でtensorboardという名前に変更されます。 いまのところはtensorflow-tenmsorboardでインストールしてください。

2017年8月22日火曜日

DockerコンテナでTensorFlow環境上げる場合、ホスト側はNVIDIAドライバだけで良いことに気づく

TensorFlowが1.3.0正式版になっとる..
しかもCUDA Toolkitのバージョンが5.1では動かないらしい..

環境をつくりなおさんと..
と思っていたらちょうど
他部署で使用していない Telsa K20c搭載マシンが余ったので
使わせてもらうことになった。

Ubuntu Server 16.04 LTS を最小構成+OpenSSH Serverでインストールして
以下のNVIDIAサイトでドライバをダウンロードする。

NDIVIAドライバダウンロードサイト:
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

製品のタイプ:Telsa
製品シリーズ:P-Series
製品ファミリ:Telsa P100
OS:Linux 64-bit Ubuntu 16.04
CUDA Toolkit: 8.0
言語: Japanese


で検索、上記K20cではないが製品サポートリストに "Telsa K20c" があることを確認。

deb ファイルが落とせるようになるのでこれを落とす。
そして追加情報タブに書かれた手順でドライバをインストールする。


このあとcuDNN..と思ったのだけど、NVIDIAのサイトで以下のページを見つけた。


GPU を搭載した Docker コンテナ
http://www.nvidia.co.jp/object/docker-container-jp.html

どうも
https://github.com/NVIDIA/nvidia-docker
README.mdを日本語訳したものらしい..

で、絵をあらためて眺めてみると..

nvidia-docker環境だったら、
ホスト側 CUDA Dirverまででいい

ことに今頃気づく!


TensorFlowのバージョンでcuDNNのバージョン指定があったりするけど
Dockerコンテナで動作させている限りcuDNNは無視して良いわけだ..


..やっぱり、Dockerコンテナだな、TensorFlow動かすのは..


2017年8月8日火曜日

TensorFlow Serving 1.0 リリースのブログ記事を翻訳してみた


今朝、Twitterをみると、こんな記事がながれてきた。


ので、ちょっと翻訳してみることにした。
参照の場合はat your own risk でお願いします。

r0.12のころに読んだServingは、
訓練サーバと予測サーバ(プロダクト側)をgRPCでつなぐ実装例みたいに
とらえていたのだけど、1.0ってことはそのあたりの仕組みもTesnorFlowで
もってくれるってことなのかもしれない。

とりあえず、読んで見る。
----

TensorFlow Serving 1.0


Kiril Gorovoy, ソフトウェアエンジニア

TensorFlow Servingは、プロダクト環境向けに設計された機械学習モデル用の高性能サービングシステムで、2016年2月の最初のオープンソースリリース以来、我々は長い道のりを歩んできました。今日、TensorFlow Serving 1.0のリリースをお知らせいたします。 バージョン1.0は、TensorFlow 最新版以降のバージョンで構築されています。

システムの概要については、Google I / O 2017のNoah Fiedelの講演をご覧ください。



プロジェクトを最初にセットアップしたとき、モデルのライフサイクルを管理し、推論要求を処理するためのコア機能を提供する一連のライブラリでした。 その後、Predict APIを使用したgRPC Model Serverバイナリと、Kubernetesに展開する方法の例を紹介しました。 それ以来、さまざまなユースケースに合わせて機能を拡張し、ユーザーのニーズを満たすためにAPIを安定させるように努めました。 現在、Googleでは、TensorFlowサービングをプロダクションで使用する800以上のプロジェクトがあります。 安定した、堅牢で高性能な実装でサーバーとAPIをテストしました。

apt-get installを使って、事前ビルドされたバイナリを入手することができました。 さて、TensorFlowを使い始めるには、コンパイルに時間を費やすことなく、簡単にインストールして実行できます。 いつものように、Dockerを使って、Linux以外のシステムにLinuxサーバーをインストールすることができます。

このリリースでは、TensorFlow Servingも従来のSessionBundleモデルフォーマットのサポートを正式にdeprecateし、中止しています。 SavedModelでは、TensorFlow 1.0の一部としてのTensorFlowのモデル形式が正式にサポートされた形式になりました。

開始するには、プロジェクトとチュートリアルのドキュメントを参照してください。 TensorFlow 1.0をお楽しみください!


-----
aptだけでなくDockerfileも公開したよ、ということでのぞいてみたけど..

SavedModel云々のくだりから推測するに、どうもr0.12のころからは実装が変わっている様子だが..

ためしてみるか..

なお、上のDockerリンクはCPUのみ版で、GPU版もちゃんとあるようだ。




2017年7月21日金曜日

TensorFlow 1.3.0 rc0 がリリースされたことを知る

今朝、Twitterのタイムラインに

があがっていたので、リリースノートを勝手翻訳してみた。
以下参考にする方は at your own risk で参照のこと。

-----
TensorFlow 1.3.0-rc0


Release.1.3.0


主な機能と改善点



  • Tensorflowライブラリにcanned estimatorを追加。追加されたestimatorsのリスト:DNNClassifier、DNNRegressor、LinearClassifer、LinearRegressor、DNNLinearCombinedClassifier、DNNLinearCombinedRegressor
  • すべての組み込みバイナリをcuDNN 6でビルド。
  • GCSファイルシステムにファイルキャッシュを追加し、ファイル内容の設定を最大限に変更可能に。これにより、ファイルの内容をクローズ/オープン境界でキャッシュ可能に。
  • tf.gatherに軸パラメータを追加。
  • tf.padにconstant_valuesキーワードを追加。
  • データセットのインタリーブ変換を追加。
  • ConcatenateDatasetを追加して、2つのデータセットを連結。
  • Poetsトレーニングスクリプト用のTensorFlowにMobilenetサポートを追加。
  • 設定可能なブロックサイズとカウントでブロックキャッシュをGCSファイルシステムに追加。
  • SinhArcSinh bijectorが追加。
  • Dataset.list_files APIを追加。
  • Cloud TPUの新しい操作とPythonバインディングを紹介。
  • tensorflow-androidとの対称性のためのTensorFlow-iOS CocoaPodの追加
  • ClusterResolversの基本的な実装を紹介。
  • TensorShapeとPartialTensorShapeのメモリ表現を統一。その結果、テンソルの最大寸法は255でなく254に。
  • バージョン1.8.1を使用するようにLIBXSMMへの参照を変更。
  • TensorFlow Debugger(tfdbg):数値テンソル値のサマリーを-sフラグで表示して、print_tensorまたはptをコマンド。
  • 統計配布ライブラリtf.distributionsの初期リリース。
  • unary tf.whereとtf.nn.top_kのGPUカーネルと速度の改善。
  • 単調 Attentionラッパ が tf.contrib.seq2seq に追加。


APIの変更点



  • tf.RewriterConfigは1.2のリリース候補で利用可能になった後、Python APIから削除(これは実際のリリースではない)。 グラフの書き換えは、tf.RewriterConfigとしてではなく、利用可能。 代わりに、明示的なインポートを追加。
  • ネストされた構造を必要とする tf.contrib.data.Dataset APIへの変更を打ち切り。 リストは暗黙的に tf.Tensor に変換される。 既存のコードでリストの使用をタプルに変更する必要があるかもしれない。 さらに、 dicts はネストされた構造としてサポート。


contrib APIへの変更



  • ランク損失を改善可能な sampled-softmax variantを含む tf.contrib.nn.rank_sampled_softmax_lossを追加。
  • tf.contrib.metrics.{streaming_covariance, streaming_pearson_correlation} は、1単位の質量以下を見たときに nan を返すように変更。
  • contrib に時系列モデルを追加。 詳細は contrib/timeseries/ README.md を参照のこと。
  • tensorflow/contrib/lite/schema.fbs に完全一致を追加。


バグ修正とその他の変更


  • Pythonでint64 Tensorインデックスを使用してスライスすると、 'strides' と 'begin' dtype の不一致を修正。
  • 改良された畳み込みパディングのドキュメント。
  • タグ定数 gpu をGPUサポート付きのグラフに追加。
  • saved_model.utils は SparseTensors を透過的にサポートするように。
  • 非最大抑制のより効率的な実装。
  • 既にサポートしているオンライン L2 に加えて、 FtrlOptimizer に縮小タイプの L2 のサポートを追加。
  • モーメント計算における負の分散を修正。
  • UniqueOp ベンチマークテストを展開し、より多くの衝突のケースをカバー。
  • Mac上のGCSファイルシステムの安定性を向上。
  • HloCostAnalysis に時間推定を追加。
  • Estimator のコンストラクタの params がユーザー提供のパラメータの deepcopy ではないというバグを修正。このバグにより、誤って Estimator を作成した後にパラメータを変更して、未定義の動作が発生する可能性があった。
  • saver.restoreのsave_path のチェックを追加。
  • device_mgr のレガシ名でデバイスを登録すると、クラスタスペックで伝播された設定への移行が容易に。
  • VectorExponential がディストリビューションに追加。
  • bitwise_and 、 bitwise_or 、 bitwise_xor 、および invert 関数を含むビット単位のモジュールを追加。
  • 固定グリッドODE統合ルーチンを追加。
  • ScipyOptimizerInterface に境界を渡すことを許可。
  • fft_length パラメータの tf.spectral.rfft&tf.spectral.irfft を修正。
  • 'predict' メソッドを使用してエクスポートされたモデルシグネチャでは、入力キーと出力キーが無視され、  'inputs' と 'outputs' に書き換えられなくなった。モデルが1.2より前に異なる名前でエクスポートされ、テンソルフロー/サービングで提供されたモデルは、 'inputs' と 'outputs' を使用してリクエストを受け入れる。 1.2から、そのようなモデルはエクスポート中に指定されたキーを受け入れる。したがって、 'inputs' と 'outputs' を使った推論要求が失敗することがある。これを修正するには、トレーナコードで使用される実際の入力および出力キーを使用して要求を送信するように推論クライアントを更新するか、逆にトレーナコードを更新して入力および出力Tensorsの入力と出力をそれぞれ指定する。 'classify' と 'regress' メソッドを使用するシグネチャは、この変更の影響を受けない。入力キーと出力キーを以前と同じように標準化し続ける。
  • データセットAPIにメモリ内キャッシュを追加。
  • データセットイテレータのデフォルトの end_of_sequence 変数を false に設定。
  • [パフォーマンス] nn.bias_add を使用して use_bias = True に 2x を設定すると、 tf.layers.con2d のパフォーマンスが向上する。
  • iOSのサンプルを更新してCocoaPodを使用し、 tensorflow/examples/ios に移動。
  • tf.summary ops に family= attribute を追加して、Tensorboard で使用されるタブ名を制御して要約を整理できるように。
  • GPUが設定されている場合、 --config = cuda は不要に。代わりに、 configure スクリプトでGPUが要求されている場合は自動的にGPU用に構築される。
  • CPU/GPU多項式における小さな確率の誤ったサンプリングを修正。
  • セッション内で list_devices() APIを追加して、クラスタ内のデバイスを一覧表示。さらに、この変更により、 ListDevices マスタAPIがセッションの指定をサポートするように。
  • パラメータ化された分離可能な畳み込みの使用を許可。
  • TensorForest重回帰バグ修正。
  • フレームワークは現在 armv7 をサポート、 cocoapods.org は正しいページを表示するようになった。
  • CocoaPods用のiOSフレームワークを作成するためのスクリプト。
  • TensorFlowのAndroidリリースは、アプリケーションへの統合を容易にするため、 jcenter にプッシュされるように。詳細については、 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/android/README.md を参照のこと。
  • マルチGPU設定で tfdbg が機能しなくなるバグを修正。
  • tf.Session.make_callable で tfdbg が動作しないバグを修正。

貢献者の方々への謝辞


このリリースには、Googleの多くの人々からの寄付と次のものが含まれています:

4F2E4A2E, Adriano Carmezim, Adrià Arrufat, Alan Yee, Alex Lattas, Alex Rothberg, Alexandr Baranezky, Ali Siddiqui, Andreas Solleder, Andrei Costinescu, Andrew Hundt, Androbin, Andy Kernahan, Anish Shah, Anthony Platanios, Arvinds-Ds, b1rd, Baptiste Arnaud, Ben Mabey, Benedikt Linse, Beomsu Kim, Bo Wang, Boyuan Deng, Brett Koonce, Bruno Rosa, Carl Thomé, Changming Sun, Chase Roberts, Chirag Bhatia, Chris Antaki, Chris Hoyean Song, Chris Tava, Christos Nikolaou, Croath Liu, cxx, Czxck001, Daniel Ylitalo, Danny Goodman, Darren Garvey, David Brailovsky, David Norman, DavidNorman, davidpham87, ddurham2, Dhruv, DimanNe, Drew Hintz, Dustin Tran, Earthson Lu, ethiraj, Fabian Winnen, Fei Sun, Freedom" Koan-Sin Tan, Fritz Obermeyer, Gao, Xiang, Gautam, Guenther Schmuelling, Gyu-Ho Lee, Hauke Brammer, horance, Humanity123, J Alammar, Jayeol Chun, Jeroen BéDorf, Jianfei Wang, jiefangxuanyan, Jing Jun Yin, Joan Puigcerver, Joel Hestness, Johannes Mayer, John Lawson, Johnson145, Jon Malmaud, Jonathan Alvarez-Gutierrez, Juang, Yi-Lin, Julian Viereck, Kaarthik Sivashanmugam, Karl Lessard, karl@kubx.ca, Kevin Carbone, Kevin Van Der Burgt, Kongsea, ksellesk, lanhin, Lef Ioannidis, Liangliang He, Louis Tiao, Luke Iwanski, LáSzló Csomor, magixsno, Mahmoud Abuzaina, Marcel Hlopko, Mark Neumann, Maxwell Paul Brickner, mdfaijul, MichaëL Defferrard, Michał JastrzęBski, Michele Colombo, Mike Brodie, Mosnoi Ion, mouradmourafiq, myPrecious, Nayana Thorat, Neeraj Kashyap, Nelson Liu, Niranjan Hasabnis, Olivier Moindrot, orome, Pankaj Gupta, Paul Van Eck, peeyush18, Peng Yu, Pierre, preciousdp11, qjivy, Raingo, raoqiyu, ribx, Richard S.Imaoka, Rishabh Patel, Robert Walecki, Rockford Wei, Ryan Kung, Sahil Dua, Sandip Giri, Sayed Hadi Hashemi, sgt101, Shitian Ni, Shuolongbj, Siim PõDer, Simon Perkins, sj6077, SOLARIS, Spotlight0xff, Steffen Eberbach, Stephen Fox, superryanguo, Sven Mayer, Tapan Prakash, Tiago Morais Morgado, Till Hoffmann, Tj Rana, Vadim Markovtsev, vhasanov, Wei Wu, windead, Yan (Asta) Li, Yan Chen, Yann Henon, Yi Wang, Yong Tang, yorkie, Yuan (Terry) Tang, Yuxin Wu, zhengjiajin, zhongzyd, 黄璞

私たちは、問題を提起したか、解決するのを助け、質問し、質問に答えた人全員にも感謝しています。


ダウンロード




-----

canned estimatorってたしかDevSummitでいっていた、学習済みモデルのことだとおもっていたが分類器と回帰で学習済みってことはなさそうだけど..

さわってみないと、わからんか..


あと、これみよがしに

Monotonic Attention wrappers added to tf.contrib.seq2seq.

と書いてあるってことは、MonotonicでないMulti Head Self-AttentionT2Tを見てねってことなのだろう..

なお、もちろんDocker Hubのtensorflow/tensorflowlatest1.3.0-rc0になっていた。


p.s.
2017年8月7日現在は、rc2がでています。

https://twitter.com/tensorflow/status/893593513954344960

2017年7月10日月曜日

Tensor2Tensor Transformers の README.md を翻訳してワークフローを動かしはじめた



今日、Twitterに流れてきたリンク

T2T: Tensor2Tensor Transformers
https://github.com/tensorflow/tensor2tensor

で T2T なるOSSがあることを知った。
Google正規プロジェクトモノではないらしいが..

ということで GitHub の README.md を翻訳してみた。
以下、翻訳内容だが、参照の際は at your own risk でお願いします。

-----

T2T: Tensor2Tensor Transformers


T2T はモジュール化された拡張可能なライブラリで、TensorFlowを使用した教師あり学習とSequneceタスクのサポートのためのバイナリです。 Google Brainチーム内の研究者やエンジニアが積極的に使用し維持しています。 Tensor2Tensorについて詳しくは、 最近のGoogle Research Blogの記事 をご覧ください。

私たちはT2Tを拡張する上であなたと協力したいと思っていますので、 GitHubでIssueを開  いたり、プルリクエストを送信してデータセットやモデルを追加してください。 詳細と未解決の問題については、弊社の貢献文書  をご覧ください。 そして、Gitterで我々や他のユーザたちとチャットしてください。



ウォークスルー


ここでは、論文 "Attention Is All You Need" にある WMTデータ上でTransformerモデルを使用して、英語からドイツ語への翻訳モデルをトレーニングするウォークスルーを紹介します。



pip install tensor2tensor

#どの問題、モデル、およびハイパーパラメータセットが利用可能かを確認すること。
#それらの間を簡単に入れ替えることができます(新しいものを追加することも可能)。

t2t-trainer --registry_help

PROBLEM=wmt_ende_tokens_32k
MODEL=transformer
HPARAMS=transformer_base_single_gpu

DATA_DIR=$HOME/t2t_data
TMP_DIR=/tmp/t2t_datagen
TRAIN_DIR=$HOME/t2t_train/$PROBLEM/$MODEL-$HPARAMS

mkdir -p $DATA_DIR $TMP_DIR $TRAIN_DIR

# データ生成
t2t-datagen \
  --data_dir=$DATA_DIR \
  --tmp_dir=$TMP_DIR \
  --num_shards=100 \
  --problem=$PROBLEM

cp $TMP_DIR/tokens.vocab.* $DATA_DIR

# トレーニング
# out of memoryとなる場合は、
# --hparams='batch_size=2048' (もしくは1024)を追加してください。
t2t-trainer \
  --data_dir=$DATA_DIR \
  --problems=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --output_dir=$TRAIN_DIR

# デコード

DECODE_FILE=$DATA_DIR/decode_this.txt
echo "Hello world" >> $DECODE_FILE
echo "Goodbye world" >> $DECODE_FILE

BEAM_SIZE=4
ALPHA=0.6

t2t-trainer \
  --data_dir=$DATA_DIR \
  --problems=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --output_dir=$TRAIN_DIR \
  --train_steps=0 \
  --eval_steps=0 \
  --decode_beam_size=$BEAM_SIZE \
  --decode_alpha=$ALPHA \
  --decode_from_file=$DECODE_FILE

cat $DECODE_FILE.$MODEL.$HPARAMS.beam$BEAM_SIZE.alpha$ALPHA.decodes



インストール




# tensorflowまたはtensorflow-gpuがインストールされていると仮定
pip install tensor2tensor

# tensorflow-gpuの場合
pip install tensor2tensor[tensorflow_gpu]

# tensorflow(cpu)の場合
pip install tensor2tensor[tensorflow]
 


バイナリ:
# データ生成
t2t-datagen

# トレーナー
t2t-trainer --registry_help
 
 
ライブラリの使い方:
python -c "from tensor2tensor.models.transformer import Transformer"



機能



  • 多くの最先端のモデルとベースラインモデルが組み込まれており、新しいモデルを簡単に追加できます(問題を開くかプルリクエストしてください)。
  • モダリティ(テキスト、オーディオ、画像)の生成と使用が可能な多くのデータセット、および新しいものを簡単に追加できます(Issueを開くか公開データセットを pull request !)。
  • モデルは、任意のデータセットおよび入力モード(または複数のモード)で使用できます。すべてのモダリティ固有の処理(例えば、テキストトークンのためのルックアップの埋め込み)は、データセット/タスク仕様の特徴ごとに指定された Modality オブジェクトで行われます。
  • マルチGPUマシンと同期(1マスター、多くのワーカー)および非同期(パラメタサーバーを介して同期する独立したワーカー)分散トレーニングをサポート。
  • データ生成スクリプト t2t-datagen とトレーニングスクリプト t2t-trainer を使用して、コマンドラインフラグでデータセットとモデル間を簡単にスワップします。

T2T 概要

データセット

データセット はすべて tensorflow.Exzample プロトコルバッファの TFRecord ファイルで標準化されています。すべてのデータセットは データジェネレータ  で登録および生成され、多くの共通シーケンスデータセットはすでに生成および使用可能です。



問題およびモダリティ


問題 は、主に入出力 モダリティ (記号、画像、音声、ラベルなど)とボキャブラリ(該当する場合)を設定することによって、データセットとタスクのトレーニング時のハイパーパラメータを定義します。 すべての問題は problem_hparams.py で定義されています。 modality.py で定義されている モダリティ は、モデルがモダリティに依存しないテンソルを扱うように入出力データ型を抽象化します。



モデル


T2TModels は、入力/出力モダリティまたはタスクとは独立したコア tensor-to-tensor 変換を定義します。 モデルは高密度のテンソルを取り込み、高密度のテンソルを生成し、タスクに依存するモダリティ(例えば、最終的な線形変換を介して与えられ、クラスに対するソフトマックスの logits を生成する)によって最後のステップで変換される。 すべてのモデルは models.py にインポートされ、 t2t_model.py で定義された T2TModel から継承されます。


  • そして、 @registry.register_modelで登録されてます。



ハイパーパラメータセット


ハイパーパラメータセット は、 @registry.register_hparams で定義され、コードで登録され、 tf.contrib.training.HParams オブジェクトにエンコードされます。 HParam は問題仕様とモデルの両方に対応しています。 ハイパーパラメータの基本セットは common_hparams.py で定義され、ハイパーパラメータセット関数は他のハイパーパラメータセット関数を構成することができます。



トレーナ


トレーナ バイナリは、トレーニング、評価、および推論の主要なエントリポイントです。 --model --problems --hparams_set フラグを使用することで、ユーザは問題、モデル、およびハイパーパラメータセットを簡単に切り替えることができます。 特定のハイパーパラメータは、 --hparams フラグで上書きすることができます。 --schedule   および関連フラグは、ローカルおよび分散トレーニング/評価( "分散トレーニングドキュメント"  )を制御します。



コンピュータの追加


T2Tのコンポーネントは、簡単に新しいものを追加し、コマンドラインフラグで簡単に交換できる中央登録メカニズムを使用して登録されます。 t2t-trainerに--t2t_usr_dirフラグを指定することで、T2Tコードベースを編集せずに独自のコンポーネントを追加できます。

現在、モデル、ハイパーパラメータセット、およびモダリティでこれを行うことができます。 あなたのコンポーネントが他の人にとって役に立ちそうな場合はプルリクエストを提出してください。

新しいハイパーパラメータセットを使用した例を次に示します:


# ~/usr/t2t_usr/my_registrations.py 内

from tensor2tensor.models import transformer
from tensor2tensor.utils import registry

@registry.register_hparams
def transformer_my_very_own_hparams_set():
  hparams = transformer.transformer_base()
  hparams.hidden_size = 1024
  ...


# ~/usr/t2t_usr/__init__.py 内
import my_registrations


t2t-trainer --t2t_usr_dir=~/usr/t2t_usr --registry_hel

登録されたHParamの下に、 transformer_my_very_own_hparams_set が表示されます。これはコマンドラインで --hparams_set フラグを使って直接使用できます。


データセットの追加


"データ生成 README" を参照のこと。

注:これは公式のGoogleサービスではありません。
---------

とりあえずワークフロー通りに打ち込んでいるのだけど、
データ取得がおもいのほか時間がかかっていて
もう1時間位たってるのだけど、まだおわっていない...

...やるしかないか

(翌日)
ようやくダウンロードおわっていたが、$HOMEを使ってるせいでパンパン。

でトレーニングを開始。

..問題なく始まった..とおもったらすぐに以下のメッセージが出て終了。

ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[204,40,1,2048]
         [[Node: body/model/parallel_0/body/decoder/layer_0/conv_hidden_relu/Greater = Greater[T=DT_FLOAT,
 _device="/job:localhost/replica:0/task:0/gpu:0"](body/model/parallel_0/body/decoder/layer_0/conv_hidden_r
elu/conv1_single/Relu, body/model/parallel_0/body/decoder/layer_0/conv_hidden_relu/Greater/y)]]
         [[Node: body/model/parallel_0/body/decoder/layer_1/decoder_self_attention/dot_product_attention/M
ax/_2685 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device
="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_10090_body/model/pa
rallel_0/body/decoder/layer_1/decoder_self_attention/dot_product_attention/Max", tensor_type=DT_FLOAT, _de
vice="/job:localhost/replica:0/task:0/cpu:0"]()]]

OOM="Out Of Memory" だろうなあ..
ちなみに使ってるGPUは GeForce1050Ti/4GB。

しょうがないのでコメント欄にあったOOM対策をつかってみることに。
--hparams='batch_size=2048'でうごかしてみた。

INFO:tensorflow:global_step/sec: 1.34169
INFO:tensorflow:step = 102, loss = 8.53071 (74.533 sec)

が繰り返し出るようになったので、バッチが動き始めたようだ..


..で、コレいつおわるんだろう..

やっぱ論文にあるうんちゃらdaysかかるんだろうなあ..

しばらくは、放置プレイか..

ちなみにこの状態で進捗を確認したいのであれば、
別ターミナルで
tensorboard --logdir=/root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu
を実行して http://IPアドレス:6006/ を開けば
みんなだいすきTensorBardで状況が確認できます。






さすがOSS、SCALARSやGRAPHSだけでなく、IMAGESやDISTRIBUTIONS、HISTGRAMS、EMBEDDINGSまで可視化できるようになってる。


------
(数日後)

ふとトレーニングプロセスが落ちていることがわかった。lossをみると1.6あたりだったので
ワークフローを継続してみた。

root@07599f5e67a4:/notebooks/work/t2t# t2t-trainer --data_dir=$DATA_DIR --problems=$PROBLEM --model=$MODEL --hparams_set=$HPARAMS --output_dir=$TRAIN_DIR --tr
ain_steps=0 --eval_steps=0 --decode_beam_size=$BEAM_SIZE --decode_alpha=$ALPHA --decode_from_file=$DECODE_FILE
INFO:tensorflow:Creating experiment, storing model files in /root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu
INFO:tensorflow:datashard_devices: ['gpu:0']
INFO:tensorflow:caching_devices: None
INFO:tensorflow:Using config: {'_save_summary_steps': 100, '_keep_checkpoint_max': 20, '_tf_random_seed': None, '_num_ps_replicas': 0, '_task_id': 0, '_cluste
r_spec': , '_save_checkpoints_secs': 600, '_is_chief': True, '_tf_config': gpu_opt
ions {
  per_process_gpu_memory_fraction: 1.0
}
, '_model_dir': '/root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu', '_keep_checkpoint_every_n_hours': 10000, '_num_worker_replicas'
: 0, '_save_checkpoints_steps': None, '_master': '', '_session_config': allow_soft_placement: true
graph_options {
  optimizer_options {
  }
}
, '_evaluation_master': '', '_environment': 'local', '_task_type': None}
INFO:tensorflow:Performing Decoding from a file.
INFO:tensorflow:Getting sorted inputs
INFO:tensorflow: batch 1
INFO:tensorflow:Deocding batch 0
INFO:tensorflow:datashard_devices: ['gpu:0']
INFO:tensorflow:caching_devices: None
INFO:tensorflow:Beam Decoding with beam size 4
INFO:tensorflow:Doing model_fn_body took 2.638 sec.
INFO:tensorflow:This model_fn took 2.863 sec.
2017-07-18 08:58:57.662260: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these a
re available on your machine and could speed up CPU computations.
2017-07-18 08:58:57.662295: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these a
re available on your machine and could speed up CPU computations.
2017-07-18 08:58:57.900032: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but ther
e must be at least one NUMA node, so returning NUMA node zero
2017-07-18 08:58:57.900388: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
name: GeForce GTX 1050 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.392
pciBusID 0000:01:00.0
Total memory: 3.94GiB
Free memory: 3.90GiB
2017-07-18 08:58:57.900416: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-07-18 08:58:57.900430: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   Y
2017-07-18 08:58:57.900446: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050
 Ti, pci bus id: 0000:01:00.0)
INFO:tensorflow:Restoring parameters from /root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu/model.ckpt-250000
INFO:tensorflow:Inference results INPUT: Goodbye world
INFO:tensorflow:Inference results OUTPUT: Gunstige Welt (和訳:u上にウムラウトである場合「好調な世界」)
INFO:tensorflow:Inference results INPUT: Hello world
INFO:tensorflow:Inference results OUTPUT: Hallo Welt (和訳:こんにちは世界)
INFO:tensorflow:Writing decodes into /root/t2t_data/decode_this.txt.transformer.transformer_base_single_gpu.beam4.alpha0.6.decodes
root@07599f5e67a4:/notebooks/work/t2t#


Googbye はきちんと理解していないらしくGoodで代替したんじゃないかともう。

とりあえず、日独翻訳(Tensor2Tensor)はGeForce1050Tiでも動くことはわかった。

なので、ニューホライ●ンの3年のテキストから適当に文章を抜き出して翻訳させてみた。
以下、その実行である。

-----

日本語 原文の日本語訳
INPUT 原文(英語)
OUTPUT Tensor2tensor のアウトプットテキスト(ドイツ語)
GOOGLE 原文をGoogle翻訳でドイツ語に翻訳したテキスト



日本語 チームを全国大会に導くことができる選手になりたい。
INPUT I want to be a player who can lead a team to the national tournament.
OUTPUT Ich m\xf6chte ein Spieler sein, der ein Team zum nationalen Turnier f\xfchren kann.
GOOGLE Ich möchte ein Spieler sein, der ein Team zum nationalen Turnier führen kann.


日本語 第三に、私たちが学校の制服を着用するとき、私たちは学校に属していると感じることができます。
INPUT Third, when we wear school uniforms, we can feel that we belong to our school.
OUTPUT Drittens, wenn wir die Schulen tragen, k\xf6nnen wir das Gef\xfchl haben, dass wir unserer Schule angeh\xf6ren.
GOOGLE Drittens, wenn wir Schuluniformen tragen, können wir fühlen, dass wir zu unserer Schule gehören.


日本語 彼女が望んでいる世界は簡単に来ないかもしれないが、彼女はそれのために努力し続ける。
INPUT The world that she wants may not come easily, but she keeps striving for it.
OUTPUT Die Welt, die sie will, wird vielleicht nicht leicht, aber sie strebt immer wieder nach.
GOOGLE Die Welt, die sie will, mag nicht leicht kommen, aber sie strebt danach.


日本語 はい。 彼女はミャンマーの民主主義と人権のために戦う政治家です。
INPUT Yes. She is a political leader who fights for democracy and human rights in Myanmar.
OUTPUT Ja, sie ist ein Politiker, der f\xfcr Demokratie und Menschenrechte in Myanmar k\xe4mpft.
GOOGLE Ja. Sie ist ein politischer Führer, der für die Demokratie und die Menschenrechte in Myanmar kämpft.


日本語 彼女は合計15年間拘束されたが、決して諦めなかった。
INPUT She was locked up for 15 years in total, but she never gave up.
OUTPUT Sie wurde insgesamt 15 Jahre eingesperrt, aber sie hat nie aufgegeben.
GOOGLE Sie war für 15 Jahre gesperrt, aber sie gab niemals auf.


日本語 人々は強力なリーダーを必要とし、アウンサンスーチーに彼らに加わるように頼んだ。
INPUT People needed a strong leader, and asked Aung San Suu Kyi to join them.
OUTPUT Die Menschen brauchten einen starken Anf\xfchrer, und sie haben Aung San Suu Kyi aufgefordert, sich ihnen anzuschlie \xdfen.
GOOGLE Die Leute brauchten einen starken Führer und baten Aung San Suu Kyi, sich ihnen anzuschließen.


日本語 私たちはさまざまなアイデアを集め、結局素晴らしい映画を完成させました。
INPUT We brought different ideas together, and completed a wonderful movie in the end.
OUTPUT Wir haben verschiedene Ideen zusammengebracht und am Ende einen wunderbaren Film vervollst\xe4ndigt.
GOOGLE Wir brachten verschiedene Ideen zusammen und vervollständigten einen wunderbaren Film.


日本語 私はアメリカにも学校制服を持っていなければならないと思います。
INPUT I think that we should also have school uniforms in the United States.
OUTPUT Ich glaube, dass wir auch in den Vereinigten Staaten SchulUniformen haben sollten.
GOOGLE Ich denke, dass wir auch Schuluniformen in den Vereinigten Staaten haben sollten.


日本語 1989年、政府は彼女の運動を止めるために自宅で逮捕した。
INPUT In 1989, the government put her under house arrest to stop the movement.
OUTPUT 1989 hat die Regierung sie unter Hausarrest gestellt, um die Bewegung zu stoppen.
GOOGLE Im Jahr 1989 stellte die Regierung sie unter Hausarrest, um die Bewegung zu stoppen.


日本語 これは私の学校生活の中で最高の経験です。
INPUT This is the greatest experience that I've had in my school life.
OUTPUT Das ist die gr\xf6\xdfte Erfahrung, die ich in meinem Schulleben erlebt habe.
GOOGLE Das ist die größte Erfahrung, die ich in meinem Schulleben hatte.


日本語 私のグループには、4人のメンバがいましたが、それぞれに異なるアイデアや意見がありました。
INPUT My group had four members who all had different ideas and opinions.
OUTPUT Meine Fraktion hatte vier Mitglieder, die alle verschiedene Ideen und Meinungen hatten.
GOOGLE Meine Gruppe hatte vier Mitglieder, die alle verschiedene Ideen und Meinungen hatten.


日本語 映画制作は私の学校で非常に人気のある選択授業です。
INPUT Filmmaking is an elective class that is very popular in my school.
OUTPUT In meiner Schule ist die Filmforschung eine gew\xe4hlte Klasse, die sehr beliebt ist.
GOOGLE Filmmaking ist eine Wahlklasse, die in meiner Schule sehr beliebt ist.


日本語 結局、彼女はミャンマーに滞在し、再び彼を見たことはありませんでした。
INPUT In the end, she stayed in Myanmer and never saw him again.
OUTPUT Am Ende blieb sie in Myanmer und sah ihn nie wieder.
GOOGLE Am Ende blieb sie in Myanmar und sah ihn nie wieder.


日本語 映画製作は私に違いを受け入れ、他の人から学ぶことを教えてくれました。
INPUT Filmmaking taught me to accept differences and learn from other people.
OUTPUT Die Filme lehrten mich, Unterschiede zu akzeptieren und von anderen Menschen zu lernen.
GOOGLE Filmmaking lehrte mich, Unterschiede zu akzeptieren und von anderen Menschen zu lernen.


日本語 ニューヨークでは、世界中の人々と出会った。
INPUT In New York, I've met people from all over the world.
OUTPUT In New York habe ich Menschen aus aller Welt getroffen.
GOOGLE In New York habe ich Leute aus der ganzen Welt kennengelernt.


日本語 私は3年間バレーボールチームのメンバでした。
INPUT I've been a member of the volleyball team for three years.
OUTPUT Ich bin seit drei Jahren Mitglied des Volleyball-Teams.
GOOGLE Ich bin seit drei Jahren Mitglied des Volleyballteams.


日本語 多くの日本人学生は学校制服を着用しているが、アメリカ人のほとんどはそうではない。
INPUT Many Japanese students wear school uniforms, but most American do not.
OUTPUT Viele japanische Studenten tragen Schulen Uniformen, aber die meisten Amerikaner nicht.
GOOGLE Viele japanische Studenten tragen Schuluniformen, aber die meisten Amerikaner nicht.


日本語 1999年、アウンサンスーチーさんの夫はがんで死にそうになっていました。
INPUT In 1999, Aung San Suu Kyi's husband was dying of cancer.
OUTPUT 1999 starb der Mann von Aung San Suu Kyi an Krebs.
GOOGLE Im Jahr 1999 war Aung San Suu Kyis Ehemann an Krebs gestorben.


日本語 私と一緒になっていくのは簡単ではありませんでした。
INPUT It wasn't easy for me to get along with them.
OUTPUT Es war f\xfcr mich nicht leicht, sie zu unterst\xfctzen.
GOOGLE Es war nicht leicht für mich, mit ihnen zu kommen.


日本語 私の学校には様々な文化の学生もいます。
INPUT There are students of various cultures in my school, too.
OUTPUT Auch in meiner Schule gibt es Studenten verschiedener Kulturen.
GOOGLE Es gibt auch Studenten verschiedener Kulturen in meiner Schule.


日本語 私は以前に日本に住み、去年ここに移住しました。
INPUT I lived in Japan before, and moved here last year.
OUTPUT Ich habe zuvor in Japan gelebt und bin vergangenes Jahr hierher gegangen.
GOOGLE Ich wohnte schon in Japan und bin im letzten Jahr hierher gekommen.


日本語 私はニューヨークに住む15歳の少女、滝川恵理子です。
INPUT I'm Takigawa Erika, a 15-year-old girl living in New York.
OUTPUT Ich bin Takigawa Erika, ein 15-j\xe4hriges M\xe4dchen, das in New York lebt.
GOOGLE Ich bin Takigawa Erika, ein 15-jähriges Mädchen, das in New York lebt.


日本語 世界は、民主主義と人権のための彼女の努力を認識しました。
INPUT The world recognized her efforts for democracy and human rights.
OUTPUT Die Welt hat ihre Bem\xfchungen um Demokratie und Menschenrechte anerkannt.
GOOGLE Die Welt erkannte ihre Bemühungen um Demokratie und Menschenrechte.


日本語 それに加わった多数の人々が殺された。
INPUT A great number of people who joined it were killed.
OUTPUT Es wurden zahlreiche Menschen get\xf6tet.
GOOGLE Eine große Anzahl von Leuten, die sich ihm angeschlossen haben, wurde getötet.


結構いい感じの翻訳をだしていて、中にはGoogle翻訳本体と全く同じ答えもでていた。

ご参考迄。

-----
(後日談)NVIDIA K20C で Tensor2Tensor を動かしてみた
 

2017年6月28日水曜日

SONYのAIコアライブラリ NNabla の概要を調べてみる

ソニーがAIライブラリをオープンソース公開したという記事を読んだ。

ソニー、ディープラーニングのコアライブラリを無償公開
https://japan.cnet.com/article/35103402/
トップサイトが

https://nnabla.org/ja/

にあるが、どうもナンチャッテとっぷさいとのようだ。
おそらくだけど、真のトップがここのようだ。

https://nnabla.readthedocs.io/en/latest/#

..結局英語かよ..


トップの英語をGoogle翻訳にかけてみた。

NNablaは、研究、開発、および生産に使用するための深い学習フレームワークです。 私たちは、デスクトップPC、HPCクラスタ、組み込み機器、プロダクションサーバなどあらゆる場所で稼動させることを目指しています。

このドキュメントでは、Python APIおよびC ++ APIの使用方法、開発者向けの寄付ガイド、およびこのソフトウェアのライセンス期間について説明します。 Python APIは、ディープ・ラーニング・システムの迅速なプロトタイプ作成や実験に適していますが、C ++ APIは、推論やトレーニング・アルゴリズムを組み込みシステムやサーバーに組み込むためのものです(ドキュメントは現在のところ入手できません。 このフレームワークは、モジュール性と拡張性を念頭に置いて設計されています。 コミュニティ寄稿者は、ニューラルネットワークの新しいオペレータまたはオプティマイザモジュール、および特定のターゲットデバイス用のニューラルネットワークモジュールの特別な実装を拡張モジュールとして追加できます。

Pythonライブラリになっていて、C++ もあるけどそっちはどうも実際の計算モジュール実装に使っていて、今のところドキュメントはないらしい。今回はコアライブラリで、オプティマイザとかのcontribを追加できるような構造になってるよ、ということらしい。

ちなみにラインセンスはApache2.0である。

以下、Windows環境でのインストール手順をGoogle翻訳に掛けたものだ。

■Windowsへのインストール

・前提条件

Windows8.1 64bitとWindows10 64bitでは動作確認テスト済み。

インストールには次のソフトウェアが必要となる。

 - 必要なソフトウェア。
   Python 2.7:PIP
   Microsoft Visual C ++ 2015再頒布可能
 - 推奨ソフトウェア
   CUDAツールキット8.0 / cuDNN 6.0(NVIDIA GPUユーザー向け)

・セットアップ環境
 - Python2.7
   この手順では、minicondaを使用します。
   ここからWindowsバイナリを入手してインストールしてください。
  
   コマンドプロンプトから必要なパッケージをインストールします。
   > conda install scipy scikit-image ipython
   ネットワークがプロキシを使用しており、セットアップが失敗した場合は、環境変数を使用してプロキシサーバーを構成し、再度インストールしてください。
   > SET HTTP_PROXY=http://(ここにhttpプロキシサーバーのアドレスを入力します)
   > SET HTTPS_PROXY = https://(ここにhttpsプロキシサーバーのアドレスを入力します)


 - Microsoft Visual C ++ 2015 Redistributable
   ここから取得してインストールしてください
 

 - CUDA Toolkit 8.0 / cuDNN 6.0
   NVIDIA GPUを使用している場合、次のソフトウェアをインストールすることで実行速度が大幅に向上します。
   CUDAツールキット
 
  cuDNN
 
  cuDNNをインストールするには、binincludelibを"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0"にコピーします。

 - インストール
  CPUパッケージをインストールします。
  > pip install nnabla

  NVIDIA GPUを使用している場合は、CUDA/cuDNN パッケージをインストールします。
  > pip install nnabla_ext_cuda

  実行を確認します。
  > ipython
 
  In [1]: import nnabla
  2017-06-06 21:36:07,101 [nnabla][Level 99]: Initializing CPU extension...
 
  In [2]: exit
 
  >


  動作(CUDA/cuDNN)を確認します。
  > ipython
 
  In [1]: import nnabla_ext.cuda.cudnn
  2017-06-16 18:42:18,881 [nnabla][Level 99]: Initializing CPU extension...
  2017-06-16 18:42:19,923 [nnabla][Level 99]: Initializing CUDA extension...
  2017-06-16 18:42:20,243 [nnabla][Level 99]: Initializing cuDNN extension...
 
  In [2]: exit
 
  >


・サンプルの実行
 ここからNNablaリポジトリをダウンロードし、解凍してサンプルディレクトリに移動してください。

 > cd nnabla \ examples \ vision \ mnist

 MNIST分類を実行します。
 nnabla\examples\vision\mnist > python classification.py

 CUDA/cuDNNでMNIST分類を実行します。
 nnabla\examples\vision\mnist > python classification.py -c cuda.cudnn

・FAQ
 Q. Scikitイメージのインストールには長い時間がかかります。
 環境によっては時間がかかります。 お待ちください。

 Q.インストール中にScipyのインストールに失敗しました。
 "pip install nnabla"の前に "conda install"を使ってscipyをインストールしてください。


インストールは簡単そうだ。

Windows7で動作確認はしてないんだ..というのはおいといて..

Anacondaが入ってるのでこれでできそうだし、GitHubのIssueにはPython3で云々っていうのも見かけた。

ちょっとおもしろそうなのは、MS C++ランタイムを入れている所。おそらくだけど、Anaconda上からなのにネイティブのC++ライブラリを使ってGPUが使える..つまりWindows上でGPUが使えるんじゃなかろうか

Windows上のAnacondaからのTensorFlowはCPUのみしかサポートしていなかったはずだから、Windowsの世界から出たくないよってもやし君にはちょうどいいかもしれない。

でもグラフィックリソースバリバリ使っているWindows OS 上でGPUって..どれくらいリソース開いてるのかはわからないけど..



Dockerインストールの方はTODOでからっぽだったが、Docker Hubにはもう載っかていた。

CPU版のほうのREADME.mdは

開発用Dockerイメージのビルド

 ./docker-build <タグ名>

これは、nnabla:<タグ名>という名前のDocker イメージを生成します。

使用可能なタグは、 Dockerfile.<タグ名> を使用して、このディレクトリのファイルに名前形式で表示されます。

とだけしか書かれていない。タグも今見たらlatestしかない..怖ェ..

CUDA版のREADME.mdは、

■NNablaのCUDA拡張機能

このリポジトリは、公式のCUDA / cuDNNで拡張されたNNablaの深い学習フレームワークです。


使用するには、デフォルトのコンテキストを 'cpu'から 'cuda.cudnn'に変更します:
from nnabla.contrib.context import extension_context

ctx = extension_context('cuda.cudnn', device_id=args.device_id)
nn.set_default_context(ctx)


現在、インストールのドキュメントと使用方法はbase NNablaに統合されています。



・FAQ
  近日公開


..どうもコンテキストというオブジェクト処理をコードに加えないとダメっぽいことが書かれている。
#TensorFlowのsession相当かもしれないなあ..

それに numpy のかわりに CuPy をとか nvidia-docker で動かせとかの指示もない..

Dockerは少し枯れるまで、待ったほうが良いかもしれない..




p.s.

どうでもいいはなしだが、NNabla の読み。
NNはニューラルネットワークをあらわしてるのだから
エヌエヌイネーブラ」と読んでいたが..
もしかしたら、単に「イネーブラ」と読んでほしいと思っているのかも..



(2017/08/22追記)

遅ればせながら..Neural Network Consoleの記事を読む。

SONYの本気!AI開発ツール『Neural Network Console』が現場の常識をぶっ壊す

この動画を見る限りでは




Azure Machine Learning と TensorBoard の機能を合わせた

ようなGUIツールらしい..

エンジンはこの NNabla らしいが、
どうもSONYは本気のようだ..

とすると、苦しくなるのが同じ日本勢のChainer..
なんたって事業継続性がネ...

..しかも日本人って大企業大好きだから..


個人的に
試そうとしたのですが、
Windows8.1以降らしく
残念ながら断念..
Ubuntu版ないのか..


..全部ビンボが悪いんや..


2017年6月19日月曜日

udemy のAI入門とTensorFlow入門を試してみた

AIブームというけれど、
それを使いこなすプログラマを育成する道具が
あまり揃っていない。

全員が全員、
TensorFlow のページをGoogle翻訳でゴリゴリ読むなんて
正直無理だ。

ド素人とまでは言わないが、
数年の経験をもつプログラマに使いこなしてもらわないと
とてもビジネスアプリケーション分野での発展は望めない。


..ということでいきついたのがudemy。

udemy は有料のeラーニングサービスで、
海外でも展開していてその日本版のサービスを試してみた。

日本版udemyはどうもあの Benesse が絡んでいるようなのだけど
..まあそのあたりのリスクはどうするかは始める人次第。

なぜ試してみたか..というのは、
AI、機械学習、ディープラーニングの良さげな研修が
あまりないこと。

幾つか存在するのだけど、
書籍も含め難易度が高い。
特に数式の出てこない本とかだと


私がパラ見した中では「はじめてのディープラーニング」という本くらい。
この本でも数式はどうしても出てくる。

個人的にはこの本はプロマネや営業..は辛いかもしれないけど技術系営業なら
できれば知っておいて欲しい単語がならんでいる。

なのでPMや技術系営業でAIと絡みそうない人は、
ちょっとづつ読みながら用語集を作っていくと
AI系のPMや営業業務にはついていける様になると思う。
#最後のCafeを使うセクションは飛ばしても良い

でも、これだと頭でっかちで、
どうしてプログラムを書かないで分類とか識別とかができるのか
というそもそもの本質的なところを埋めてくれないのだ。

それ用の本として



「ゼロから作るDeep Learning」というのがあるのだけど..
これが"ゼロから"とかいってるくせに
パーセプトロンとかXORとかNANDとか線形だ非線形だとか書いちゃって
「お前、教える気、ないやんけ!」
と思えるほど読む難易度が高い。


もっと3年目くらいのプログラマが手を使いながら
できればパーセプトロンとか線形とかの単語をそれほどつかわずに
おしえてくれそうな教材はないものか..

で、見つけたのがudemyの講座
「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」
https://www.udemy.com/learning-ai/

だ。

で、実際にやってみた。

テキストの流れは、以下の通り。

・コースと人工知能の概要
・準備
 Python2.7と最新版PyCharmをインストールする。
 ここで手順に従わず、Anaconda最新版でPython2.7仮想環境を作るのが実は近道。
・Pyhtonの基礎
 この講座の中でもっともつまらないセクション。
 だけど、後でPythonコードを書くので、一応知っておかないと進められない。
 ここをクリアすればAIのはなしに入ることができる。
 既に知ってる人は2倍速で飛ばせばいい。
 他の言語を知っている人は、四則演算の演算器とクラス、関数の書き方、リスト[]/タプル()/ディクショナリ{}の違いと使い方のところだけしっかり学習すればOK
・必要な数学の学習
 次のセクションで使うシグモイド関数を勉強するセクション。
 matplotlibというライブラリを使ってグラフをpythonで図示させて、継続意識を絶やさない講師の努力が伺える。
・ニューラルネットワーク
 「ゼロから作るDeep Learning」の2章「パーセプトロン」をわかりやすく、かつ順番にコードを肉付けしながら学んでいくこの講座の中心。
 ニューロンクラスを完成させ、ニューラルネットワーククラスで複数連結させるところまで。
・機械学習
 前のセクションで作ったニューラルネットワーククラスのWとbをどうやって自動学習できるようにするかをおしえるセクション。ここも中心のひとつ。
 バックプロパゲーションで微分を傾きとして教えている。
・機械学習ライブラリの活用
 自分で実装しなくてもライブラリがあるのでそれを使えば簡単に実装できるよという、応用セクション。
 scikit-learnをインストールするが、WindowsOS上のPython2.7.x系に直にscipyをインストールするところは、皆結構引っかかるところなのだけど、そこが書かれていない。
 最新のAnacondaでcondaしてpython2.7仮想環境を作っていればもんだいなし。
 動かすのはサポートベクタマシンを使ったMNISTと株価分析。
・さらに学ぶために
 ここはGPUの話やディープラーニングの例としてCNNやDCGAN(贋作者つきCNN)のほんのさわりだけしょうかいしてまとめ
 TensorFlowも使おうとするが、AnacondaでないWindows利用者は確実にハマる。
 でも疎通用プログラムを動かすだけなので無視してOK
・ボーナスレクチャー
 講師主催の勉強会案内などの、塾帰り直前とかの案内的な話


Python知らなくても学習するところから始めるし、数学用語は知らなくても継続可能。
バックプロパゲーションで?となる人もいるだろうが、ニュートン法を計算機実習で学んだ人ならほぼスルー可能。
このあたりだけごまかせば、たぶん新入社員でもなんとかなるだろう。

この講座は、環境面の問題がクリアできれば初心者SEのAIへのエントリポイントに最適だ。
ただPMや営業が必要としているのは、"用語"集のインストールだが、この講座はそこは満たすことができない。先の「はじめてのディープラーニング」とかの本を読みつつExcelシート上に用語集を作っていくのが最短ルートだとおもう。



この講座の"次"候補として、


【4日で体験】 TensorFlow x Python 3 で学ぶディープラーニング入門
https://www.udemy.com/tensorflow/


を受けたが、前の講座を公立小学校としたら、これは中学2年か。
("中1"部分が抜けてる気がする)

TesnorFlowのチュートリアルの最初にあるMNISTを順番に解説するが、
その後はサンプルコードをGitから落として動かすだけなので、
知識としてはCNN(畳み込みとプーリング、全結合層で何やっているか)
にとどまる。

本音としては、
tf変数がなんであるのとか、
計算グラフは定義しただけでは動作せずsessionをrunしてうごかすとか
runするときのディクショナリのplaceholderでpython界とC++界を行き来しているとか
を説明する講座が欲しいところだ。

MNIST以外の2つのセクションはそれぞれサンプルコードの動かし方例だが
これを1本にして、自然言語系のチュートリアルをCNNのように
詳細解説してほしいなあ..

講師からのコメントによるとこれかららしいが、
1つのコース内でいれてくれるか
別コースになるか..
なんとなく別コースになりそうな気がする..

なんにせよこのコースは修正過渡期なので
この段階で評価することは難しい。

..というか、TensorFlow は私の学習時期が悪すぎた..
はじめた翌日にTesnroFlow1.2.0がリリースされたし..

バージョン自体がグラグラしている時期だからなあ..
Keras優先したにしても、tf.keras問題もあるし...


既に1.3.0の噂も聞いているので、TensorFlow系の教育はあまり手を出さないほうが実は件名だったりスルのだけど、組織や個人の事情でそうもいってられないひともいるだろうし..



p.s.
講座を完了すると、以下のような修了証が発行される。





まあ、これはどうでもいいですが..


2017年6月16日金曜日

TensorFlow1.2.0実行環境をnvidia-dockerで立ち上げるシェルスクリプトを書いてみる




とってもヘボいので、晒すのもどうかなと思うのですが、自分の忘備録として記事にしておこうかな..と、ふと。

環境はCentOS7、hara2devというdockerグループにも入っているユーザで以下の3つのスクリプトはホームの下にdockerというディレクトリを切ってその中に入っているてい。


/home/hara2dev/docker/env_tensorflow.sh

#!/bin/bash
############################################################
# filename: env_tensorflow.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## Jupyter notebook password

PASSWORD=harahara

## PORT

# Jyupiter port
JUP_PORT=8888
# TensorFlow Boad port
TFB_PORT=6006
# REST API port
REST_PORT=3000

## TensorFlow Version

TF_VER=1.2.0
#TF_VER=1.1.0
#TF_VER=1.0.1

## CPU / GPU

# CPU
#NODE=
#DOCKER=/usr/bin/docker

# GPU
NODE=-gpu
DOCKER=/usr/bin/nvidia-docker

## Python Version

# 2.x
#PY_VER=

#  3.x
PY_VER=-py3

## docker image

DOCKER_IMAGE=tensorflow/tensorflow

## docker tag

#DOCKER_TAG=latest
DOCKER_TAG=${TF_VER}${NODE}${PY_VER}

## pid file path

PID_DIR=/home/hara2dev/docker/pid
#PID_DIR=.
PID_FILE=${PID_DIR}/${DOCKER_TAG}.pid

## bin path
# ubuntu
CAT=/bin/cat
RM=/bin/rm
# cent
#CAT=/usr/bin/cat
#RM=/usr/bin/rm


/home/hara2dev/docker/start.sh

#!/bin/bash
############################################################
# filename: start.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## env script path
ENV_PATH=./env_tensorflow.sh

## operations
source ${ENV_PATH}

${DOCKER} run \
   --name "${DOCKER_TAG}" \
   --publish "${JUP_PORT}:8888" \
   --publish "${TFB_PORT}:6006" \
   --publish "${REST_PORT}:3000" \
   --volume /home/hara2dev/docker/work:/notebooks/work \
   --volume /home/hara2dev/docker/share:/notebooks/share \
   --env HTTP_PROXY="http://proxy.server:8080/" \
   --env HTTPS_PROXY="http://proxy.server:8080/" \
   --env NO_PROXY="localhost,127.0.0.1,*.hara2dev.local" \
   --env PASSWORD="${PASSWORD}" \
   --log-driver=syslog \
   --log-opt syslog-address=tcp://172.17.0.1:514 \
   --log-opt tag="${DOCKER_TAG}" \
   --detach \
   --cidfile ${PID_FILE} \
   ${DOCKER_IMAGE}:${DOCKER_TAG}


/home/hara2dev/docker/stop.sh

#!/bin/bash
############################################################
# filename: stop.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## env script path
ENV_PATH=./env_tensorflow.sh

## operations
source ${ENV_PATH}

PID=`${CAT} ${PID_FILE}`

${DOCKER} stop ${PID}
${DOCKER} rm ${PID}

${RM} -rf ${PID_FILE}




ログインして
cd dockerして
start.shで起動、
stop.shで停止、
docker ps で状態確認。

コンテナ停止、即コンテナイメージ削除してますが
shareとworkというディレクトリを共有させているので
ここにファイルを置けばなんとかなるとおもって..

TensorFlowのバージョンやGPU指定Pythonバージョン指定などを
変更する場合は、停止している状態で env_tensorflow.sh を修正する。

あと、rsyslogdも動いているていで。


172.17.0.1 はデフォルトルータの一つでホスト側IPを指しているんだけど、ここにIP書くわけに行かないので、代わりにこのIPを入れてます。

ホントは、docker-composeしたいんだけど、GPUイメージはnvidia-docker起動だから..

FloydHubを使ってKerasのサンプル lstm_text_generation.py を動かしてみる

タイムラインにふらっと入ってきた記事で FloydHubというものを知った。 FloydHub https://www.floydhub.com/ Heroku風の機械学習環境のPaaSとのこと。 .. そもそもHeroku知らない んですけど..というかPyth...