Herokuへの機械学習モデルのデプロイ
公開: 2021-01-05機械学習は、データの抽出、クリーニング、重要な機能の選択、モデルの構築、検証、展開を含む継続的なプロセスであり、目に見えないデータでモデルをテストします。
データエンジニアリングとモデル構築の初期段階はかなり退屈なプロセスであり、データに多くの時間を費やす必要がありますが、モデルの展開は単純に見えるかもしれませんが、これは重要なプロセスであり、対象とするユースケースによって異なります。 モデルは、モバイルユーザー、Webサイト、スマートデバイス、またはその他のIoTデバイスを介して提供できます。
モデルをメインアプリケーションに統合するか、SDLCに含めるか、クラウドに含めるかを選択できます。 クラウドプラットフォームでモデルをデプロイして実行するためのさまざまな戦略があります。これは、Google Cloud Platform、Azure、Amazon Web Services、Herokuなどのツールが利用できるため、ほとんどの場合に適したオプションのようです。
モデルをPub/Subの方法で公開することを選択できますが、モデルを本番環境にデプロイするには、API(アプリケーションプログラムインターフェイス)またはRESTラッパーがより一般的に使用されます。 モデルの複雑さが増すにつれて、機械学習エンジニアとして一般に知られているそのような状況を処理するためにさまざまなチームが割り当てられます。 これだけの紹介で、機械学習モデルをAPIとしてHerokuプラットフォームにデプロイする方法を見てみましょう。
目次
Herokuとは何ですか?
Herokuは、開発者がサーバーレスコードをホストできるようにするサービスツールとしてのプラットフォームです。 これが意味するのは、特定の目的のためにどちらか一方に役立つスクリプトを開発できるということです。 Herokuプラットフォーム自体は、サービスツールとしてのインフラストラクチャであるAWS(Amazon Web Services)でホストされています。
Herokuは無料のプラットフォームですが、稼働時間は500時間に制限されています。 アプリはdynoとしてホストされ、30分間操作がないとスリープモードになります。 これにより、アプリが非アクティブなときにすべての空き時間を消費しないようになります。 プラットフォームは、Ruby、Java、PHP、Python、Node、Go、Scalaをサポートしています。 ほとんどのデータサイエンスの初心者は、このプラットフォームを参照して、クラウドでモデルを実行およびデプロイした経験があります。

モデルの準備
このプラットフォームに気付いたので、同じモデルを準備しましょう。 機械学習モデルがトレーニングされると、対応するパラメータがメモリ自体に保存されます。 このモデルを直接ロードし、見えないデータを渡し、出力を取得できるように、このモデルを別のファイルにエクスポートする必要があります。
通常、Pickle、Pythonオブジェクトモデルをビットストリームに変換するjob-lib、ONNX、PMML、またはH20.aiエクスポート形式でありモデルをJavaアプリケーションにも統合できるMOJOなど、さまざまなモデル形式が実行されます。 簡単にするために、pickleを介してモデルをエクスポートすると、次の方法でエクスポートできると考えてください。
ピクルスをインポート
Pkl_Filename =“ model.pkl”
open(Pkl_Filename、'wb')をファイルとして使用:
pickle.dump(model_name、file)
これで、モデルは別のファイルに保存され、APIに統合して使用できるようになります。
サーバーロジック
予測のためにこのモデルへのアクセスを提供するには、すべてのクライアント側の要求をリダイレクトして処理できるサーバーコードが必要です。 PythonはWeb開発フレームワークをサポートしており、有名なのはFlaskです。
これは、数行のコードでサーバーをセットアップできるようにする最小限のフレームワークです。 最小限のパッケージであるため、認証やRESTfulな性質などの多くの機能は明示的にサポートされていません。 これらは拡張機能と統合できます。
もう1つのオプションは、新しくリリースされたフレームワークFastAPIを選択することです。 これは、はるかに高速で、スケーラブルで、十分に文書化されており、多くの統合パッケージが付属しています。 とりあえず、フラスコを使って簡単な予測ルートを設定しましょう。
フラスコからのインポートフラスコ
ピクルスをインポート
app = Flask(__ name__)
open(Filename、'rb')をファイルとして使用:

モデル=pickle.load(file)
@ app.route('/ predict'、methods = ['GET'、'POST'])
def pred():
#クエリまたはペイロードのいずれかを介してパラメータを取得するロジックを実装する
予測=model.predict([取得したパラメーター])
戻り値{'結果':予測}
これは、サーバーロジックの進め方を示す大まかなコードです。 より良い実装のために選択できるさまざまな戦略があります。
チェックアウト:Streamlitを使用してMLモデルをデプロイするためのガイド
展開ファイルの設定
Herokuには、アプリケーションに必要なすべての依存関係のリストが必要です。 これは要件ファイルと呼ばれます。 これは、アプリケーションが使用するすべての外部ライブラリをリストしたテキストファイルです。 この例では、ファイルの内容には次のものが含まれます。
フラスコ
sklearn
numpy </ p>
パンダ
gunicorn
最後のライブラリであるgunicornを使用すると、HTTPトラフィックを処理するクライアントとサーバーのインターフェイスを形成するWSGIサーバーの実装をセットアップできます。 Herokuは、アプリのエントリポイントを指定するために使用されるProcfileと呼ばれる別のファイルも要求します。 サーバーロジックファイルがmain.pyという名前で保存されていることを考慮して、このファイルに配置するコマンドは次のとおりです。
ウェブ:gunicorn main:app

「web」は私たちが展開しているdynoのタイプであり、「gunicorn」はサーバーコード「main」にリクエストを渡し、「main」で「app」を検索するメディエーターとして機能します。 アプリはここですべてのルートを処理します。
最終展開
すべての準備が完了しました。次に、クラウドでアプリを実行します。 Herokuにない場合はアカウントを作成し、[アプリの作成]をクリックして、任意のリージョンを選択します。 その後、GitHubアカウントに接続し、サーバーコード、model.pkl、requirements.txt、Procfileのファイルを含むリポジトリを選択します。
この後、デプロイブランチを押すだけです! 成功した場合は、生成されたリンクにアクセスすると、アプリが稼働しているはずです。 これで、appname.herokuapp.com / predict routeにリクエストを送信でき、予測が表示されます。 機械学習モデルの詳細をご覧ください。
結論
これは、Herokuとは何か、なぜそれが必要なのか、Flaskを使用してモデルをデプロイする方法の紹介でした。 データパイプライン、ストリーミングなどのより高度な機能を提供するホスティングプラットフォームはたくさんありますが、無料のプラットフォームであるHerokuは、展開を味わいたいだけの初心者には適しています。
機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題、IIIT-を提供します。 B卒業生のステータス、5つ以上の実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。
Herokuプラットフォームを使用することの欠点は何ですか?
プラットフォームのドキュメントは広範ではないため、Herokuは大企業には理想的ではありません。 もう1つの問題は、読み取り専用ファイルシステムです。これにより、フィルムや高解像度写真などのかさばるファイルのアップロードを処理するのが困難になります。 Herokuは、カスタマイズの量が限られているサービスとしてのプラットフォームプロバイダーです。 Herokuは米ドルでの支払いのみを受け付け、EURなどの他の通貨では受け付けません。 自国通貨での支払いを好む事業主にとって、これは小さな不便かもしれません。 さらに、CRE(Common Runtime Environment)内では、Herokuは静的IPアドレスを提供しません。
HerokuはAWSとどう違うのですか?
AWSでのデプロイ手順は単純ではなく、その結果、複雑さの点で特にユーザーフレンドリーではありません。 Herokuは、操作が簡単ですぐに使用できる環境を提供します。 Herokuは、人間の介入が少なくて済むため、AWSよりもコストがかかります。 AWSは高いまたは非常に高い計算ニーズを処理できますが、Herokuは適度な計算要求を処理できます。 Herokuは、AWSとは異なり、定期的なインフラストラクチャのメンテナンスを必要としません。 AWSとHerokuはどちらも、デプロイに関しては非常に高速です。
Herokuを無料でどのくらい使用できますか?
Herokuアカウントには、無料アプリで使用できる無料のdyno時間のプールがあります。 これにより、無料プログラムの18時間の制限が置き換えられ、必要に応じて1日24時間機能できるようになります。 新しいアカウントには550時間の無料ダイノアワーがあり、クレジットカードで本人確認を行うとさらに450時間かかります。 Herokuは、テクノロジーを学び、始めるのに役立つ無料のプランを提供します。 多くのHerokuアドオンは、Heroku ButtonsやBuildpackと同様に、無料のプランを提供します。