Python機械学習モデルを保存するためのベストプラクティス


24

機械学習モデルを保存、保存、共有するためのベストプラクティスは何ですか?

Pythonでは、通常、pickleまたはjoblibを使用して、モデルのバイナリ表現を保存します。私の場合、モデルのサイズは最大100Moになります。また、設定しない限り、joblibは1つのモデルを複数のファイルに保存できますcompress=1/programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the-コレ)。

しかし、モデルへのアクセス権を制御し、異なるマシンのモデルを使用できるようにしたい場合、それらを保存する最良の方法は何ですか?

いくつかの選択肢があります。


これを行う効率的な方法はありましたか?
iNet

回答:



2

私は長年にわたってこの問題に直面していました(そして今日もなお直面しています)。詳細な要件を提供しないと、真剣な答えを期待できないというのが本当にあります。私は自分の仕事の例を説明します。

  • 私は定期的に同じモデルの複数のバリエーションを試し、どのパラメーターが最適かを見つけます。後で評価に使用される出力を生成する単一のモデルをトレーニングするには数日かかります。そのために、モデルをサーバーまたは同僚間で簡単に共有できるため、モデルの単純なNumPyダンプを作成します。pickleは、モデルが学習したパラメーターよりもはるかに多く(クラスのインスタンス、ライブラリ...)を保存するため、避けるべきです。Python環境がわずかに異なる場合、別のマシンにモデルをインポートしても機能しない場合があります。

  • 実稼働環境でモデルをプッシュする場合、1)サーバーが故障した場合に高速にロードできるモデルのバージョン(通常はバイナリ形式で、ニューラルネットワークの重みなどの必要なもののみを保存する)と2)aモデルをRAM内に保持して、APIリクエストを迅速に処理する方法。

2つの異なる目的のために、3つの異なる形式が必要です。次に、より一般的に言えば、形式の選択は使用するツールによって異なります。たとえば、TensorFlowを使用している場合、TensorFlow Servingシステムに 興味があるかもしれません


1

さらに2つのアプローチを提案したいと思います。

  1. それらをドキュメントストレージ(mongoDBなど)に保存します -この方法は、モデルファイルが16Mb(またはjoblibシャードが)未満の場合に推奨され、モデルをバイナリデータとして保存できます。さらに、一部のMLライブラリはjson(LightGBMなど)でのモデルのエクスポートとインポートをサポートしているため、ドキュメントストレージへの保存に最適です。利点:モデル生成の追跡とアクセスが容易、欠点:モデルオブジェクトが大きすぎる場合、物事が煩雑になります。

  2. モデルをオブジェクトストレージ(Amazon S3など)に保存します -この方法は、モデルが非常に大きい場合に適しています。この場合、無制限のストレージとかなり簡単なAPIが得られ、追加料金がかかります。利点:無制限のスペースと任意のファイル形式を保存する機能。短所:コスト、およびそれを正しく行うには、独自の追跡システムを開発する必要があるという事実。

がんばろう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.