Translate

2017年9月27日水曜日

FloydHub で Jupyter をあげてtornadoでWebアプリを起動しようとしたらできなかった件


先の記事の経緯ではじめたFloydHub

FloydHub はとっても簡単だ。

  • FloydHub サイトで、アカウントを作成
  • FloydHub サイトで、新規プロジェクト構築
  • ローカルPCのPython環境で、以下のコマンドを実行
pip install floyd-cli
cd hogehoge
floyd login
  • ローカルPC上でブラウザがあがり、トークンが表示されるのでコピー
  • ローカルPCのPython環境で、トークンをペーストしてEnter
  • ローカルPCのPython環境で、以下のコマンドを実行
floyd init プロジェクト名
  • ローカルPCのPython環境で、以下のコマンドを実行
floyd run --mode jupyter --env tensorflow-1.3
  • ローカルPC上でブラウザがあがり、Jupyter notebookが起動
ローカルPC環境のPythonが自分のPC以外のDocker環境上からfloydした場合でも、コンソールにURLが表示されるので、コピペしてアクセスすれば使える。


最後の floyd run コマンドに --gpu をつければGPU環境が使える(Freeは2時間まで)。

DataSetsというやつでよく使うコーパスを保存しておいて、最後の floyd run コマンドに --data アカウント名/datasets/データセット名/数字:/store をつけると、/store にマウントされる仕組みだ。floyd run 実行時、カレントディレクトリ内のファイルをアップロードするのだけど、毎回大量データをアップするのは時間の無駄だ。そういうときに--dataを使えばいい。

jupyter notebook 環境でさすがにTerminalは使えないだろうと思っていたら、きっちり使えるようになっていた..

で、調子に乗って tornado ベースのWebアプリを立ち上げてみようとしたけど..

上がるには上がったけど..URLは..どこ?!

いろいろやってみたがダメだった..
floyd logs プロジェクト名 でログが見えるが、先頭のほうでDockerコンテナらしき記述があった。

--portを指定していないはずなので使えんわなあ..


どうも--mode server にすれば、Flaskのみポート5000番限定で使えるようになるらしい..

..ようは推測アプリをFlask のREST APIで組むなら、使ってもいいよということらしい。
起動をapp.pyにしてポートを5000で固定実装すれば..とおもったが、pipできない..

通常のコマンドなら floyd_requirements.txtパッケージ名を箇条書すれば良いんだけど..
ぐぬぬ..









とはいえ、機械学習限定のPaaSかあ...

もうちょっと、つかってみよ..




p.s.

重要なことをわすれていた。

FloydHub で Jupyter notebookとして使った場合、ブラウザを閉じるだけではなく、かならずプロジェクトをストップしておくこと。FloydHubの管理コンソールでもいいし、コマンドラインなら floyd stop アカウント名/projects/プロジェクト名/番号 を実行すること。

そうしてないとFreeでもらった時間をゴリゴリ削ってしまう。
しかも課金していようものなら..月単位らしいからそれほどシビアに管理しなくてもいいのかもしれないけど、ついうっかり動かしたまんまで、長期出張やら休暇なんかににでちゃったら..

裏でカキンカキンされちゃう..


p.s.2

今朝ジョブがTimeoutで落ちていた。
ログを見ても最後までやっている状態ではないらしい.....

でドキュメントを検索してきたら、
すぐにこんなのが見つかった。

Why did my job timeout after 1 hour?
 
You are likely in the Free Trial Plan. Jobs run in the trial plan have a maximum runtime of 1 hour. It will automatically timeout after that.
You can upgrade to the Paid Plan to overcome these limits.

なぜ私のジョブは1時間後にタイムアウトしたのですか?
あなたは無料トライアルプランの可能性が高いです。 トライアルプランで実行されるジョブの実行時間は最大1時間です。 その後、自動的にタイムアウトになります。
これらの制限を克服するために有料プランにアップグレードすることができます。
..そんな、甘い話、ないかあ..
1時間でぶち切られるなら、なかなか難しいぞ..

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側のメモリ量なのかもしれないなあ..

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...