柔軟なBring Your Own ModelオプションでAI/MLアプリケーションを強化 (2024/10/11)

柔軟なBring Your Own ModelオプションでAI/MLアプリケーションを強化 (2024/10/11)

https://blogs.oracle.com/machinelearning/post/enhance-your-ai-ml-apps-with-flexible-byom-options

投稿者: Mark Hornick | Senior Director, Machine Learning and AI Product Management


機械学習やその他のAIモデルは、多くのソースから生まれる可能性があります。他のベンダーの事前構築済みトランスフォーマ・モデルを使用したり、データ・サイエンス・チームのネイティブPythonおよびRモデルをデプロイしたり、GPUコンピュートを使用して非GPU環境で簡単に使用できるモデルをトレーニングしたりできます。Oracle Databaseでは、これらのモデルを様々な方法で操作して、AIアプリケーション開発をサポートできます。


このブログでは、Oracle DatabaseとAutonomous Databaseを使用して、モデル導入を容易にするために、独自のモデル(BYOM)をデータベースに導入する方法をご紹介します。OracleのネイティブSQL統合およびREST APIを介してこれらのモデルを使用する機能は、エンタープライズ・アプリケーションで機械学習モデルを簡単に活用できることを意味します。



モデルの複数のソース/タイプ


様々なツールや環境から生成され、様々な形式で表される、多くのタイプのモデルがあります。次に例を示します。


  • ネイティブOracle Machine Learningのデータベース内モデル: これらは、データベース内アルゴリズムを使用してOracle Databaseで直接生成され、オンプレミス/クラウドの境界を越えても、他のOracle DatabaseまたはAutonomous Databaseインスタンスにエクスポートできます。
  • ネイティブのPythonおよびRパッケージを使用して生成される機械学習モデル: これらは、PythonおよびR環境を使用して生成することも、GPUリソースを利用することも、Oracle Machine Learning for Python (OML4Py)およびOracle Machine Learning for R (OML4R)埋込み実行を使用して生成することもできます。
  • ONNX形式モデル: オープン形式として、幅広いツールと言語を使用してモデルを生成し、ONNXランタイムを使用して推論するためにモデルをONNX表現に変換できます。
  • トランスフォーマ: これらのタイプのモデルは、埋込みモデルとも呼ばれ、テキスト、イメージ、オーディオおよびその他のメディア・タイプのベクトル表現を生成します。このようなモデルは、サードパーティのAIプロバイダーが提供する事前構築、ファインチューニング、またはカスタムビルドなどが可能です。
  • 大規模言語モデル: このようなタイプのモデルは、生成AIを個人の生産性向上に役立てるとともに、エンタープライズ・アプリケーションを拡張するための強力なツールをサポートします。独自に構築できますが、多大なコストがかかるため、サードパーティ・プロバイダのものを使用する可能性が高くなり、特定のニーズに合わせて微調整できます。


これらのそれぞれと、データベースでの使用方法について説明します。



ネイティブのデータベース内MLモデル


過去の構造化データを使用してビジネス・ユースケースを解決する場合、従来の機械学習アルゴリズムは、正確で効率的な結果を生み出すことができる実績のあるテクノロジです。

Oracle DatabaseおよびAutonomous DatabaseでOracle Machine Learningを使用すると、データベースでモデルを直接構築して使用できます。これには、分類、回帰、クラスタリング、異常検出、時系列、およびその他の機械学習技術が含まれます。データベース内モデルを使用すると、データベース内の最適化、データベース内データに対するデータ移動の排除、およびモデル・デプロイメントの容易さを利用することで、パフォーマンスとスケーラビリティが向上します。Oracle Machine Learningモデルのエクスポートおよびインポート機能を使用して、これらのモデルを他のOracle DatabaseまたはAutonomous Databaseインスタンスに持ち込むことができます。デプロイメント・オプションの詳細は、ブログ「Oracle Databaseを使用したエンタープライズ・機械学習のアーキテクチャトップ5」を参照してください。


たとえば、モデル名、アルゴリズム名、アルゴリズムのクラス、さらにはユーザーのスキーマ内のすべてのモデルなど、様々なフィルタリング基準を使用して1つ以上のモデルをエクスポートできます。ここでは、すべてのデシジョン・ツリー・モデルをユーザーOMLUSER1からディレクトリ'OMLDIR'のファイル'dt_models'にエクスポートします。次に、これらのモデルを別のデータベースにインポートし、スキーマをOMLUSER1から別のユーザーOMLUSER2に表領域とともに再マッピングします。ファイル名は、エクスポート中に表示されるように拡張されます。


EXECUTE dbms_data_mining.export_model(filename => 'dt_models',
                                      directory => 'OMLDIR',
                                      model_filter => 'ALGORITHM_NAME IN (''DECISION_TREE'')');

EXECUTE dbms_data_mining.import_model(filename => 'dt_models01.dmp',
                                      directory => 'OMLDIR',
                                      schema_remap => 'OMLUSER1': 'OMLUSER2',
                                      tablespace_remap => 'USER1:USER2');


RESTエンドポイントを介したストリーミングおよびその他のアプリケーションに対するリアルタイム推論レスポンスが必要な場合は、データベース内分類、回帰、クラスタリングおよび特徴抽出モデルをAutonomous Databaseサーバーレス上のOracle Machine Learning Servicesにデプロイできます。これらのモデルは、オンプレミス/クラウドの境界を越えて、Oracle DatabaseインスタンスとAutonomous Databaseインスタンスの両方から発生する可能性があります。


OMLサービスを使用すると、モデルの管理、デプロイメントおよび監視をサポートする、MLOps要件の主要な要素が可能になります。ストリーミングおよびリアルタイム・アプリケーション用に設計されており、多くの場合、応答時間はミリ秒です。24時間365日の可用性を実現するためにVMをプロビジョニングする必要がある他のソリューションとは異なり、OMLサービスはAutonomous Database Serverlessの一部としてプロビジョニングおよびメンテナンスされるため、ユーザーは実際の予測を生成するときに追加のコンピュートのみを支払います。



ネイティブPythonまたはRパッケージを使用して生成されるMLモデル


PythonとRは、機械学習モデルを開発するための主要なデータ・サイエンス言語と環境です。これにより、ユーザーはPythonまたはRオブジェクトとして表されるモデルを生成できます。多くの場合、ソリューション開発者はこれらのモデルをフラット・ファイルに保持し、モデルをPythonまたはR環境に明示的にロードします。



データベースに格納されているPythonおよびRモデルの使用


Oracle Machine Learningを使用すると、かわりに、OML4PyおよびOML4Rのデータストア機能を使用して、これらのモデルをデータベースに持ち込んで格納できます。この機能についてさらに学習するには、Oracle DatabaseでのRおよびPythonオブジェクトの格納方法を参照してください。


さらに、これらのモデルを推論やその他の目的でデータベースから直接ロードするユーザー定義のPythonまたはR関数を起動できます。OML4PyまたはOML4R埋込み実行を使用すると、このようなユーザー定義関数は、データベース生成および管理されたPythonまたはRエンジンで実行できます。PythonまたはR APIを使用する以外に、SQLおよびAutonomous Databaseから、RESTエンドポイントからもこれらの関数を呼び出すことができます。さらに、サードパーティのPythonおよびRパッケージをユーザー定義関数とともに使用できます。


たとえば、ネイティブPython線形回帰モデルを作成し、linear_regression_modelという名前のデータストアを使用してデータベースに保存できます。


import oml
from sklearn import linear_model

mod = linear_model.LinearRegression()

X = iris[["PETAL_WIDTH"]]
y = iris[["PETAL_LENGTH"]]
lm.fit(X, y)

oml.ds.save(mod,name = "linear_regression_model")


次に、Pandas DataFrameとデータストアの名前を引数として取る関数'my_score_function'を定義します。このファンクションは、データストアからモデルをロードし、予測を戻します。次に、この関数をPythonスクリプト・リポジトリのデータベースに格納します。


def my_score_function(dat,datastore):    
  import pandas as pd    
  import oml        
  obj_dict = oml.ds.load(name="linear_regression_model",to_globals=False)     
  regr = obj_dict["mod"]                                       
  pred = regr.predict(dat[['PETAL_WIDTH']])
  return pd.concat([dat[['SPECIES', 'PETAL_LENGTH']],                        

oml.script.create("score_mod", func=score_mod, is_global=False)


これで、データ・パラレル埋込みPython実行関数'pyqRowEval'を使用してファンクションを起動できます。入力データは「IRIS」という名前の表で、データストア名、出力形式の指定、各バッチで処理する行数およびユーザー定義関数の名前を含むパラメータ・リストがあります。パラメータ・リストで並列化を有効にすることで、複数のPythonエンジンが一度に15個のレコードのバッチを同時に処理し、パフォーマンスを向上させることができます。


SELECT *
  FROM table(pyqRowEval(
    inp_nam => 'IRIS',
    par_lst => '{"oml_input_type":"pandas.DataFrame", "oml_parallel_flag":true, "datastore": "linear_regression_model"}'
    out_fmt => '{"SPECIES":"varchar2(10)","PETAL_LENGTH":"number","Pred_PETAL_LENGTH":"number"}',
    row_num => 15,                                    
    scr_name => 'my_score_function'));


これは、データベースでの埋込みPython (またはR)実行を利用する1つのシーケンスにすぎません。



ONNX形式でのPythonおよびRモデルの使用


自社を先取りするわけではありませんが、このようなPythonおよびRモデルは、多くの場合、ONNX形式でエクスポートできます(次に説明します)。その場合は、分類、回帰、クラスタリングおよび特徴抽出モデルをOMLサービスにデプロイして、リアルタイム・アプリケーションでRESTエンドポイントを介して使用できます。これを実行する例は、OMLサービスを使用したXGBoostモデルのデプロイを参照してください。


これらの同じONNX形式のモデルは、Oracle Machine Learning SQL予測演算子(次の項で説明します)を使用してデータベースに直接インポートできます。



ONNX形式モデル


Open Neural Network Exchange(ONNX)は、機械学習モデルを表すために設計されたオープン形式です。演算子の共通セットと、様々な方法でモデルを使用できるようにする共通ファイル形式を定義します。ONNXという名前には「ニューラル・ネットワーク」が含まれていますが、モデル・タイプ(非ニューラル・ネットワーク・アルゴリズムから導出されたモデル・タイプ)の広範囲に適用されます。

ONNX形式のモデルを推論に使用できるようにするため、ONNX Runtimeは、ニューラル・ネットワークやディープ・ラーニング・モデル、その他のタイプの機械学習モデルを含むONNX形式のモデルをデプロイするための高性能エンジンです。


ONNX形式のMLモデルをOMLサービスにインポート


データベース内モデルについては、RESTエンドポイントを使用して、ONNX形式モデルをOMLサービスにデプロイできます。前述のとおり、OMLサービスはRESTエンドポイントからの推論を可能にし、ストリーミングおよびリアルタイム・アプリケーション用に設計されています。


TorchやTensorFlowなどを使用してモデルを構築できます。GPUリソースを活用して、CNNやRNNなどのコンピュートやデータ集中型モデルをサポートすることもできます。ONNX形式に変換してOMLサービスにインポートした後、RESTエンドポイントの利便性からこれらのモデルを使用できます。


ONNX形式のMLモデルをOracle Databaseにインポート


ONNX形式のモデルをインポートして、Oracle Database 23aiのデータベース内ONNXランタイムを使用することもできます。このようなモデルでは、モデル入力と出力がデータベースとシームレスに連携できるように、ONNX形式モデルにバンドルされている前処理ステップと後処理ステップを追加する必要があります。


インポートすると、これらのモデルは推論用のネイティブ・データベース内モデルのように動作するため、ネイティブのデータベース内モデルと同じ統合SQL予測演算子を使用できます。


OML4SQLDBMS_DATA_MININGパッケージを使用する顧客解約分類モデルの例を次に示します。まず、ONNX形式のモデル・バンドルをオブジェクト・ストレージから取得します。これは、データベース内ONNXランタイムで使用するために必要な前処理ステップと後処理ステップが含まれているため、バンドルと呼ばれます。'import_onnx_model'プロシージャを使用して、モデル名、モデル・データ('get_object'を使用して取得)およびメタデータを指定します。メタデータは、これを分類モデルとして識別します。


DECLARE
  model_source BLOB := NULL;
BEGIN
  model_source := DBMS_CLOUD.get_object(
    credential_name => 'OBJ_STORE_CRED',
    object_uri      => 'https://objectstorage…bucketname/o/classification-churn-bundle.onnx');

  DBMS_DATA_MINING.import_onnx_model(
    model_name => "churn_model",
    model_data => model_source,
    metadata   => JSON('{ function : "classification" }'));
END;


現在は、SQL問合せの一部としてこのモデルで予測演算子を使用して、顧客表内の各顧客の予測を取得できます。


SELECT case_id, prediction(churn_model using *) AS prediction FROM CUSTOMERS


分類に加えて、ONNX形式の回帰およびクラスタリング・モデルをインポートすることもできます。ただし、ONNX形式(トランスフォーマ)を使用してデータベースに持っていくことができるモデルの別のクラスがあります。



トランスフォーマ


トランスフォーマ(モデルの埋込み)は、Oracle Database 23ai AI Vector Searchにあるセマンティック類似性検索の有効化において中心的な役割を果たします。トランスフォーマは、テキスト、イメージ、オーディオなどのコンテンツを多次元のベクトル表現に変換します。



類似性検索のベクトル


ベクトルは埋め込みとも呼ばれ、最も単純なのは数値のシーケンスです。これらの数値は、ディメンションと呼ばれ、データの重要なセマンティック面をキャプチャします。人間の言葉で考えると、犬は品種、毛皮の色、身長、体重などの寸法を持っていると考えるかもしれません。 コンピュータ用語で考えると、トランスフォーマを使用する場合、これらの次元はN次元空間に対する意味的抽象化を形成し、Nはしばしば数百または数千です。


1つのベクトルが別のベクトルに近いほど、内容は類似しています。距離を計算する方法はたくさんありますが、おそらく最もよく知っているのはユークリッド距離です。その他の距離測定には、コサインマンハッタンdot productハミングなどがあります。


次のシナリオを考えてみます。これは、セマンティック類似性検索でのトランスフォーマの使用を示しています。「Autonomous Databaseとは」などのテキストなど、データ・オブジェクトを提供します。トランスフォーマ(埋め込みモデル)を使用して、これをベクトルに変換するか、埋め込みます。事前に、Oracle製品ドキュメント、ブログ、その他の販促資料を使用してベクトル・ストアを移入しました。これらの各ドキュメントは、1つ以上のベクトルに変換され、表に格納されます。入力ベクトルとテーブルに格納された各ベクトルの間の距離を計算し、入力ベクトルに最も近い最上位の結果を選択できます。ここから、入力ベクトルに最も関連のあるドキュメントまたはテキスト・チャンクを取得できます。


単純ベクトル検索ワークフロー




Oracle Databaseへのテキスト・トランスフォーマのインポート


Oracle Database 23aiでは、AI Vector Searchで使用するために、テキスト・トランスフォーマ・モデルをデータベースに直接ロードできます。Pythonユーザーの場合、OML4Pyは、サポートされているHugging FaceトランスフォーマからポータブルONNX形式モデルを生成するためのクラスをoml.utilsパッケージに提供します。このパッケージでは、データベース内で使用するための前処理ステップと後処理ステップが自動的に追加されるため、モデルをデータベース内ONNXランタイムで使用するためにデータベースに保存できます。また、このモデルを他のデータベースにインポートする場合や、モデルのスナップショットを作成する場合は、そのモデルをファイルに保存することもできます。


次に、Hugging Face文転送'all-MiniLM-L6-v2'から埋込みモデルを作成し、"sentence-transformer"という名前のデータベースに保存し、同じ名前のファイルに保存する例を示します。


import oml
from oml.utils import EmbeddingModel

em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")

em.export2db("sentence-transformer")
em.export2file("sentence-transformer")


Pythonユーザーでない場合は、DBMS_DATA_MININGパッケージを使用してそのようなモデルをインポートすることもできます。従来のMLモデルについては、モデルに適切な前処理ステップと後処理ステップが必要です。ここでは、オブジェクト・ストレージからモデルにアクセスし、モデル名、モデル・データを指定して'import_onnx_model'を使用し、これが埋込みモデルであることを指定します。


DECLARE
  model_source BLOB := NULL;
BEGIN
  model_source := DBMS_CLOUD.get_object(
    credential_name => 'OBJ_STORE_CRED',
    object_uri      =>
     'https://objectstorage…bucketname/o/sentence-transformer-bundle.onnx');

  DBMS_DATA_MINING.import_onnx_model(
    model_name => "sentence-transformer",
    model_data => model_source,
    metadata   => JSON('{ function : "embedding" }'));
END;


一般的なHugging Face all-MiniLM-L12-v2トランスフォーマのOracle提供の拡張バージョン(バンドル)の使用に関するその他の例は、Oracle Database 23aiの事前組込み生成モデルを参照してください。


これで、モデルは、AI Vector Searchをファーストクラスのデータベース・オブジェクトとして使用できるようになります。次の例を考えてみます。ここでは、映画のスクリプト、TVショーのトランスクリプト、およびコンテンツの関連性に基づいて特定の年に作成された曲の歌詞に基づいて、映画、テレビ番組、音楽のエンターテインメントに関する推奨事項を取得します。「ここ数年で生み出された気候変動に関する希望のメッセージに関するエンターテイメント推奨の上位10件」を求めるかもしれません。


まず、テキストの内容をベクトル化する必要があります。次のコードでは、'entertainment_content'表のデータを使用して、列'embedding'を含む表を作成します。そのためには、AIベクトル検索SQL関数VECTOR_EMBEDDINGを使用し、前述でロードした'sentence_transformer'モデルと、'VECTOR'型に変換する列(content_text)を指定します。この新しい列を「埋込み」と呼びます。(この例では、精度の高いテキストのチャンク化を省略しています。)


CREATE TABLE entertainment_vector_table AS
  SELECT id, content_title, content_type, year, content_text,
     VECTOR_EMBEDDING(sentence_transformer
                      USING content_text) AS embedding
  FROM entertainment_content;


パフォーマンスとスケーラビリティのために、AIベクトル検索はベクトル索引の作成をサポートします。ここでは、インメモリー・ネイバー・グラフ索引を使用して、埋込み列に索引vector_idxを作成します。


CREATE VECTOR INDEX vector_idx ON
  entertainment_vector_table (embedding)
  ORGANIZATION INMEMORY NEIGHBOR GRAPH;


これで、上位10件の推奨コンテンツを見つけるための問合せを発行する準備が整いました。まず、センテンス・トランスフォーマを使用してリクエストをベクトル埋込みに変換し、年で生成されたコンテンツをフィルタして、最も近いコンテンツを見つけます。


SELECT id, content_title, content_type FROM entertainment_vector_table t
WHERE  t.year > 2021
ORDER BY VECTOR_DISTANCE(
           embedding,
           VECTOR_EMBEDDING(sentence_transformer
                            USING :request)) ASC
FETCH APPROXIMATE FIRST 10 ROWS ONLY;


2021年以降にリリースされたコンテンツを見つけるためにWHERE句を使用して構造化データ・フィルタリングを組み合せ、リクエストに基づいて結果をベクトル距離でソートすることに注意してください。「APPROXIMATE」句を使用して、ベクトル索引を利用して高パフォーマンスな取得を行います。



大規模言語モデル(LLM)


生成AIは、テキスト、コード、イメージ、オーディオ、さらにはビデオなどの新しいコンテンツを生成できる幅広いモデルを網羅しています。これらのモデルは、人間の創造性を模倣する非常に現実的で複雑なコンテンツを生成します。生成AIモデルは、多くの場合、業界や問題領域で機能する一般的なナレッジ・ツールです。生成AIモデルの1つのタイプは、自然言語の「理解」とコンテンツ生成をサポートする大規模言語モデル(LLM)です。


LLMは、Eメールのコンテンツの生成、特定のトピックに関する質問への回答、記事の要約、ソーシャル・メディア投稿のセンチメントの特徴など、様々なユースケースを可能にします。また、Python、R、Javaなどの一般的なプログラミング言語でコードを生成したり、SQLなどの問合せ言語を生成することもできます。


Oracle Autonomous DatabaseのSelect AI機能を使用すると、複数のAIプロバイダのLLMを活用し、上記やその他の多くのユースケースに生成AIを使用して強力なアプリケーションを開発できます。すべてSQLとPL/SQLを使用します。さらに、Select AIを使用すると、取得拡張生成(RAG)がデータベース・メタデータと連携して、データベースで実行できるSQLを生成したり、Oracle AI Vector Searchなどのベクトル・ストアからコンテンツを検索したりして、より正確で最新のLLM生成レスポンスを実現できます。

Select AIは、ユーザー提供のプロンプトに基づいて、LLMインタラクションのいくつかの「アクション」を有効にします。



  • showsql– データベース・メタデータに基づいて生成された問合せを返します。
  • runql - 生成された問合せまたはベクトル・セマンティック類似性検索のソースを使用して、SQL結果セット(デフォルト)を返します
  • explainql - 生成されたSQLクエリの説明
  • narrate– 問合せ結果セットから、またはベクトル・セマンティック類似性検索を使用して取得されたコンテンツを使用して、会話結果を返します
  • chat- 一般的なAIチャット- LLMへのパススルー




AIプロファイルを指定します。このプロファイルは、使用するAIプロバイダおよびLLMを、その他の設定の中で識別します。次に、次のようにSQLコマンド・プロンプトで質問するだけです。


SQL> SELECT AI what are net sales for each quarter in 2024
SQL> SELECT AI CHAT what is Autonomous Database


最初の例では、'runsql'を使用して、データベース・メタデータを使用してデータベースからデータを問い合せます。2番目の例では、LLMへのパススルーとしてチャット関数を使用して、Oracle Autonomous Databaseについてさらに学習するために一般的な知識を使用しています。


または、DBMS_CLOUD_AI.GENERATEプロシージャを介してPL/SQLからLLMを使用できます。


DECLARE
  v_response VARCHAR2(4000);
BEGIN
  v_response :=  DBMS_CLOUD_AI.GENERATE(prompt => 'Generate email using the JSON specification
  {"task": "Pick 5 great things to do at the location",
   "task_rules": "
      1. Encourage the customer to do these things. Really sell them as to why it would be right for them
      2. Consider all the information about the customer that''s provided, including family and dog situation,
         whether they have a car and income
      3. Format the result with emojis and make it fun",
   "last_name": "Mouly",
   "first_name": "Jennine",
   "location": "Paris, Île-De-France",
   "age": 37,
   "gender": "Female",
   "has_kids": "NO",
   "num_cars": 2,
   "income_level": "Above 110,000",
   "dog_owner": "NO"}’,
  profile_name => 'OPENAI’,
  action       => 'chat’);
  DBMS_OUTPUT.PUT_LINE(v_response);
END;


この例では、顧客に関心のある場所でアクティビティをチェックアウトするよう顧客に促すEメールを生成します。このプロンプトには、LLMが関連する推奨事項を含むカスタマイズされた電子メールを生成するのに役立つ顧客に関する情報とともに、LLMへの指示が含まれています。



まとめ


ここで調査したように、さまざまなツールや環境からデータベースに取り込むことができるモデルの種類が数多くあります。次のものがあります。


  • ネイティブOracle Machine Learningのデータベース内モデル
  • PythonおよびRパッケージを使用して生成されるMLモデル
  • ONNXフォーマットの従来のMLモデル
  • ONNX形式のテキスト・トランスフォーマ
  • Select AIによる大規模言語モデル


Oracleを使用すると、独自のモデルをデータベースに取り込んで、AIアプリケーション開発をサポートするための様々な方法で使用できます。


このトピックに関する次のブログでは、BYOMオプションの選択に関するより多くのインサイトを提供します。

詳細情報


次のリソースを確認してください。



使いやすいOracle LiveLabs環境を使用して、これらの機能を試すことができます。次の2つのワークショップを開始できます。

コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

Oracle APEX 24.1の一般提供の発表 (2024/06/17)