ToDo:
https://twitter.com/taku910/status/1010082944629727234 などを見てもそうだけど、この用語法が良いかどうかは議論の余地があると思う。
define-by-run が研究時に有利なアプローチなのは間違いないという合意は形成されつつあるようにあると思う。プロダクショナイズ時の整合性の保証と、トレーニング速度の心配が define-by-run で気になることかと思う
define-and-run はデプロイ時に Python のランタイムが必須でなくなり、また、トレーニング時に使ったモデルが正しく使われている保証が取りやすい。ただし
原始的な define-by-run はホスト言語に処理が戻ってくるので、速度が出しにくい。ただ、最適化の余地があって
そもそも、速度が出ないのなら、 Python をコンパイルしちゃえばいいという発想もありえる。これは単に Python を C なりアセンブリに変換するという話ではなくて、 Python 内で記述されたハイレベルなオペレーション群をくっつけていって、アクセラレータ内で完結した実行をしてもらう、という話
「Python をコンパイルする」て語感と実体がだいぶ違うアプローチで、感覚としては CUDA に近いものだと説明している。 CUDA だと、 __global__ てついてる関数はデバイスで実行して、ホスト側に main があってそのデバイスの関数を呼んだりする。同じような感じで、 Python の一部の matmul+activation みたいなところを Python じゃないコードでまとめて実行すれば良い
実際やってるのが Pytorch の @script や、そもそも言語まで変えてしまったのが Swift for TensorFlow 。アクセラレータに投げる部分の抽出と、計算グラフの微分をしたいので、 AST なりなんなり、言語処理系にまあまあ手を入れる必要があると思う。
このへんのアプローチは、気持ちとしては define-by-run のまんまだけど、なんか明らかに事前コンパイルしてる以上、 define-and-run の方が適切な呼び名な気がしてしまうので…… Swift for TensorFlow などは model-as-code と言ってるのだと思う
個人的には model-as-code が正しい方向性に思える
話がそれていく。 Swift for TensorFlow みたいな方向性が正しいとして、欲しい/必要と思う機能として
あたりを考えてると、 mypy と tangent で(どちらもよく知らないが)、一応 Python をコンパイルして使う、てのは要件を満たしそうな気もする
もっとそれていくけど、なんか雑談してると、 XX が作ってる深層学習向けプロセッサー、みたいなことを言うと、「TPUみたいなやつ?」と聞いてくる人がいたりする。深層学習向けに独自に作る価値がある計算装置として
トレーニング中は数日とかかけて、何回も同じ計算をするわけで、その計算は、例えば10分とかじっくり時間をかけて最適化しても割にあう。本質的に Python のオーバヘッドからは既にほぼ無縁な TF のグラフだけど、ターゲット向けにゆっくりコンパイルしてさらに速くする方がより良いでしょ、というのが XLA 。 ONNX を入力としてわいわいやってるのが NNVM
いろいろ話はあるけど、トレーニング向けは益がそんなに大きくないのかなあ、という気はしている。けどある程度の命令数を GPU でないアクセラレータでやるのであれば、なんかしらこういうレイヤのものは必要になるだろうしな
(20:55)
前 | 2018年 7月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。