実際の機械学習プロダクションシステムはどのように実行されますか?


7

親愛なる機械学習/ AIコミュニティ、

私は、オープンなオンラインデータセットと、プロジェクト用にローカルで構築されたいくつかのPOCに取り組んできた、新進気鋭の機械学習者です。再トレーニングを回避するために、いくつかのモデルを構築し、ピクルスオブジェクトに変換しました。

そして、この質問はいつも私を困惑させます。実際の本番システムはMLアルゴリズムでどのように機能しますか?

たとえば、MLアルゴリズムを数百万のデータでトレーニングし、それを本番システムに移動するか、サーバーでホストしたいとします。現実の世界では、それらは漬物オブジェクトに変換されますか?もしそうなら、それは巨大な漬物ファイルになるでしょう、そうではありません。ローカルでトレーニングし、50000行のデータ自体に変換したものは、そのピクルされたオブジェクトのためにディスク上で300 Mbのスペースを使用しました。私はそうは思わないので、これは正しいアプローチです。

では、MLアルゴリズムが受信データを再トレーニングして予測を開始しないようにするには、どうすればよいでしょうか。また、継続的なオンライン学習者として実際にMLアルゴリズムを作成する方法を教えてください。たとえば、画像分類子を作成し、入力画像の予測を開始しました。しかし、以前にトレーニングしたデータセットに着信オンライン画像を追加して、アルゴリズムを再度トレーニングしたいと思います。すべてのデータについてではなく、毎日、その日に受信したすべてのデータを組み合わせて、以前にトレーニングした分類子が実際の値で予測した新しく100枚の画像で再トレーニングしたい場合があります。そして、この再トレーニングは計算リソースとデータに基づいて時間がかかる可能性があるため、このアプローチは、以前にトレーニングされたアルゴリズムに影響を与えて、着信データの予測を停止するべきではありません。

私は多くの記事をGoogleで読みましたが、上記の質問を見つけたり理解したりできませんでした。そして、これは私を毎日困惑させています。本番システムでも手動による介入が必要ですか?それとも自動化されたアプローチがありますか?

上記の質問へのリードまたは回答は非常に役立ち、高く評価されます。私の質問が意味をなさない、または理解できない場合はお知らせください。

これは私が探しているプロジェクト中心ではありません。実際のプロダクションMLシステムの例の単なる一般的なケース。

前もって感謝します!

回答:


2

モデルを量産するために考慮すべきことはたくさんあります。あなたが尋ねている主なものは:

  • 機能性
  • 建築

機能性

Webサーバーからの本番環境でモデルを使用するには、モデルを公開するAPIをホストできます。

たとえば、あなたがエンドポイント(例えばマップフラスコPythonのサーバーを実行、持っているGET http://<your_host>/prediction/image.jpgと)predict()モデルの機能を。

次に、それを継続的なオンライン学習者にすることについて言及しました。ほとんどの分類子は、データに注釈が付けられている(つまり、ラベルが付けられている)場合、より多くのデータで改善されますが、そのためには手動で注釈を付け、システムに再フィードしてモデルを再トレーニングする必要があります。自信を持って新しいデータに自動的にラベルを付けることができれば、システムを改善する必要はありません。ですから、手作業はある程度必要です(ラベル付け)が、残りは自動化できます。ウェブサーバーにエンドポイントを追加すると、トレーニングデータをアップロードでき、システムがモデルを再トレーニングし、バージョン管理を行い、最新のトレーニング済みモデルを再ロードします。

建築

ストレージ

あなたはpickleファイルについて言及し、それらがディスク上で大きすぎることを恐れています。ただし、現在、クラウドソリューションでは、これは多くの場合問題になりません。

Blob-Storageソリューションを使用でき、価格が非常に低いことがよくあります(例:https : //azure.microsoft.com/en-us/services/storage/blobs/はコストがかかります)0.002ユーロ/ GB /月)。

もちろん、バージョン管理のために多くのピクルスを保持することもできます(推奨)。ただし、コストを最小限に抑えたい場合は、最新のモデルのみを保存できます。

さらに、APIが頻繁に使用される場合、モデルを毎回リロードし続ける必要はありません。常にRAMで使用できるようにしておくことをお勧めします。クラウドに大量のRAMを搭載したサーバーをホストするのは、やはり費用がかかりません。

レイアウト

持つことができるアーキテクチャのレイアウトは次のとおりです。

+----------------+          +--------------+
|                |          |              |
|  ADMIN SERVER  | -------> | BLOB STORAGE |
|                |          |              |
+----------------+          +--------------+
        |                           ^
        |                           |
        |               +-----------+-----------+
        |               |                       |
        |      +------------------+  +----------------+
        |      |                  |  |                |
        |      |  PREDICT SERVER  |  | PREDICT SERVER |
        |      |                  |  |                |
        |      +------------------+  +----------------+
        |                    ^          ^
        |                    |          |
        |                +------------------+
        |                | |              | |
        +--------------> | |     QUEUE    | |
                         | |              | |
                         +------------------+

ここでは、ADMIN SERVERがモデルを再トレーニングし、新しいモデルをストレージにアップロードし、ジョブをキューにパブリッシュして、PREDICT SERVERSから最新のモデルをフェッチするすべての機能を処理しますBLOB STORAGE

BLOB STORAGEモデルを保持しています。

は機能をPREDICT SERVER公開するpredict()ため、モデルは他のシステムからアクセスできます。ここでは、予測を高速化するためにモデルがRAMに保存されます。モデルの使用法によっては、1予測のためのサーバー。モデルはBLOB STORAGEローカルハードディスクではなく永続化されているため、これは可能であり、すべてのモデルが最新のモデルをフェッチできます。

これQUEUEは、ADMIN SERVERがすべてPREDICT SERVERのと通信できる方法です。


ブルーノに感謝!これは、私が質問で受け取った中で最も優れた最も簡単なナレーションの1つです。
Manikant Kella

@ManikantKella私の喜び。どんなときも。
Bruno Lubascher

2

はい、アップロードされたモデルを永続的に表現するのが一般的です。また、通常、ファイルとしては非常に大きいです。を使用するのpickleが1つの方法で、たとえばで一般的に使用さscikit-learnれます。通常、ディープラーニングフレームワークには独自の形式がpickleありますが、アプローチとしてより複雑で効率が悪いことを除いて、それらを使用することを妨げるものはありません。

質問の2番目の部分が理解できたとは思いませんが、オンラインでモデルを変更したい場合でも、新しいピクルスを作成できます。特にWebアプリケーションサーバーがシングルスレッドの場合は、サイトまたはWebサービスのブロックを回避するために、新しいトレーニングをバックグラウンドで個別のバッチプロセスとして実行することをお勧めします。さらに、サーバーリソースの使用率に注意する必要があるため、トラフィックの少ない期間にバッチ更新を実行することをお勧めします。これは、週末や、ユーザーベースが主に地域の場合、夜間や祝日などに発生します。


はい、漬物ファイルは使用できます。しかし、何百万ものデータをイメージし、そのトレーニング済みモデルをそのデータのピクルファイルに変換するには、ギガバイト単位で使用する場合があります。また、エンジニアデータを使用している場合は、それもpickleに変換する必要があるため、サーバーのスペースが増えます。現実の世界でこの状況をどうやって回避するのでしょうか?その他の場合は、新しいピクルスファイルとして再トレーニングして保存するつもりでした。手動での介入が必要です。これは、オンライン予測や新しいデータを古いデータに変換したり、自動的に再トレーニングしたりするために自動化されたものです。
Manikant Kella

scikit-learnまたは他のフレームワークを使用する予定ですか?すでに述べたように、さまざまなフレームワークは、モデルを永続化するための他のアフォーダンスを提供します。基本的に、それらの大多数はファイルに書き込みます。実際、数ギガバイトはそれほど多くありません。パフォーマンスを向上させるために、サーバーのSSDドライブに保存することもできます。
mapto

現在検討している手動の介入をスクリプトで自動化することは可能だと思いませんか?
mapto

はい、私は主にscikit学習の使用について話しています。
Manikant Kella

うーん、それは可能かもしれませんが、私のモデルまたはシステムがトレーニングされた新しいデータでうまく機能しているかどうかを自動化するにはどうすればよいでしょうか。そのような場合に方法はありますか?
Manikant Kella
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.