ONNXモデルをインポートするための代替方法
DBMS_DATA_MINING.IMPORT_ONNX_MODEL
プロシージャを使用して、モデルをインポートし、入力名を宣言します。PL/SQLヘルパー・ブロックを使用すると、含まれている例のONNX形式モデルをOracle Databaseにインポートするプロセスが容易になります。
DBMS_DATA_MINING
PL/SQLパッケージを使用してONNXモデルをデータベースにインポートするには、次のステップを実行します。
-
dmuser
として接続します。CONN dmuser/<password>@<pdbname>;
-
次のヘルパーPL/SQLブロックを実行します。
DECLARE m_blob BLOB default empty_blob(); m_src_loc BFILE ; BEGIN DBMS_LOB.createtemporary (m_blob, FALSE); m_src_loc := BFILENAME('DM_DUMP', 'my_embedding_model.onnx'); DBMS_LOB.fileopen (m_src_loc, DBMS_LOB.file_readonly); DBMS_LOB.loadfromfile (m_blob, m_src_loc, DBMS_LOB.getlength (m_src_loc)); DBMS_LOB.CLOSE(m_src_loc); DBMS_DATA_MINING.import_onnx_model ('doc_model', m_blob, JSON('{"function" : "embedding", "embeddingOutput" : "embedding", "input": {"input": ["DATA"]}}')); DBMS_LOB.freetemporary (m_blob); END; /
このコードでは、
BLOB
オブジェクトとBFILE
ロケータを設定し、DM_DUMP
ディレクトリのmy_embedding_model.onnx
ファイルを格納するための一時BLOB
を作成し、その内容をBLOB
に読み取ります。その後、一時BLOB
リソースを解放する前に、ファイルをクローズし、そのコンテンツを使用して、ONNXモデルを指定したメタデータとともにデータベースにインポートします。
IMPORT_ONNX_MODEL
プロシージャのスキーマは、DBMS_DATA_MINING.IMPORT_ONNX_MODEL(model_data, model_name, metadata)
です。このプロシージャは、DBMS_DATA_MINING
パッケージからIMPORT_ONNX_MODEL
をロードし、model_name
で指定された名前、m_blob
のBLOBコンテンツおよび関連するmetadata
を使用して、ONNXモデルをデータベースにインポートします。
-
doc_model
: このパラメータは、インポートされたモデルをOracle Databaseに格納するときのユーザー指定の名前です。 -
m_blob
: これは、モデルのONNX表現を保持するBLOB
のモデル・データです。 -
"function" : "embedding"
: テキスト埋込みモデルの関数名を示します。 -
"embeddingOutput" : "embedding"
: 埋込み結果を含む出力変数を指定します。 -
"input": {"input": ["DATA"]}
: モデルで予想される入力を記述するJSONオブジェクト("input"
)を指定します。"input"
という名前の入力があり、その値が1つの要素"DATA"
を持つ配列である必要があることを指定します。これは、モデルで埋込みを生成するために単一の文字列入力が想定されていることを示します。
または、DBMS_DATA_MINING.IMPORT_ONNX_MODEL
プロシージャは、OCIオブジェクト・ストレージから格納およびロードされたONNXファイルを表すBLOB
引数を受け入れることもできます。次に、OCIオブジェクト・ストレージに格納されているONNXモデルをロードする例を示します。
DECLARE
model_source BLOB := NULL;
BEGIN
-- get BLOB holding onnx model
model_source := DBMS_CLOUD.GET_OBJECT(
credential_name => 'myCredential',
object_uri => 'https://objectstorage.us-phoenix -1.oraclecloud.com/' ||
'n/namespace -string/b/bucketname/o/myONNXmodel.onnx');
DBMS_DATA_MINING.IMPORT_ONNX_MODEL(
"myonnxmodel",
model_source,
JSON('{ function : "embedding" })
);
END;
/
このPL/SQLブロックは、model_source
変数をBLOB
型として初期化することから始まり、最初はNULLに設定されます。次に、DBMS_CLOUD.GET_OBJECT
プロシージャを使用して、資格証明(OBJ_STORE_CRED)
を指定してOracle Cloud Object StorageからONNXモデルを取得し、モデルのURIを指定します。ONNXモデルは、この場合はbucketname
という名前の特定のバケットに存在し、指定されたURLからアクセスできます。次に、スクリプトはONNXモデルをmodel_source
BLOBにロードします。DBMS_DATA_MINING.IMPORT_ONNX_MODEL
プロシージャは、このモデルをmyonnxmodel
としてOracle Databaseにインポートします。インポート時に、JSONメタデータは、埋込み操作のためにモデルの関数をembedding
として指定します。
PL/SQLプロシージャについて学習するには、IMPORT_ONNX_MODELプロシージャおよびGET_OBJECTプロシージャおよびファンクションを参照してください。
例: 事前トレーニング済ONNXモデルのOracle Databaseへのインポート
ONNX埋込みのインポートとベクトル埋込みの生成の包括的なステップバイステップの例を次に示します。
conn sys/<password>@pdb as sysdba
grant db_developer_role to dmuser identified by dmuser;
grant create mining model to dmuser;
create or replace directory DM_DUMP as '<work directory path>';
grant read on directory dm_dump to dmuser;
grant write on directory dm_dump to dmuser;
>conn dmuser/<password>@<pdbname>;
–- Drop the model if it exits
exec DBMS_VECTOR.DROP_ONNX_MODEL(model_name => 'doc_model', force => true);
-- Load Model
EXECUTE DBMS_VECTOR.LOAD_ONNX_MODEL(
'DM_DUMP',
'my_embedding_model.onnx',
'doc_model',
JSON('{"function" : "embedding", "embeddingOutput" : "embedding"}'));
/
--Alternately, load the model
EXECUTE DBMS_DATA_MINING.IMPORT_ONNX_MODEL(
'my_embedding_model.onnx',
'doc_model',
JSON('{"function" : "embedding",
"embeddingOutput" : "embedding",
"input": {"input": ["DATA"]}}')
);
--check the attributes view
set linesize 120
col model_name format a20
col algorithm_name format a20
col algorithm format a20
col attribute_name format a20
col attribute_type format a20
col data_type format a20
SQL> SELECT model_name, attribute_name, attribute_type, data_type, vector_info
FROM user_mining_model_attributes
WHERE model_name = 'DOC_MODEL'
ORDER BY ATTRIBUTE_NAME;
OUTPUT:
MODEL_NAME ATTRIBUTE_NAME ATTRIBUTE_TYPE DATA_TYPE VECTOR_INFO
-------------------- -------------------- -------------------- ---------- ---------------
DOC_MODEL INPUT_STRING TEXT VARCHAR2
DOC_MODEL ORA$ONNXTARGET VECTOR VECTOR VECTOR(128,FLOA
T32)
SQL> SELECT MODEL_NAME, MINING_FUNCTION, ALGORITHM,
ALGORITHM_TYPE, MODEL_SIZE
FROM user_mining_models
WHERE model_name = 'DOC_MODEL'
ORDER BY MODEL_NAME;
OUTPUT:
MODEL_NAME MINING_FUNCTION ALGORITHM ALGORITHM_ MODEL_SIZE
-------------------- ------------------------------ -------------------- ---------- ----------
DOC_MODEL EMBEDDING ONNX NATIVE 17762137
SQL> select * from DM$VMDOC_MODEL ORDER BY NAME;
OUTPUT:
NAME VALUE
---------------------------------------- ----------------------------------------
Graph Description Graph combining g_8_torch_jit and torch_
jit
g_8_torch_jit
torch_jit
Graph Name g_8_torch_jit_torch_jit
Input[0] input:string[1]
Output[0] embedding:float32[?,128]
Producer Name onnx.compose.merge_models
Version 1
6 rows selected.
SQL> select * from DM$VPDOC_MODEL ORDER BY NAME;
OUTPUT:
NAME VALUE
---------------------------------------- ----------------------------------------
batching False
embeddingOutput embedding
SQL> select * from DM$VJDOC_MODEL;
OUTPUT:
METADATA
--------------------------------------------------------------------------------
{"function":"embedding","embeddingOutput":"embedding","input":{"input":["DATA"]}}
--apply the model
SQL> SELECT TO_VECTOR(VECTOR_EMBEDDING(doc_model USING 'hello' as data)) AS embedding;
--------------------------------------------------------------------------------
[-9.76553112E-002,-9.89954844E-002,7.69771636E-003,-4.16760892E-003,-9.69305634E-002,
-3.01141385E-002,-2.63396613E-002,-2.98553891E-002,5.96499592E-002,4.13885899E-002,
5.32859489E-002,6.57707453E-002,-1.47056757E-002,-4.18472625E-002,4.1588001E-002,
-2.86354572E-002,-7.56499246E-002,-4.16395674E-003,-1.52879998E-001,6.60010576E-002,
-3.9013084E-002,3.15719917E-002,1.2428958E-002,-2.47651711E-002,-1.16851285E-001,
-7.82847106E-002,3.34323719E-002,8.03267583E-002,1.70483496E-002,-5.42407483E-002,
6.54291287E-002,-4.81935125E-003,6.11041225E-002,6.64106477E-003,-5.47