ONNX:モデルの相互運用
ONNXとは
モデルの学習ができるフレームワーク(Tensorflow・Pytorch・Scikit-Learnなど)が増えたことで、複数の異なるハードウェア(携帯・パソコン・工場のロボット等)にモデルを持ち込んで推論するのが難しくなってきました。理由は、フレームワーク及び使用するハードウェアによって用意されているリソース、必要なリソース、必要な作業が異なるからです。
以前までは、Pickleみたいに学習したモデルをバイトストリームに保存し、どこからでも使用することは可能でしたが、自由度がかなり縛られてしまいます。
そこで生まれたのがONNX (Open Neural Network eXchange)。
ONNXは共通した「オペレータ」と「ファイル形式」を定義するオープンソーススタンダードで、異なるフレームワークだろうがモデルの開発をしやすくしてくれます。横文字がたくさん並んでいますが、とりあえず、↑画像のような中間ファイル的なものです。
また、ONNX独自のRUNTIMEもあるため、ONNX形式のモデルで推論することもできます。
Use Case
[例1]
何かしらのフレームワークで学習したモデルをJetsonなどのエッジ端末で推論したいときに、エッジ端末のGPUはそこまで性能が高くないのでモデルを高速化する必要があります。ONNXがあることで、どんなフレームワークを使ってようが、高速化するための変換作業がスムーズになります。
[例2]
Pythonで学習を終えたモデルをPythonを用いて推論するのが遅いから、c++を用いて早く推論がしたいケースがあったとします。ONNXはC++のAPIも用意されているため、モデルをONNX形式に変換するだけで、簡単にC++でも推論することができます。
Writed by F.K(20代・入社3年目)