モデル・カタログでの大規模アーティファクトのサポート
モデル・アーティファクトの最大サイズは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を使用して作成できます。
コンソールからオブジェクト・ストレージ・バケットを作成します:
- コンソールにサインインします。
- ナビゲーション・メニューを開き、「ストレージ」を選択します。「Object Storage & Archive Storage」で、「Buckets」を選択します。
- リスト範囲で、コンパートメントを選択します。
- 「Create Bucket」を選択します。
「バケットの作成」フォームに次のフォーム情報を入力します。
- バケット名: a-bucket-nameを入力します。
- デフォルトのストレージ層: 「標準」を選択します。
次のオプションは選択しないでください。
- 自動階層化の有効化
- オブジェクト・バージョニングの有効化
- オブジェクト・イベントの出力
- コミットされていないマルチパート・アップロードのクリーンアップ
- 暗号化: 「Oracle管理キーを使用した暗号化」を選択します
- 「作成」を選択します。バケットが作成されます。
バケットURIの構成
バケットURIはコンソールのバケット詳細ページにリストされないため、URIを自分で作成する必要があります。バケットURIを作成します:
-
次のテンプレートを使用してバケットURIを作成します:
oci://<bucket_name>@<namespace>/<objects_folder>/
.バケット名を、作成したものに置き換えます。ネームスペースには、テナンシ名を使用します(例:
my-tenancy
)。オブジェクト・フォルダの場合は、my-object-folder
を使用します。指定されたデータの場合、
bucket_uri
はoci://my-bucket-name@my-tenancy/my-object-folder/
になります。 - ラージ・モデル・アーティファクトをアップロードするには、
GenericModel.save(...)
メソッドに2つの追加パラメータを追加する必要があります。bucket_uri: (str, optional)
デフォルトは「なし」です。モデル・アーティファクトが一時的にコピーされるオブジェクト・ストレージURI。
bucket_uri
は、サイズが2 GBを超える場合に大規模なアーティファクトをアップロードする場合にのみ必要です。ただし、このメソッドを小さいアーティファクトでも使用できます。例:oci://<bucket_name>@<namespace>/prefix/
.remove_existing_artifact: (bool, optional)
は、デフォルトでTrue
に設定されます。このメソッドは、オブジェクト・ストレージ・バケットにアップロードされたアーティファクトを削除するかどうかを決定します。
- モデル・アーティファクトを取得し、ノートブック・セッションから
bucket_uri
にコピーします。 - 次に、バケット(
bucket_uri
)からサービス・バケットにアーティファクトをコピーします。アーティファクト・サイズが2 GBより大きく、
bucket_uri
が指定されていない場合、エラーが発生します。デフォルトでは、
remove_existing_artifact
属性はTrue
に設定されています。アーティファクトは、サービス・バケットへのアップロードが成功すると、バケット(bucket_uri
)から自動的に削除されます。バケットからアーティファクトを削除しない場合は、remove_existing_artifact = False
を設定します。
要約すると、プロセスは次のとおりです。
- モデル・アーティファクトを準備します。
- モデルに関する基本情報をモデル・カタログに保存します。
- モデル・アーティファクトをオブジェクト・ストレージ・バケット(
bucket_uri
)にアップロードします。 - モデル・アーティファクトをバケットからモデル・カタログ・サービス・バケットにアップロードします。
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です。このメソッドは、オブジェクト・ストレージ・バケットにアップロードされたアーティファクトを削除するかどうかを決定します。
要約すると、プロセスは次のとおりです。
- モデル・カタログ・サービスのオブジェクト・ストレージ・バケットからバケットにモデル・アーティファクトをダウンロードします。
- モデル・アーティファクトをバケットからノートブック・セッションにダウンロードします。
remove_existing_artifact
パラメータに基づいて、一時アーティファクトをバケットから削除します。-
モデル・カタログからモデルに関する基本情報をロードします。
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 )