TorchServe の詳細な説明: モデルを実稼働環境にデプロイするための 5 つのステップ

特色图像

  内容紹介:

2020 年 4 月のリリース以来、TorchServe は 2 年以上の開発を経て、より成熟し、安定したものになりました。この記事では、TorchServe について包括的に紹介します。

この記事は最初に WeChat 公開アカウントから公開されました。PyTorch 開発者コミュニティ

PyTorch を使用したより実践的なモデル展開の実践については、次のサイトを参照してください。 オープンベイズ.com 得る

TorchServe は、実稼働環境にモデルをデプロイするための PyTorch の推奨ソリューションです。これは、HTTP または HTTPS API を使用してモデルをカプセル化する、高性能で拡張可能なツールです。

TorchServe のフロントエンドは Java で実装されており、展開モデルへのワーカーの割り当て、クライアントとサーバー間の通信の責任など、さまざまなタスクを処理できます。その Python バックエンドは主に推論サービスの処理を担当します。

図 1: トーチサーブのパフォーマンス チューニング プロセスの概要

さらに、複数のモデルの提供と AB テストのバージョン管理、動的バッチ処理、ロギング、メトリクスもサポートします。4 つのパブリック API には次のものが含まれます。

* 推論 API:デフォルトでローカルホスト経由でアクセスできるポート 8080 をリッスンし、TorchServe 構成で構成でき、モデルからの予測の取得をサポートします。

説明 API:内部で Captum を使用して、デプロイ中のモデルに指示を提供し、ポート 8080 でリッスンします。

管理API:登録または登録解除を許可し、モデルを説明します。また、ユーザーはモデルをデプロイするワーカーの数を増減することもできます。

* メトリクスAPI:デフォルトではポート 8082 をリッスンし、ユーザーがデプロイされているモデルを監視できるようにします。

TorchServe は、バッチ推論と展開モデルの複数のワーカーをサポートしています。ユーザーがモデルの展開を拡張し、ピーク時のトラフィックを処理できるようにします。この拡張は、管理 API と構成ファイルの設定を通じて実現できます。さらに、メトリック API は、デフォルトおよびカスタム メトリックを通じてモデルのデプロイメントを監視できます。

リクエストを受信するためのキューの長さ、入力バッチの最大待機時間、その他のプロパティなどのその他の詳細設定。すべては設定ファイルを通じて設定できます (起動時にTorchServeに渡すことができます)。

TorchServe を使用してモデルをデプロイする手順は次のとおりです。

1.TorchServe、モデル アーカイバ、およびその他の依存関係をインストールします。

2. 適切なデフォルト ハンドラー (画像分類など) を選択するか、カスタム ハンドラーを作成します。

3.Torcharchive を使用してモデル アーティファクトとハンドラーを 1 つにパッケージ化する .mar  ファイルを作成してモデル ストアに置きます

4. モデルのデプロイを開始する

5. 推論を実行する

トーチサーブ プロジェクトのアドレス:

https://github.com/pytorch/serve/blob/master/README.md#install-torchserve-and-torch-model-archiver

ハンドラー、TorchServe の重要な概念

TorchServe バックエンドは、ハンドラーを使用してモデルをロードし、受信したデータを前処理し、推論を実行し、応答を後処理します。 TorchServe のハンドラーは、 PPythonスクリプト、すべてのモデルの初期化、前処理、推論、後処理ロジックが含まれています。

また、TorchServe は、画像分類、セグメンテーション、オブジェクト検出、テキスト分類などのアプリケーションに使用できる、すぐに使用できるハンドラーも提供します。さらに、デフォルトのハンドラーが現在のケースをサポートしていない場合に備えて、カスタム ハンドラーもサポートします。

カスタム ハンドラーは優れた柔軟性を提供します。これにより、TorchServe がマルチフレームワーク サービス ツールになる可能性があります。カスタム ハンドラーを使用すると、カスタム ロジックでモデルを初期化できるほか、このモデルが他のフレームワーク (ONNX など) からモデルをロードできるようになります。

TorchServe ハンドラーは 4 つの主要な関数で構成されます。機能初期化する推論  そして 前処理、各関数はリストを返します。

次のコード スニペットは、カスタム ハンドラーの例です。カスタム ハンドラーは、TorchServe の BaseHandler を継承します。どの main 関数もオーバーライドできます。この例では、ハンドラーを使用して Detectron2 モデルをロードし、図形検出の問題を解決する方法を示します。モデルはTorchscriptにエクスポートされて使用されています  mod.half()  FP16 推論を実行します。

編集

メトリクス、TorchServe の主要な概念

モデルを実稼働環境にデプロイする場合は、そのパフォーマンスの監視に重点を置く必要があります。 TorchServe はシステムレベルのメトリクスを定期的に収集し、カスタム メトリクスの追加を可能にします。

システムレベルのメトリクスには、CPU 使用率、ホスト上の利用可能および使用済みのディスク容量とメモリ、さまざまな応答コードを持つリクエストの数が含まれます。(例: 200 ~ 300、400 ~ 500、および 500 以上)。カスタム メトリックはカスタム メトリック API に追加できます。

カスタムメトリクスAPI:

https://github.com/pytorch/serve/blob/master/docs/metrics.md#custom-metrics-api

TorchServe は、これら 2 つのメトリクス セットを異なるログ ファイルに記録します。デフォルトでは、メトリクスは次の場所で収集されます。

システムメトリクス: log_directory/ts_metrics.log

カスタム指標:ログディレクトリ/model_metrics.log

TorchServe のメトリクス API は、デフォルトでポート 8082 をリッスンし、ユーザーが収集されたメトリクスをクエリおよび監視できるようにします。デフォルトのメトリクス エンドポイントは、Prometheus 形式のメトリクスを返します。 CURL リクエストを使用してメトリクスをクエリしたり、Prometheus Server をエンドポイントにポイントして Grafana for Dashboard を使用したりできます。

curl を使用してメトリクスをリクエストします。

curl http://127.0.0.1:8082/metrics

mtail を使用してログに記録されたメトリクスを Prometheus にエクスポートする例:https://github.com/google/mtail

バッシュボードでこれらのメトリクスを追跡することにより、オフライン ベンチマークの実行中に時々現れる、または発見が難しいパフォーマンスの低下を監視できます。

次は何だろう

以上がTorchServeについての説明です。次のセクションでは、特定のケースを使用して、運用環境へのモデルの展開に影響を与える特定の要因と、TorchServe を使用してアニメーション描画アプリを調整する方法について説明します。

さらに詳しい学習教材や実践的なチュートリアルについては、公式アカウントをフォローしてください。PyTorch 開発者コミュニティ。実際のチュートリアルを視聴するには、次のサイトにアクセスしてください。 オープンベイズ.com  実践的な操作。 ​