モデル・カタログでの大規模アーティファクトのサポート

モデル・アーティファクトの最大サイズは6 GBです。

モデルのアップロードのコンソール・オプションでは、最大100MBのサイズのモデル・アーティファクトのみがサポートされます。大規模なモデル・アーティファクトをアップロードするには、次のすべての例でPythonおよびADSを使用します。ラージ・モデル・アーティファクトは、オブジェクト・ストレージ・バケットからモデル・カタログのサービス・バケットにアーティファクトをコピーすることでサポートされます。

ADSを使用するための準備ステップ

まず、この例が動作するユーティリティ・メソッドをいくつか作成します。

import os
import oci
import random
import warnings
import numpy as np

import ads
from ads.catalog.model import ModelCatalog
from ads.common.model_metadata import UseCaseType
from ads.model.generic_model import GenericModel

from numpy import array
from numpy import ndarray
from shutil import rmtree

ads.set_auth("resource_principal")
warnings.filterwarnings('ignore')

# ads.set_auth("api_key")
# ads.set_debug_mode(False)
# auth = {"config": oci.config.from_file(os.path.join("~/.oci", "config"))}

from sklearn.datasets import make_classification
import pandas as pd
import os

class Size:
    MB_20 = 6000
    MB_200 = 60000
    MB_2000 = 600000    

def generate_large_csv(size: Size = Size.MB_20, file_path: str = "./large_csv_file.csv"):
    X_big, y_big = make_classification(n_samples=size, n_features=200)
    df_big = pd.concat([pd.DataFrame(X_big), pd.DataFrame(y_big)], axis=0)
    df_big.to_csv(os.path.join(file_path))

次に、この例で使用するサンプル・モデルを作成し、大規模なCSVファイルをモデルに移入します。この例では、20 MBのファイルを使用しますが、最大6 GBのファイルを使用します。

class Square:
    def predict(self, x):
        x_array = np.array(x)
        return np.ndarray.tolist(x_array * x_array)
    
model = Square()


artifact_dir = "./large_artifact/"

generic_model = GenericModel(
    estimator=model, 
    artifact_dir=artifact_dir
)
generic_model.prepare(
    inference_conda_env="dataexpl_p37_cpu_v3",
    training_conda_env="dataexpl_p37_cpu_v3",
    use_case_type=UseCaseType.MULTINOMIAL_CLASSIFICATION,

    X_sample=X,
    y_sample=array(X) ** 2,
    force_overwrite=True
)

generate_large_csv(Size.MB_20, file_path=os.path.join(artifact_dir, "large_csv_file.csv"))

モデル・カタログへの大規模なモデルの保存

2 GBを超えるモデルをサポートするには、Object Storageバケットが必要です。バケットは、コンソールまたはOCI APIを使用して作成できます。

コンソールからオブジェクト・ストレージ・バケットを作成します:

  1. コンソールにサインインします。
  2. ナビゲーション・メニューを開き、「ストレージ」を選択します。「Object Storage & Archive Storage」で、「Buckets」を選択します。
  3. リスト範囲で、コンパートメントを選択します。
  4. 「Create Bucket」を選択します。

    「バケットの作成」フォームに次のフォーム情報を入力します。

    • バケット名: a-bucket-nameを入力します。
    • デフォルトのストレージ層: 「標準」を選択します。

      次のオプションは選択しないでください。

      • 自動階層化の有効化
      • オブジェクト・バージョニングの有効化
      • オブジェクト・イベントの出力
      • コミットされていないマルチパート・アップロードのクリーンアップ
    • 暗号化: 「Oracle管理キーを使用した暗号化」を選択します
  5. 「作成」を選択します。バケットが作成されます。

バケットURIの構成

バケットURIはコンソールのバケット詳細ページにリストされないため、URIを自分で作成する必要があります。バケットURIを作成します:

  1. 次のテンプレートを使用してバケットURIを作成します:

    oci://<bucket_name>@<namespace>/<objects_folder>/.

    バケット名を、作成したものに置き換えます。ネームスペースには、テナンシ名を使用します(例: my-tenancy)。オブジェクト・フォルダの場合は、my-object-folderを使用します。

    指定されたデータの場合、bucket_urioci://my-bucket-name@my-tenancy/my-object-folder/になります。

  2. ラージ・モデル・アーティファクトをアップロードするには、GenericModel.save(...)メソッドに2つの追加パラメータを追加する必要があります。
    • bucket_uri: (str, optional)デフォルトは「なし」です。

      モデル・アーティファクトが一時的にコピーされるオブジェクト・ストレージURI。

      bucket_uriは、サイズが2 GBを超える場合に大規模なアーティファクトをアップロードする場合にのみ必要です。ただし、このメソッドを小さいアーティファクトでも使用できます。例:

      oci://<bucket_name>@<namespace>/prefix/.

    • remove_existing_artifact: (bool, optional)は、デフォルトでTrueに設定されます。

      このメソッドは、オブジェクト・ストレージ・バケットにアップロードされたアーティファクトを削除するかどうかを決定します。

  3. モデル・アーティファクトを取得し、ノートブック・セッションからbucket_uriにコピーします。
  4. 次に、バケット(bucket_uri)からサービス・バケットにアーティファクトをコピーします。

    アーティファクト・サイズが2 GBより大きく、bucket_uriが指定されていない場合、エラーが発生します。

    デフォルトでは、remove_existing_artifact 属性はTrueに設定されています。アーティファクトは、サービス・バケットへのアップロードが成功すると、バケット(bucket_uri)から自動的に削除されます。バケットからアーティファクトを削除しない場合は、remove_existing_artifact = Falseを設定します。

要約すると、プロセスは次のとおりです。

  1. モデル・アーティファクトを準備します。
  2. モデルに関する基本情報をモデル・カタログに保存します。
  3. モデル・アーティファクトをオブジェクト・ストレージ・バケット(bucket_uri)にアップロードします。
  4. モデル・アーティファクトをバケットからモデル・カタログ・サービス・バケットにアップロードします。
  5. remove_existing_artifactパラメータに基づいて、一時アーティファクトをバケットから削除します:
    large_model_id = generic_model.save(
        display_name='Generic Model With Large Artifact',
        bucket_uri=<provide bucket uri>,
        remove_existing_artifact=True
    )

モデル・カタログへの大規模なモデルのロード

2 GBを超えるモデルをロードするには、GenericModel.from_model_catalog(...)メソッドに2つの追加パラメータを追加します。

  • bucket_uri: (str, optional)デフォルトは「なし」です。

    モデル・アーティファクトが一時的にコピーされるオブジェクト・ストレージURI。bucket_uriは、2 GBを超えるサイズの大きいアーティファクトをダウンロードする場合にのみ必要です。このメソッドは、小さいアーティファクトでも機能します。例: oci://<bucket_name>@<namespace>/prefix/

  • remove_existing_artifact: (bool, optional)デフォルトはTrueです。

    このメソッドは、オブジェクト・ストレージ・バケットにアップロードされたアーティファクトを削除するかどうかを決定します。

要約すると、プロセスは次のとおりです。

  1. モデル・カタログ・サービスのオブジェクト・ストレージ・バケットからバケットにモデル・アーティファクトをダウンロードします。
  2. モデル・アーティファクトをバケットからノートブック・セッションにダウンロードします。
  3. remove_existing_artifactパラメータに基づいて、一時アーティファクトをバケットから削除します。
  4. モデル・カタログからモデルに関する基本情報をロードします。

    large_model = GenericModel.from_model_catalog(
        large_model_id,
        "model.pkl",
        "./downloaded_large_artifact/",
        bucket_uri=<provide bucket uri> ,
        force_overwrite=True,
        remove_existing_artifact=True
    )