MLアプリケーション・プロジェクト設定

サンプルMLアプリケーションのインフラストラクチャを作成した後、サンプルのMLアプリケーション・プロジェクトをテンプレートとして使用して、独自のMLアプリケーションの構築、デプロイおよび操作を開始できます。

このプロジェクトには開発のベスト・プラクティスが含まれ、MLアプリケーション開発を簡素化するツールであるmlapp CLIが用意されています。MLアプリケーションを作成するには、mlapp CLI、Terraform、OCI SDKまたはOCI CLIを使用する必要があります。コンソールでMLアプリケーションを作成することはできませんが、MLアプリケーションとその詳細を表示できます。

サンプルMLアプリケーション・プロジェクトでプロジェクトを開始することで、MLアプリケーション実装を本番に進めることができます。このプロジェクトは、組織がアプリケーションを本番環境に正常にデプロイするための支援から得られた経験を使用して構築されています。

サンプルMLアプリケーション・プロジェクトは、sample-projectから入手できます。

このプロジェクトをクローニングして、MLアプリケーション実装の基盤として使用します。

このプロジェクトには、README.mdファイルにドキュメントが含まれており、プロジェクトとそのコンポーネントに関する詳細情報を確認できます。

プロジェクト構造

プロジェクトは、次の2つの主要部分で構成されています。

  • インフラストラクチャ・フォルダは、サンプルのMLアプリケーションが依存するリソースの作成を自動化します。
  • MLアプリケーション・フォルダには、構成、実装、mlapp CLIなど、サンプルのMLアプリケーションが含まれています。

前提条件リソースの構成

MLアプリケーションの構築およびデプロイを開始する前に、サンプルのMLアプリケーションが依存する必要なリソース(ログ、ログ・グループ、データ・サイエンス・プロジェクト、サブネットなど)を作成する必要があります。このプロセスは、次のステップに従って自動化できます。

  1. 環境フォルダを準備します。
    デフォルトのdev環境フォルダ(environments/dev)を使用するか、テンプレートとして使用してカスタム環境を作成できます。カスタム環境を作成するには:
    1. 開発環境フォルダ(environments/dev)のコピーを作成します。
    2. コピーしたフォルダの名前を環境の名前と一致するように変更します。
  2. 環境を構成します。
    1. 環境フォルダ(environments/devなど)に移動します。
    2. input_variables.tfvarsファイルを編集して、環境設定を構成します。
  3. Terraformを実行してリソースを作成します。
    1. 環境フォルダでTerraformを初期化します:
      terraform init
    2. 構成を適用してリソースを作成します。
      terraform apply -var- file input_variables.tfvars
    3. 必要に応じて、作成されたリソースを破棄します。
      terraform destroy -var- file input_variables.tfvars
    ノート

    環境が分離される可能性があるため、異なる環境間でリソースを再利用しないでください。たとえば、開発環境とQA環境間でリソースを共有すると、開発中に問題が発生し、QA環境が使用できなくなり、本番へのデプロイメントが遅延する可能性があります。

MLアプリケーション環境の構成

  1. 環境フォルダを準備します。
    デフォルトのdev環境フォルダ(environments/dev)を使用するか、テンプレートとして使用してカスタム環境を作成できます。カスタム環境を作成するには:
    1. 開発環境フォルダ(environments/dev)のコピーを作成します。
    2. コピーしたフォルダの名前を環境の名前と一致するように変更します。
  2. 環境を構成します。
    環境構成フォルダで:
    1. env-config.yamlファイルを編集します。
    2. testdata-instance.jsonファイル(アットマーク('@')の後にオブジェクト・ストレージ・ネームスペースをテナンシと一致するように更新する必要があります)を編集します。
  3. リソース参照を定義します。
    1. 環境構成フォルダのarguments.yamlファイルを編集して、アプリケーションが依存するリソースへの参照を定義します。
    2. infrastructure/environments/<your environment>フォルダで、次を実行します。
      terraform output
    3. 出力(最終行を除く)をコピーしてarguments.yamlに貼り付け、=:に置き換えます。

mlapp CLIの構成と初期化

  1. MLアプリケーション・プロジェクトを構成します。
    1. アプリケーション・フォルダにナビゲートします。
    2. application-def.yamlファイルを編集して、MLアプリケーションとその実装の名前と説明を定義します。
    3. default_envを作成して環境をデフォルトとして設定します(これにより、mlapp CLIの使用時にコマンドラインで環境を指定する必要がなくなります)。ml-application/default_env.exampleml-application/default_envにコピーし、そこに環境名を格納できます。
  2. 環境を初期化します。
    ml-applicationフォルダで、次を実行します。
    source ./mlapp init

    このコマンドは、mlappスクリプトをPATH変数に追加し、./mlappのかわりにmlappを使用してCLIを実行できます。

アプリケーションのビルドとデプロイ

すべてを構成して、アプリケーションの構築およびデプロイを開始できるようになりました。

ノート

次を実行して、mlapp CLIコマンドについて学習します:
mlapp -h
  1. アプリケーションを構築します。
    mlapp build
  2. アプリケーションをデプロイします。
    mlapp deploy
  3. アプリケーションをインスタンス化します。
    mlapp instantiate
  4. トレーニング・パイプラインの実行をトリガーします。
    mlapp trigger
  5. 予測サービスをテストします。
    mlapp predict
mlapp CLIコマンドを実行した後、OCIコンソール/分析およびAI/機械学習の下のMLアプリケーションに移動して結果を確認します。

定義済タグとフリーフォーム・タグの使用

サンプル・アプリケーションは、定義済タグとフリーフォーム・タグの両方を使用して、テナントの分離を確実にし、ランタイム・リソース(特にモデル)の追跡を有効にする方法を示します。

定義済タグは、テナント固有の識別子をモデル・デプロイメント、ストレージ・バケット、モデルなどのリソースに関連付けるために使用されます。
バケットへの定義済タグの追加
resource "oci_objectstorage_bucket" "data_storage_bucket" {
  compartment_id = var.app_impl.compartment_id
  namespace      = data.oci_objectstorage_namespace.this.namespace
  name           = "ml-app-fetal-risk-bucket-${var.app_instance.id}"
  access_type    = "NoPublicAccess"
 
  # To allow Instance (tenant) isolation
  defined_tags   = {"MlApplications.MlApplicationInstanceId" = var.app_instance.id}
}
コード(モデルなど)から動的に作成されるランタイム・リソースの場合は、定義済のタグとフリーフォーム・タグの両方を追加します。フリーフォーム・タグはリソースをインスタンスにリンクし、インスタンスの削除時に自動削除を有効にします。
定義済タグおよびフリーフォーム・タグをモデルに追加します
model_id = xgb_model.save(display_name='fetal_health_model',
                          # needed for tenant isolation
                          defined_tags={"MlApplications": {"MlApplicationInstanceId": instance_id}},
                          # needed for ML App to be able to track created model
                          freeform_tags={"MlApplicationInstance": instance_id})