モデル・デプロイメント

データ・サイエンス・モデル・デプロイメントの操作方法を学習します。

モデル・デプロイメントは、OCI Data Scienceサービスの管理対象リソースであり、機械学習モデルをOCIのHTTPエンドポイントとしてデプロイするために使用します。リアルタイムで予測を行うWebアプリケーション(HTTP APIエンドポイント)として機械学習モデルをデプロイすることは、モデルを本番稼働させる最も一般的な方法です。HTTPエンドポイントは柔軟であり、モデル予測のリクエストに対応できます。

図1. モデル・デプロイメントのフロー
モデルをノートブック・セッションでトレーニングし、モデル・カタログを保存および格納し、最後にモデル・デプロイメント・リソースを使用してモデルをデプロイするフロー。

トレーニング

モデルのトレーニングは、モデルをデプロイする最初のステップです。ノートブック・セッションおよびジョブを使用して、オープン・ソースおよびOracle AutoMLモデルをトレーニングします。

保存と格納

次に、トレーニング済モデルをモデル・カタログに格納します。モデルをモデル・カタログに保存するには、次のオプションがあります:

  • ADS SDKには、オープン・ソース・モデルを指定し、モデル・アーティファクトを準備し、そのアーティファクトをモデル・カタログに保存するためのインタフェースが用意されています。
  • OCIコンソール、SDKおよびCLIを使用して、モデル・アーティファクトをモデル・カタログに保存できます。

  • scikit-learn、TensorFlow、Kerasなど、様々なフレームワークを使用します。

モデル・デプロイメントでは、runtime.yamlモデル・アーティファクト・ファイルに推論conda環境を指定する必要があります。この推論conda環境には、すべてのモデル依存関係が含まれており、モデル・サーバー・コンテナにインストールされます。データ・サイエンスconda環境のいずれか、または作成した公開済環境を指定できます。

モデル・デプロイメント

モデルをモデル・カタログに保存すると、モデル・デプロイメント・リソースとしてデプロイできるようになります。このサービスは、Pythonランタイム環境で実行されるモデルをサポートし、その依存関係をconda環境にパッケージ化できます。

ノートブック・セッションでOCIコンソール、OCI SDK、OCI CLIおよびADS SDKを使用して、モデルのデプロイおよび呼出しを行えます。

モデル・デプロイメントは、次の主要なコンポーネントを使用して、モデルをHTTPエンドポイントとしてデプロイします:

図2. モデル・デプロイメントの主要コンポーネント
モデル・デプロイメント・リソースの主要なコンポーネントを示します。
Load Balancer。

モデル・デプロイメントの作成時に、Load Balancerを構成する必要があります。Load Balancerは、1つのエントリ・ポイントから仮想マシンのプール(VM)で実行されている多数のモデル・サーバーにトラフィックを分散する自動化された方法を提供します。Load Balancerの帯域幅はMbpsで指定され、静的値である必要があります。Load Balancerの帯域幅を変更するには、モデル・デプロイメントを編集します。

モデル・サーバー、conda環境およびモデル自体をホストするVMインスタンスのプール。

モデル・サーバーのコピーは、VMのプール内の各コンピュート・インスタンスに作成されます。

推論conda環境のコピーと選択したモデル・アーティファクトも、プール内の各インスタンスにコピーされます。プール内の各VMインスタンスのOCPUごとに2つのモデルのコピーがメモリーにロードされます。たとえば、VM.Standard2.4インスタンスを選択してモデル・サーバーを実行する場合、8コピーのモデル(4 OCPU x 2 = 8)がメモリーにロードされます。モデルの複数のコピーは、VMメモリー内のモデル・レプリカ間でリクエストを分散することによって、モデル・エンドポイントに対する同時リクエストを処理するのに役立ちます。メモリー内のモデルのレプリカを含めるのに十分な大きさのメモリー・フットプリントを持つVMシェイプを選択します。サイズがMBまたは低GBのほとんどの機械学習モデルでは、メモリーは問題にならない可能性があります。

Load Balancerは、モデル・エンドポイントに対するリクエストをプール内のインスタンス間で分散します。小さいながら大きいVMを選択するのではなく、小さいVMシェイプを使用して、多数のインスタンスでモデルをホストすることをお薦めします。

モデル・カタログ内のモデル・アーティファクト。

モデル・デプロイメントには、モデル・カタログに格納され、モデルがアクティブ状態であるモデル・アーティファクトが必要です。モデル・デプロイメントでは、モデル・アーティファクトのscore.pyファイルで定義されているpredict()関数を公開します。

モデル・ランタイム依存関係を持つConda環境。

conda環境は、モデルに必要なすべてのサードパーティのPython依存関係(Numpy、Dask、XGBoostなど)をカプセル化します。Python conda環境は、Pythonバージョン3.73.83.93.10および3.11をサポートしています。INFERENCE_PYTHON_VERSIONで指定するPythonバージョンは、PDBパックの作成時に使用されるバージョンと一致する必要があります。

モデル・デプロイメントでは、モデル・アーティファクトのruntime.yamlファイルに定義されている推論conda環境のコピーをプルして、モデルとその依存関係をデプロイします。モデル・デプロイメント環境に関する関連情報は、runtime.yamlファイルのMODEL_DEPLOYMENTパラメータの下にあります。MODEL_DEPLOYMENTパラメータは、ノートブック・セッションでADSを使用してモデルを保存すると自動的に取得されます。モデルをカタログに保存し、OCI SDK、CLIまたはコンソールを使用してデプロイするには、これらのパラメータを含むruntime.yamlファイルをモデル・アーティファクトの一部として指定する必要があります。

ノート

runtime.yamlファイルなしでモデル・カタログに保存されたすべてのモデル・アーティファクトの場合、またはMODEL_DEPLOYMENTパラメータがruntime.yamlファイルにない場合、デフォルトのconda環境がモデル・サーバーにインストールされ、モデルのロードに使用されます。使用されるデフォルトのconda環境は、Pythonバージョン3.8でのPython 3.8上のCPU用一般機械学習(バージョン2.0)です。

次のconda環境を使用します:

データ・サイエンスconda環境

conda環境のリストは、Conda環境の表示にあります。

次の例では、runtime.yamlファイルは、Python 3.7上のCPU用ONNX 1.10INFERENCE_ENV_PATHで定義されたオブジェクト・ストレージ・パスから公開済のconda環境をプルするようにモデル・デプロイメントに指示します。

MODEL_ARTIFACT_VERSION: '3.0'
MODEL_DEPLOYMENT:
  INFERENCE_CONDA_ENV:
    INFERENCE_ENV_SLUG: envslug
    INFERENCE_ENV_TYPE: data_science
    INFERENCE_ENV_PATH: oci://service-conda-packs@id19sfcrra6z/service_pack/cpu/ONNX 1.10 for CPU on Python 3.7/1.0/onnx110_p37_cpu_v1
    INFERENCE_PYTHON_VERSION: '3.7'
公開されたconda環境

モデル・デプロイメントで使用するconda環境を作成および公開できます。

次の例では、runtime.yamlファイルは、INFERENCE_ENV_PATHで定義されたオブジェクト・ストレージ・パスから公開済のconda環境をプルするようにモデル・デプロイメントに指示します。そうすると、モデル・サーバーとモデル自体をホストしているプールのすべてのインスタンスがインストールされます。

MODEL_ARTIFACT_VERSION: '3.0'
MODEL_DEPLOYMENT:
  INFERENCE_CONDA_ENV:
    INFERENCE_ENV_SLUG: envslug
    INFERENCE_ENV_TYPE: published
    INFERENCE_ENV_PATH: oci://<bucket-name>@I/<prefix>/<env>
    INFERENCE_PYTHON_VERSION: '3.7'

runtime.yamlファイルなしでカタログに保存されたすべてのモデル・アーティファクトの場合、モデル・デプロイメントでは、デフォルトのconda環境もモデル・デプロイメントに使用されます。モデル・デプロイメントでは、作成または変更して公開したデータ・サイエンスconda環境またはconda環境をプルすることもできます。

ゼロ・ダウンタイム運用

モデル・デプロイメントのゼロ・ダウンタイム運用は、モデル推論エンドポイント(予測)が中断や不安定さなしでリクエストを継続的に処理できることを意味します。

モデル・デプロイメントでは、ダウンタイムなしを維持しながら実行できる一連の操作がサポートされます。この機能は、モデル・エンドポイントを使用するすべてのアプリケーションで重要です。モデルがアクティブな状態でリクエストを処理している場合、ゼロ・ダウンタイム運用を適用できます。これらのゼロ・ダウンタイム操作を使用して、ダウンタイムを防止しながら、モデルを別のものに交換し、VMシェイプおよびロギング構成を変更します。

モデル・デプロイメントからログを取得するためのロギング統合

モデル・デプロイメントをロギング・サービスと統合できます。このオプション統合を使用して、モデルからログを生成し、これらのログを検査します。

モデル・ランタイム依存関係があるカスタム・コンテナ

カスタム・コンテナは、モデルが推論に必要なすべてのサードパーティ依存関係をカプセル化します。また、Triton推論サーバー、TensorFlowサービス、ONNXランタイム・サービスなどの優先推論サーバーも含まれます。

GPU推論

Graphical Processing Unit inferenceは、LLaMaやGenerative Pre-trained Transformersなどの計算集中型モデルに広く使用されています。

カスタム・エグレス
ジョブおよびノートブックのカスタム・エグレスと同様に、サービス管理ネットワーキングまたは顧客管理ネットワーキングから選択できます。
プライベート・エンドポイント

セキュリティと制御を強化するために、プライベート・ネットワーク(プライベート・モデル・デプロイメント)を介してモデル・デプロイメントにアクセスできます。プライベート・エンドポイントのサポートにより、推論トラフィックはプライベート・ネットワーク内に安全に保持されます。詳細は、プライベート・エンドポイントの作成およびモデル・デプロイメントの作成の項を参照して、プライベート・エンドポイントを含むモデル・デプロイメントを構成します。

モデル・デプロイメントの詳細

プロジェクトを選択すると、ノートブック・セッションおよびその他のリソース(モデル・デプロイメントなど)のリストを含むプロジェクトの詳細ページが表示されます。

「モデル・デプロイメント」を選択して、選択したコンパートメントのモデル・デプロイメントの詳細ページに移動し、次のことができます:

  • モデルのデプロイメントを作成します。

  • モデル・デプロイメントを選択して、その詳細を表示して操作します。

  • 「アクション」メニューを使用して、詳細の表示、モデル・デプロイメントの編集、移動、モデル・デプロイメントの削除を行います。

  • OCID: リソースのOCID。OCIDの短縮バージョンが表示されますが、「表示」および「非表示」を使用してOCIDの表示を切り替えることができます。「コピー」リンクを使用して、OCID全体をクリップボードに保存して別の場所に貼り付けます。たとえば、ファイルに貼り付けて保存し、モデル・スクリプトで使用できます。

  • 「リスト範囲」フィルタを使用して、別のコンパートメントにある選択したプロジェクトに関連付けられているモデル・デプロイメントを表示します。

  • 「状態」リストを使用して、ステータスでモデル・デプロイメントをフィルタします。デフォルトでは、すべてのステータス・タイプが表示されます。

  • モデル・デプロイメントに適用されたタグの場合、「タグ・フィルタ」の横にある「追加」または「クリア」をクリックして、モデル・デプロイメントをさらにフィルタできます。

  • モデル、モデル・デプロイメント、ノートブック・セッションなど、他のデータ・サイエンス・リソースを選択します。