BLOG

シンラボメンバーのあれこれ

  1. HOME
  2. ブログ
  3. 代表通信
  4. 代表通信~Tensorflow.js、PyTorch to Javascript with ONNX

代表通信~Tensorflow.js、PyTorch to Javascript with ONNX

こんばんは。代表の草場です。

感染者の数がうなぎ上りです。特に都内が急速に増えています。第二波が来ているのか、検査を受ける人が増えているだけなのか。少し解析しようと思います。

最近はJavaScript関連を集中的に学習しています。Tensorflow.jsをいろいろと勉強しています。参考にしている本は以下。
Hands-on Machine Learning with JavaScript」は、強化学習も載っていて、わかりやすいです。
Deep Learning with TensorFlow 2 and Keras」はTensorflowについての包括的な内容です。
Tensorflow machine learning projects」はプロジェクト形式で勉強できる内容です。

そういえば、PyTorchってブラウザ上でどうなのか、というのが気になり、調べてみました。「PyTorch to Javascript with ONNX」というプロジェクトがありました。「PyTorchモデルをJavaScriptでブラウザ上で実行するには、まずPyTorchモデルをONNX形式に変換してから、ONNX.jsを使ってそのONNXモデルをWebサイトやアプリにロードします。」お、ONNX、前に調べたぞ、ということで、再度ONNXのGitHubを覗きました。ザックリ訳です。

・ONNX概要
ニューラルネットワークを用いたディープラーニングは、データフローグラフ上での計算によって実現されます。いくつかのフレームワーク(CNTK, Caffe2, Theano, TensorFlowなど)は静的グラフを利用していますが、他のフレームワーク(PyTorchやChainerなど)は動的グラフを利用しています。しかし、これらはすべて、開発者が計算グラフや最適化された方法でグラフを処理するランタイムを簡単に構築できるようにするインターフェースを提供しています。グラフは、開発者のソースコードの特定の意図をキャプチャする中間表現(IR)として機能し、特定のデバイス(CPU、GPU、FPGAなど)で実行するための最適化と変換を促進します。

・なぜ共通のIRなのか?
各フレームワークは独自のグラフ表現を持っていますが、どれも似たような機能を提供しています。つまり、各フレームワークはAPI、グラフ、ランタイムのサイロ化されたスタックです。さらに、フレームワークは一般的に、高速なトレーニング、複雑なネットワークアーキテクチャのサポート、モバイルデバイス上での推論など、何らかの特性に合わせて最適化されています。これらの特性のいずれかに最適化されたフレームワークを選択するのは開発者次第です。さらに、これらの最適化は開発の特定の段階に適している場合もあります。これは、変換が必要なため、研究と生産の間に大きな遅れをもたらすことになります。

AIを民主化するという目標のもと、私たちは開発者が開発や配備のどの段階でも、プロジェクトに最適なフレームワークを選択できるようにすることを想定しています。Open Neural Network Exchange(ONNX)フォーマットは、この強力なエコシステムを確立するための共通のIRです。

計算グラフの共通表現を提供することで、ONNXは開発者がタスクに適したフレームワークを選択できるようにし、作者が革新的な機能強化に集中できるようにし、ハードウェアベンダーがプラットフォームの最適化を合理化できるようにします。

・なぜ2つのバリエーションがあるのですか?
ONNXの基本定義には、ニューラルネットワーク技術に基づく機械学習アルゴリズムに必要なサポートが含まれています。ONNX-MLには、古典的な機械学習アルゴリズムで一般的に使用される追加の型と標準演算子が含まれています。この2つのバリアントは、一部のフレームワークがニューラルネットワークアルゴリズムを標準的な方法で超えたいという要望を明確に認識し、他のフレームワークがニューラルネットワークのみをサポートすることを可能にするために作成されました。

 

ONNXも引き続き、勉強します。
明日もONNX。

関連記事