Translate

2018年7月30日月曜日

Docker CE for Windows 18.06.0-ce-win72 をインストールしたら「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。」というエラーが表示される件

普段Docker CE for Windows stable版(18.03.1-ce-win65)をつかっているのだけど
数日前に起動時に
最新版がリリースされたというダイアログメッセージが表示されるようになった。


..ので、docker-machineで作成したVMを削除しておいてから、
Windowsボタン>歯車アイコン>アプリ を開き
「Docker for Windows」をアンインストールボタンを押してアンインストールして
最新版(18.06.0-ce-win72)を「Docker for Windows Installer.exe」からインストール
し直そうとしたら..

Microsoft .NET Frameworkのダイアログで以下のエラーが表示された。




いろいろ試行錯誤したところ
独自にHyper-V上で作成した仮想スイッチ「myswitch」が残っていた。
ので「myswitch」を削除・リブートしてInstallerを実行すると..

同じ画面だが詳細表示に出てくる行数(読み込まれたアセンブリ)が
かなり減った。

それじゃあ..とHyper-V自体を
Windowsボタン>歯車アイコン>アプリ>関連設定 プログラムと機能>Windows機能の有効化または無効化
を選択して
Hyper-Vのチェックをすべて外してOKボタンを押し、
再起動してからInstallerを実行すると..




Hyper-Vをインストールするか?ときいてくるので「Ok」ボタンを押し継続して

..正常にインストールできた..



おそらく更新ダイアログ上にあったUpdateボタンからバージョンアップしてたら
問題なくインストールできたのだと思う。

だって、今回のエラーをいろいろ検索してみたが
同じ症状を訴えている人の記事を見つけられなかったからね。

みんな素直にUpdateしたんじゃなかろうか..と。

2018年6月18日月曜日

今頃、docker image ls と docker images ls の違いに気づく

Dockerを我流で学んで使いだして1年以上立つのだけど、
勉強が我流なだけに、たまにとんでもない「抜け」がでてくる..


先日ふとローカルPC上のDockerイメージを一覧させようと以下のコマンドを実行してみた

PS C:\Users\XXXXX> docker images ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

PS C:\Users\XXXXX>

..あれ、あるはずのイメージがないぞ..

もう一回..

PS C:\Users\XXXXX> docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
tensorflow/tensorflow      1.8.0-py3           a83a3dd79ff9        7 weeks ago         1.33GB
hello-world                latest              e38bc07ac18e        2 months ago        1.85kB
docker4w/nsenter-dockerd   latest              cae870735e91        7 months ago        187kB

PS C:\Users\XXXXX>

よかったよかったでてきたよ..

..あれ?


でようやく docker image lsdocker images ls の違いに気づいた。

docker image ls を実行すると中間イメージ含めて表示するけど
docker images ls はインスタンス状態のイメージしか表示しないのか..

ねんのためふたつのhelpをだしてみる。

まずdocker images
PS C:\Users\xxxxx> docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

そしてこっちがdocker image
PS C:\Users\xxxxx> docker image --help

Usage:  docker image COMMAND

Manage images

Options:


Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.

docker images は基本イメージ一覧専用のコマンドで
docker image はコマンドによっていろんな操作が可能な万能コマンドというわけか。
で、
docker images には ls というコマンド..というかコマンド自体取らないから
ls を無視していたのね..
..そこはエラー出さないとだめじゃないのかな..


..恥かく前に自分で気づいて、良かったよ..


2018年6月12日火曜日

人工知能学会 全国大会の歩き方

先週年休をもらって
鹿児島で開催された
人工知能学会の全国大会に
参加してきた。

ブームが1年もったので今回は増えそうだとおもっていたが、
ほぼ同数の2240名(3日め懇親会時点)..
どうも前回名古屋で参加しやすかったのに
こんかいはじっこの鹿児島だからなあ..

..話をもどして..


受講した中で、一番よかった講演はこれ:



LinkedInにて公開してくれている。
Transformarの動画GIF(?)とか表示されないものもあるけど
ほぼこのスライドどおりである。

本当はAttentionメカニズム
(とTransformarで使っているself-Attention)のところを
もっと詳しく話してほしかったのだけど、
出し惜しみ(?)したのかさわりだけだった。
まあ、双方向LSTMのあたりからそうだったけど
双方向~はあたりがつくからあれでいいとおもうのよね。


私が聞いた中で一番笑いが多かったセッションがこれ:



こちらもLinkedInで公開されている。
白くま配布だけの役とか個人情報的にアレなスライドは
はずされているが、本筋はこの資料で十分。

..正直スクレイピングのところは、
自分でもbs4コードを書いたことがあるのでどうでもいいのだけど
人工知能学会ならスクレイピングかけても怒られないだろうと
クロールして、一番色んな人と関係性を持っている人物名をあげる
というデモ(?)をしたのだけど過去10年で検索したら
全部セッションしている本人だったというオチ..

実はLinkedIn スライドには切られているところに
いろいろ楽しいスライドが入っていたんだよね、
日本3大がっかり観光名所とか
第2グループの頭目が誰なのか..とか


実は、今回通常のセッションはうけないで
すべてチュートリアルセッションねらいで参加しました。

理由は
・もともとAI開発者を増やすためいい学習コンテンツを模索していた
・人工知能学会の論文で、まだ「おっ!」と思ったことがない(当たり外れが大きい)
・前回受けたチュートリアル講演「対話システム」がよかった
・前回の感触からチュートリアル担当講師はその道のプロが基本担当することが多そう
の4つ。

で、チュートリアル講演ねらいでまわったのだけど、
ヒト大杉..

前回はしゃがんで聞いているひとがいたが、
今回は椅子が追加されていたのでそういうかわいそうな人は2日目くらいだった。

幸いチュートリアルをやる会場が1箇所固定だったので最初に場所とっておけば
あとはずっと居座るだけ。

あとで気づいたが、
昼にランチョンセミナーがあるのでそれをあさイチでチケットゲットすれば
あとは居座っちゃえばいい。
実は会場正面向かって一番右から2番めの剥げたおじさんがこの方法を全日やっていることに
3日目できづいた。
このハゲおじさん、どうも全国大会聴講のプロらしく、
1日終日同じ会場の同じ場所に陣取るときめていて
朝チケットをゲットしたら、あさイチセッションないのに
2Fの右前2列め端っこの席を陣取り、
おもむろに持ってきた延長タップ&ブランチコードで
自分のPC、携帯電話などの電子機器の充電にかかるという猛者。
開場したらセッションのない教室も開場されることをしっていないと
この動きは取れない、
セッションの終わりで全員一旦外に出さないこともしっていた。
つまりこの人はベータテスター..もとい前回大会経験者なのだ。
席を前から2番めにしたのも、壁の電源タップねらいで、
しかもブランチや延長ケーブル、携帯充電まで一口でこなしていた猛者だった..


全国大会初心者が次回参加する場合は、
このビータのピンクハゲおじさんのスタイルでいけば
ほぼまちがいない聴講ができると思う;-p


あと大事なのが、スライドは全部写真にとること。
じつは全国大会のセッションスライドは公開されることが少ない。
これは学術大会であるがゆえ、正しい情報=原本のコピペ中心のスライドに
なってしまい、内容も自分で書いた絵でないから霊が入っていない。
が、資料としては勝ちがあり、かつ写真をとっても文句を言わない。
ただ、周りから、こいつド素人が..とかおもわれるだけ。

だったら写真はとっておくべき。


..おかげで私のiCloud、上限5GBを超えてしまった..


p.s.
チュートリアル講演の中でうーん..だったセッションをあげときます。
東大松尾研の学習コンテンツをそのままつかっただけの
[2I3] 「実践Deep Learning – いまさら聞けない入門編」(1) (中山 浩太郎)


内容も転移学習まで..

seq2seqやAttentionにより詳しい解説してくれたらよかったのになあ..

大学系の人の講義って正確性を第一にしているらしく
ヒトに聞かせようとする努力が薄い..
とくにほかのチュートリアルを担当している先生方と比較すると..
あ、「強化学習」のチュートリアル講演もそうだけど、
数学科の生徒でも数式はノートに書きながら自分のスピードで理解して
いかないといけないのにプレゼン資料にデカデカとだして
次の行に変換された理由をとうとうと講師のペースで語られて
なにが受講者に残ると思っているのか...
..しょっぱいチュートリアルだった..

正直、Udemy講座のほうがよっぽどわかりやすく教えてくれてるって..

翌日(2)があったが、べつのセッションを聞きに行った。
チュートリアルでもあたりはずれがあるので
臨機応変にうごいたほうがいい。

2018年5月23日水曜日

TensorFlow.js をちょっと触りだけでも理解しておこうと

Core Concepts in TensorFlow.js
https://js.tensorflow.org/tutorials/core-concepts.html

を勝手に翻訳してみた。
以下、翻訳した日本語だが参照の際は
at your own risk
でお願いします。

-----

TensorFlow.js のコアコンセプト


TensorFlow.js は、マシンインテリジェンスのためのオープンソースの WebGL アクセラレーションされた JavaScript ライブラリです。それはあなたの指先に高いパフォーマンスを発揮する機械学習のビルディングブロックをもたらし、ブラウザでニューラルネットワークをトレーニングしたり、トレーニング済みのモデルを推論モードで実行することができます。TensorFlow.jsのインストール/設定のガイドについては、”TensorFlow.js Getting Started”を参照してください。
TensorFlow.js は、機械学習用の低レベルビルディングブロックと、ニューラルネットワークを構築するための高レベルのKeras風のAPIを提供します。ライブラリのいくつかの主要なコンポーネントを見てみましょう。

テンソル


TensorFlow.js において中心となるデータ単位は、テンソルです。数値の集合は、1つ以上の次元の配列に整形されています。Tensor インスタンスは配列形状を定義する属性 shape を保有しています(すなわち、それぞれの次元の配列がどんなにたくさんの値であるか)。
主なTensorコンストラクタは次のtf.tensor関数です。

// 2x3 Tensor
const shape = [2, 3]; // 2 rows, 3 columns
const a = tf.tensor([1.0, 2.0, 3.0, 10.0, 20.0, 30.0], shape);
a.print(); // print Tensor values
// Output: [[1 , 2 , 3 ],
//          [10, 20, 30]]

// The shape can also be inferred:
const b = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);
b.print();
// Output: [[1 , 2 , 3 ],
//          [10, 20, 30]]

:しかし、低階数の Tensor を構築するために、我々は、コードの可読性を高めるために、次のの関数を使用することをお勧めします: tf.scalar , tf.tensor1d , tf.tensor2d , tf.tensor3d , tf.tensor4d
次のサンプルでは tf.tensor2d を使って上記と同じテンソルを作成します。

const c = tf.tensor2d([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);
c.print();
// Output: [[1 , 2 , 3 ],
//          [10, 20, 30]]

TensorFlow.js には、すべての値が0(tf.zeros)に設定した、またはすべての値が1(tf.ones)に設定したテンソルを作成するための便利な関数も提供します。

// 3x5 Tensor with all values set to 0
const zeros = tf.zeros([3, 5]);
// Output: [[0, 0, 0, 0, 0],
//          [0, 0, 0, 0, 0],
//          [0, 0, 0, 0, 0]]

TensorFlow.js においては、テンソルは不変です。一旦作成されると、その値を変更することはできません。そのような場合、代わりに新しいテンソルを生成する演算を実行します。

変数


Variable はテンソル値で初期化されます。しかし、 Tensor とは異なり、変値は変更可能です。次の assign メソッドを使用して、既存の変数に新しいテンソルを割り当てることができます。

const initialValues = tf.zeros([5]);
const biases = tf.variable(initialValues); // initialize biases
biases.print(); // output: [0, 0, 0, 0, 0]

const updatedValues = tf.tensor1d([0, 1, 0, 1, 0]);
biases.assign(updatedValues); // update values of biases
biases.print(); // output: [0, 1, 0, 1, 0]

変数は主に、モデルトレーニング中に値を格納してから更新するために使用されます。

オペレーション(Ops)


テンソルを使用するとデータを格納できますが、操作(ops)ではそのデータを操作できます。TensorFlow.jsは、テンソルで実行できる線形代数と機械学習に適したさまざまな操作を提供します。テンソルは不変なので、これらの演算子は値を変更しません。代わりに、ops は新しいテンソルを返します。

使用可能なオプションには、以下のような単項演算 square が含まれます。

const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const d_squared = d.square();
d_squared.print();
// Output: [[1, 4 ],
//          [9, 16]]

そして add , suv そして mul といったバイナリ ops が含まれています。

const e = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const f = tf.tensor2d([[5.0, 6.0], [7.0, 8.0]]);

const e_plus_f = e.add(f);
e_plus_f.print();
// Output: [[6 , 8 ],
//          [10, 12]]

TensorFlow.js には連鎖可能なAPIがあります。ops の結果で opsを呼び出すことができます:

const sq_sum = e.add(f).square();
sq_sum.print();
// Output: [[36 , 64 ],
//          [100, 144]]

// All operations are also exposed as functions in the main namespace,
// so you could also do the following:
const sq_sum = tf.square(tf.add(e, f));

モデルとレイヤ


概念的にはモデルは、ある入力が与えられた出力を生成する関数です。
TensorFlow.js には、モデルを作成する2つの方法があります。opsを直接使用して、モデルが行う作業を表すことができます。例えば:

// 関数定義
function predict(input) {
  // y = a * x ^ 2 + b * x + c
  // tf.tidy の詳細は次のセクションで
  return tf.tidy(() => {
    const x = tf.scalar(input);

    const ax2 = a.mul(x.square());
    const bx = b.mul(x);
    const y = ax2.add(bx).add(c);

    return y;
  });
}

// 定数定義: y = 2x^2 + 4x + 8
const a = tf.scalar(2);
const b = tf.scalar(4);
const c = tf.scalar(8);

// 2 というinputからoutputを予測
const result = predict(2);
result.print() // Output: 24

また、高レベル API tf.model を使用して、レイヤからモデルを構築することもできます。これは、ディープラーニングの一般的な抽象化です。次のコードは、 tf.sequential モデルを構成します。

const model = tf.sequential();
model.add(
  tf.layers.simpleRNN({
    units: 20,
    recurrentInitializer: 'GlorotNormal',
    inputShape: [80, 4]
  })
);

const optimizer = tf.train.sgd(LEARNING_RATE);
model.compile({optimizer, loss: 'categoricalCrossentropy'});
model.fit({x: data, y: labels)});
TensorFlow.jsには、さまざまな種類のレイヤが用意されています。いくつかの例: tf.layers.simpleRNN, tf.layers.gru, tf.layers.lstm

メモリ管理: dispose と tf.tidy


TensorFlow.js は GPU を使用して数学演算を高速化するため、テンソルと変数を扱うときはGPUメモリを管理する必要があります。
TensorFlow.js は、これを支援するために二つの機能を提供します:dispose tf.tidy

dispose


dispose を呼び出しテンソルまたは変数を消去し、そのGPUメモリを解放することができます:

const x = tf.tensor2d([[0.0, 2.0], [4.0, 6.0]]);
const x_squared = x.square();

x.dispose();
x_squared.dispose();

tf.tidy


多くのテンソル操作を行う場合、 dispose を使用することは面倒です。TensorFlow.js では、別の関数として tf.tidy を提供し、GPUでサポートされているテンソル以外は JavaScriptでは通常のスコープと同様の役割を果たします。
tf.tidy 関数を実行し、作成された中間テンソルをパージして、GPUメモリを解放します。内部関数の戻り値はパージしません。

// tf.tidy は、あとで整理するための関数をとります
const average = tf.tidy(() => {
  // tf.tidy は、返却されるテンソル以外の、この関数内のテンソルに
  // よって使用されるすべてのGPUメモリをクリーンアップします。
  //
  // 下のような短い操作シーケンスでも、いくつかの中間的なテンソルが
  // 作成されます。 だからあなたの演算 ops をきちんと整理するのは
  // 良い習慣です!
  const y = tf.tensor1d([1.0, 2.0, 3.0, 4.0]);
  const z = tf.ones([4]);

  return y.sub(z).square().mean();
});

average.print() // Output: 3.5

tf.tidy を使用することで、アプリケーションのメモリリークを防ぐことができます。また、メモリの再利用時期をより慎重に管理するために使用することもできます。

重要な2つの注意


  • tf.tidy に渡される関数は同期している必要があり、Promiseも返されません。UI を更新するコードを保持するか、リモートからのリクエストを tf.tidy の外部に出すことをお勧めします。
  • tf.tidy は変数をクリーンアップしません。変数は通常、機械学習モデルのライフサイクル全体にわたって持続するため、TensorFlow.js は、それらが tidy で作成されていてもそれらをクリーンアップしません。ただし、手動で dispose を呼び出すことはできます。


その他のリソース


ライブラリの包括的なドキュメントについては、TensorFlow.js APIリファレンスを参照してください。
機械学習の基礎について詳しくは、次のリソースを参照してください。


-----

やはり、TensorFlowにKerasの簡単さを取り入れた
構成になってるなあ..

非同期処理の塊であるJavaScriptエンジンでは
tidy()で別スレッドへとばしてメインスレッドを汚さないように
動かすんだ..

に、してもこのドキュメント、
Python の TensorFlow や Keras を一度でも触ったことのある人を
前提にしていて、読みにくい..

Google のドキュメンテーションって、
いっつもターゲットを間違えているんだよなあ..

TensorFlow.js がこれまでのmobileやLiteと違って
学習処理も実装できるように作っている以上、
何も知らない人間を前提にスべきだと思う..

..とここで日本語で書いても、Googleにはつたわらないんだろうけど..




2018年5月22日火曜日

どうでもいい話「昔の邪推がニアピンだった件」

まえに以下の記事を書いた。

Keras の概要を読んで、邪推する
https://fight-tsk.blogspot.jp/2017/01/keras.html

ここで
「Kerasの狙いは
Java機械学習標準ライブラリ狙い
か!」

と書いたのだけど、結局コレはハズレだった。



が、TensorFlow.js の本家サイトを読んでいて
今日ふとこんな記述をみつけた。

TensorFlow.js Layers API for Keras Users
https://js.tensorflow.org/tutorials/tfjs-layers-for-keras-users.html


以下上記リンク先の最初のブロックをぬきだしたものです。

The Layers API of TensorFlow.js is modeled after Keras. As you might have noticed from the tutorials and examples, we strive to make the Layers API as similar to Keras as reasonable given the differences between JavaScript and Python. This makes it easier for users with experience developing Keras models in Python to migrate to TensorFlow.js Layers in JavaScript.

TensorFlow.jsの Layers API はKerasの後にモデル化されています。チュートリアルやサンプルから気づいたかとおもいますが、JavaScript と Python の違いを考慮して、Layers API を Keras に似せるように努めています。これにより、PythonでKerasモデルを開発した経験を持つユーザがJavaScriptのTensorFlow.jsレイヤに移行することが容易になります。



Java ではなく JavaScript だったか..


今朝こんな記事を読んだし..


崖っぷちのJava
なくなるJava SE無償版、ユーザーはどうなる
http://tech.nikkeibp.co.jp/atcl/nxt/column/18/00294/051700002/




..Java、オワコン感はんぱないなあ..

2018年5月21日月曜日

TensorFlow.js(0.11.1) の Getting Started を翻訳してみる

今年のTensorFlow DevSummit の目玉のひとつである
TensorFlow.js をそろそろやってみようかな、
とおもいまずGetting Started ページを読んでみることにした。

といっても現時点(v0.11.1時点)はTensorFlow.jsトップページの下半分
になっている。

以下、勝手に翻訳した文章だが、参照される方は
at your own risk で参照してください。

----

Getting Started

JavaScriptプロジェクトで TensorFlow.js を取得するには、 scriptタグを使用する方法と、NPMからインストールし、ParcelWebPackRollup などのビルドツールを使用する方法の2つの方法があります。

script タグ経由

HTMLファイルに以下のコードを追加します:

<html>
  <head>
    <!-- TensorFlow.js のロード -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.11.1"> </script>

    <!-- 下のscriptタグ内にコードを挿入します。外部の.jsファイルを使用することもできます -->
    <script>
      // 'import'ステートメントがないことに注目してください。 
      // ひとつ上のscriptタグのため、 'tf'はindex-pageで利用できます。

      // 線形回帰モデルの定義
      const model = tf.sequential();
      model.add(tf.layers.dense({units: 1, inputShape: [1]}));

      // トレーニング用モデルの準備:損失値とオプティマイザを指定します
      model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

      // トレーニング用合成データを生成します
      const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
      const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);

      // データを使ってモデルをトレーニングします
      model.fit(xs, ys).then(() => {
        // モデルが以前に見たことがないデータポイントについて推論を行うには、
        // モデルを使用します:
        // ブラウザの開発ツールを開いて出力を確認してください
        model.predict(tf.tensor2d([5], [1, 1])).print();
      });
    </script>
  </head>

  <body>
  </body>
</html>

あなたのブラウザでHTMLファイルを開くと、コードが実行されます!

 NPM経由


yarn または npm を使って TensorFlow.js をプロジェクトに追加します。注意: ES2017構文( `import`など)を使用しているため、このワークフローでは、コードをブラウザが理解できるものに変換するために bundler/transpiler を使用していることを前提としています。 Parcel を使用してコードを構築する方法については、 を参照してください。Parcel など、好きなビルドツールを自由に使うこともできます。
yarn add @tensorflow/tfjs
npm install @tensorflow/tfjs


あなたのメイン js ファイルには、次のように記述します:

  import * as tf from '@tensorflow/tfjs';

  // 線形回帰モデルの定義
  const model = tf.sequential();
  model.add(tf.layers.dense({units: 1, inputShape: [1]}));

  // モデルのトレーニングの準備:損失値およびオプティマイザの指定
  model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

  // トレーニング用合成データの生成
  const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
  const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);

  // データを使ってモデルをトレーニング
  model.fit(xs, ys).then(() => {
    // モデルが以前に見たことがないデータポイントについて推論を行うには、
    // モデルを使用します:
    model.predict(tf.tensor2d([5], [1, 1])).print();
  });




詳細は、 チュートリアルサンプルドキュメントを参照してください。

助けが必要ですか?連絡を取りたいですか?

ライブラリを使用してバグが発生した場合 は、GitHubリポジトリに問題を提出してください。また 、TensorFlow.jsを使用について質問をしたり、技術的な助けを借りたり、何をしているのかを聞いたりする共有するコミュニティメーリングリストもあります。TensorFlow.jsのニュースを最新に保つには、twitterで私たちをフォローしてください。または announcement only のメーリングリストに参加してください。
 ------

過去のTensorFlow mobileやTensorFlow Lite は、
inference(推論)ブロック、つまり予測だけをJavaScriptで実行させようとしていたけど、
TensorFlow.js は TensorFlow本体をJavaScriptコードで書かせるというものだ。

なので上記のサンプルはありものの(pre-madeな)回帰分析を
使ってトレーニングさせるところをGetting Started で選んでいる。

HTMLのscriptタブで実装する場合は
HTMLファイルがパースされるクライアントPC上で実行されるが
どうもクライアントPCにNVIDIAドライバとGPUが乗っていれば
それを使うらしい..

とすると、
DockerホストがGPU搭載機であれば、
NVIDIAドライバをホストにインストール済みで、
nvidia docker2 がインストール済みで、
tensorflow/tensorflow-gpu をDockerfileとかでnode/npm動作するように加工しておけば
コンテナでもGPUが使えるわけだ..


node公式かtensorflow公式コンテナで誰か作ってくれるまで
待つとしようかな..














2018年4月26日木曜日

TensorFlow 1.5.1 以降をインストールしてimportすると落ちる件


#まえにも書いた記事の続編です。







多分これで悩んでいる人多いと思います。
イロイロためしてみてなんとなくわかったことを書いておきます。


手元にThinkPad X230 と やや古いマウスコンピュータ製PCがあり
両方にTensorFlowを入れてみたのですが
どちらも1.5.0 までで1.5.1以降は
import tensorflow で落ちてしまいます。

..で、近年のWindows10渋々移行の波に乗り
X230のかわりにThinkPad T470 を使いだしたのですが
コッチでは最新版が動作することがわかりました。
そのときのInformationでようやくリリースノートの意図がわかってきました。


----
ThinkPad X230(Windows 7)
Intel(R) Core(TM) i5-3320M
→命令セット拡張 Intel(R) AVX

マウスコンピュータ製PC
Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
→命令セット拡張 Intel(R) SSE4.2

ThinkPad T470(Windows10)
Intel(R) Core(TM) i5-7200U
→命令セット拡張 Intel(R) SSE4.1, Intel(R) SSE4.2, Intel(R) AVX2
----


たしかに1.6.0からはAVX対応してないPCでは
コンパイルが必要とかリリースノートに書いていましたが、
それはCPUの命令セット拡張の
Intel(R) AVX ではなく
Inten(R) AVX2 でないといけない
ということだと思います。

それ以外は該当環境のオプションを付けて
再コンパイルしないと動作しません。

で、再コンパイルしようと思ってふと
わざわざイチからコンパイルして時間かけてできた
TensorFlowは遅いことが約束されたライブラリでしかないわけで
そんなの使う手間があったらほかのことしたほうが良いよね...


と、いうことでi7クアッドが載っている
マウスコンピュータ製PCも1.5.0 で諦めることにしました...


それまでやたらInformationを無視していましたが
これまでも警告が出ていたのですねえ..

みなさんも搭載CPUのスペックをインテル社サイトで調べて
「命令セット拡張にAVX2」の有無を確認してみてください。






..動けばいい、の刹那的技術者はやっぱりダメだな..

2018年4月11日水曜日

TensorFlow Dev Summit 2018 キーノートセッション資料を動画から切り出してみる

またもや日本はハブられた、TensorFlow Dev Summit 2018。


キーノートを始めとする動画がYoutubeに上がっていたので
セッション資料のところだけを一生懸命きりだしてみた。


力尽きたのでKeynoteだけ公開します。

-----





















































































-----
最後の芋の葉っぱをそれほど高くない携帯で病気判定しているのだけど
多分その芋が主食で携帯はもっているけど裕福でない国にとって
携帯自動判定はすごくありがたいものだったのだろう。

学習済みInceptionV3とKeras.jsとかつかえば
ソフトウェアとしてはそれほど難易度は高くなさそうだが
それを必要な国で展開するところがDev Summitで拍手されるに値する
プロジェクトだったのだろう。

そういう、ユースケースを見つけてみたいものだ..



Docker CE for Windows 18.06.0-ce-win72 をインストールしたら「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。」というエラーが表示される件

普段Docker CE for Windows stable版(18.03.1-ce-win65)をつかっているのだけど 数日前に起動時に 最新版がリリースされたというダイアログメッセージが表示されるようになった。 ..ので、docker-machineで作成したVM...