ウェブサイト検索

ONNXについて、すべてのML/AI開発者が知っておくべきこと


オープンニューラルネットワーク交換フォーマット(ONNYX)は、深層学習モデルを交換するための新しい標準です。それは深層学習モデルをポータブルにすることを約束し、ベンダーロックインを防ぐことができます。それが現代のML/AI開発者にとってなぜ重要であるかを見てみましょう。

訓練された深層学習アルゴリズムの最終的な結果は、入力データと出力予測の関係を効率的に表現するモデルファイルです。ニューラルネットワークは、これらの予測モデルを生成する最も強力な方法の一つですが、実際のシステムに組み込むのは難しい場合があります。これらのモデルは、大抵は「.pth」ファイルやHD5ファイルのようなデータフォーマットで存在します。しばしば、これらのモデルはポータブルであることが望まれ、モデルを最初に訓練した環境とは異なる環境で展開できるようにします。

ONNX 概要

高いレベルでは、ONNXはフレームワークの相互運用性を実現するために設計されています。さまざまな言語に優れた機械学習ライブラリが多数存在しています。PyTorch、TensorFlow、MXNet、Caffeは、近年非常に人気があるほんの一部に過ぎませんが、他にもたくさんあります。
これは、あるツールスタックを使用してモデルを訓練し、別のツールを使用して推論と予測のためにデプロイできるという考え方です。この相互運用性を確保するためには、モデルをプロトBufファイル内のシリアライズされた表現であるmodel.onnxフォーマットでエクスポートする必要があります。現在、PyTorch、CNTK、MXNet、Caffe2にはONNXのネイティブサポートがありますが、TensorFlowやCoreML用のコンバーターもあります。

前提条件

  • 機械学習(ML)と深層学習(DL)の基本的な理解:ニューラルネットワーク、レイヤー、モデル、およびトレーニングプロセスなどの概念に精通していること。

  • 人気のある機械学習フレームワークに関する知識:TensorFlow、PyTorch、またはScikit-learnなどの主要な機械学習/深層学習フレームワークのいずれかでの経験。ONNXはフレームワーク間でモデルを変換するために使用されます。

  • モデル展開の経験:MLモデルを本番環境で展開する基本を理解していること、ONNXは効率的なクロスプラットフォーム展開を助けるためです。

  • モデル最適化への慣れ: ONNXがモデルをより効率的にするためにしばしば使用されるように、パフォーマンスのためのMLモデルを最適化する技術の基本的な理解。

  • Pythonプログラミング:ONNXはPythonにおいて強力なサポートを提供しているため、そのツールやライブラリを使用するにはPythonの知識が不可欠です。

実践におけるONNX

冷蔵庫にある食品がまだ食べられるかどうかを予測するモデルを訓練しようと想像してみましょう。あなたは、賞味期限が過ぎたさまざまな段階の食品の写真をたくさん用意し、それを食品の画像を見て、食品がまだ食べられるかどうかを予測するために訓練する畳み込みニューラルネットワーク(CNN)に渡すことに決めます。

モデルをトレーニングしたら、次は新しいiOSアプリにデプロイして、誰でも事前にトレーニングされたモデルを使って自分の食べ物の安全性を確認できるようにしたいと思います。最初はPyTorchを使用してモデルをトレーニングしましたが、iOSではアプリ内でCoreMLを使用する必要があります。ONNXは、モデルの中間表現であり、環境から次の環境へ簡単に移行できるようにします。

PyTorchを使用して、通常はtorch.save(the_model.state_dict(), PATH)を用いてモデルをエクスポートします。ONNX相互形式にエクスポートするのはさらに1行追加するだけです:
torch.onnx.export(model, dummy_input, 'SplitModel.proto', verbose=True)

ONNX-CoreMLのようなツールを使用すると、事前にトレーニングしたモデルをXCodeにインポートしてアプリにシームレスに統合できるファイルに簡単に変換できます。動作例については、Stefano Attardiによる始まりから終わりまでのML駆動のiOSアプリの構築に関する優れた投稿をチェックしてみてください。

結論

深層学習フレームワークがますます増え、ワークフローがより高度になるにつれて、ポータビリティの必要性はこれまで以上に重要になっています。ONNXは、フレームワークへのロックインを防ぎ、開発したモデルが長期的に使用できることを保証するための強力でオープンな標準です。

関連記事: