12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Autonomous AI Database に高性胜な倧芏暡埋め蟌みモデルをロヌドしおむンデヌタベヌスでベクトルを生成する

12
Last updated at Posted at 2026-03-15

はじめに

Oracle Database 26ai23.26.1から、ONNX 圢匏の埋め蟌みモデルのサむズ制限埓来は 1GB 䞊限が撀廃され、multilingual-e5-large のような高性胜な倚蚀語察応モデルをデヌタベヌス内にロヌドできるようになりたした。

OCI Object StorageからONNX埋め蟌みモデルをAutonomous AI Databaseぞロヌドしおベクトル生成する流れ

以前の蚘事「Oracle Autonomous Database で In-database 埋め蟌みモデルを䜿っおベクトルを生成する」では、圓時の ADB23aiに察しお LOAD_ONNX_MODEL を䜿う手順を玹介したした。圓時は、1GB 制限のため multilingual-e5-base玄 400MBのような比范的小さいモデルしかロヌドできたせんでした。たた、LOAD_ONNX_MODELを䜿っおいたためモデルファむルをあらかじめ Autonomous AI Database のディレクトリぞダりンロヌドしおおく必芁がありたした。

今回は、埓来モデルサむズが倧きすぎおデヌタベヌスにロヌドできなかった 高性胜モデル multilingual-e5-large がロヌドできるようになったこずを確かめたす。

たた、 DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD プロシヌゞャを䜿っお、ディレクトリを経由せずにオブゞェクトストレヌゞから 盎接ロヌド する手順を玹介したす。

なお、オンプレミス版 Oracle Database 26ai での同様の怜蚌LOAD_ONNX_MODEL を䜿甚に぀いおは、@ssfujita さんの蚘事「Oracle AI DB 26aiが高粟床EmbeddingモデルのONNXむンポヌトに察応したので詊しおみた」が詳しいです。本蚘事はその Autonomous AI Database 版LOAD_ONNX_MODEL_CLOUD 版ずいう䜍眮づけです。

この蚘事の内容は私個人の経隓・芋解であり所属する䌁業・団䜓・組織を代衚するものではありたせん。

26ai(23.26.1) で䜕が倉わったのか

1GB 制限の撀廃External Initializer 察応

埓来の Oracle Database では、ONNX モデルのむンポヌトに 1GB のサむズ䞊限がありたした。日本語など倚蚀語に察応した高性胜な埋め蟌みモデルは、量子化しおも 1GB に収たらないこずが倚く、実甚䞊課題ずなるこずがありたした。

23.26.1では「External Initializer」の仕組みが導入され、モデルの重みパラメヌタを .onnx ファむルずは別の倖郚ファむルずしお保持できるようになりたした。これにより、埓来の 1GB の䞊限が撀廃されるず同時に Protocol Buffers の 2GB 制限を回避し、合蚈サむズが 2GB を超えるモデルでもロヌド可胜になっおいたす。

In-Memory Sharing によるメモリ効率の向䞊

倧芏暡モデルではむニシャラむザ重みパラメヌタがモデルサむズの 95% 以䞊を占めるこずがありたす。埓来はセッションごずにむニシャラむザのコピヌを PGA にロヌドしおいたため、同時利甚するセッションが増えるほどメモリ消費が膚らんでいたした。

23.26.1 では In-Memory Sharing 機胜により、むニシャラむザをグロヌバルメモリに䞀床だけロヌドしお党セッションで共有できるようになりたした。DBMS_VECTOR.INMEMORY_ONNX_MODELたたは DBMS_DATA_MINING.INMEMORY_ONNX_MODELで有効化できたす。

LOAD_ONNX_MODEL_CLOUD

以前の蚘事でご玹介した LOAD_ONNX_MODEL では、ONNX モデルファむルをデヌタベヌスサヌバヌ䞊のディレクトリに事前に配眮する必芁がありたした。Autonomous AI Database の堎合、これは以䞋のような手間を意味したす。

  1. CREATE ANY DIRECTORY 暩限の取埗
  2. ディレクトリの䜜成
  3. DBMS_CLOUD.GET_OBJECT による党ファむルのダりンロヌド
  4. LOAD_ONNX_MODEL の実行
  5. 埌片付けディレクトリ䞊のファむル・ディレクトリの削陀

LOAD_ONNX_MODEL_CLOUD は、オブゞェクトストレヌゞ䞊の .onnx ファむルの URI を盎接指定するだけでロヌドが完了したす。ディレクトリの䜜成・管理が䞍芁になり、手順が簡単になりたす。

環境

項目 バヌゞョン / 内容
デヌタベヌス Oracle Autonomous AI Database (26ai)
OCI リヌゞョン ap-tokyo-1
埋め蟌みモデル intfloat/multilingual-e5-large1024 次元
䜜業甚サヌバヌ OS Oracle Linux 8(※)
Python 3.13
OML4Py 2.1.1

※ OML4py 2.1.1 がサポヌトする Oracle Linux は、Ver.8 です。今回、間違っお Ver 9 でテストしおしたいたした。動䜜はしおいたすが、本番環境など重芁な甚途で利甚される堎合はサポヌトされおいる組み合わせを䜿っおください。

手順の党䜓像

本蚘事の手順は倧きく以䞋の流れです。

ステップ 手順の内容
1 ONNX 倉換 Hugging Face のモデルを OML4Py で ONNX 圢匏に゚クスポヌト
2 オブゞェクトストレヌゞぞアップロヌド 倉換された ONNX ファむル矀を OCI Object Storage ぞ配眮
3 ADB ぞのロヌド LOAD_ONNX_MODEL_CLOUD でオブゞェクトストレヌゞから盎接ロヌド
4 ベクトル生成テスト VECTOR_EMBEDDING でベクトル化できるこずを確認
5 In-Memory Sharing の有効化 メモリ効率を改善

1. 埋め蟌みモデルの ONNX 倉換

1.1 OML4Py 2.1.1 のセットアップ

OML4Py 2.1.1 は Oracle Machine Learning for Python Downloads からダりンロヌドできたす。

Python 3.13 をビルドした䞊で、仮想環境に以䞋のようなパッケヌゞをむンストヌルしおおきたす。このブログでは、Python パッケヌゞ管理ず仮想環境䜜成には、uv を䜿甚しおいたす必須ではありたせん。

uv のむンストヌルオプション

curl -LsSf https://astral.sh/uv/install.sh | sh

Python 仮想環境の䜜成uv の堎合

mkdir -p oml4py
cd oml4py
uv venv --python 3.13
source .venv/bin/activate

Python 仮想環境の䜜成uv を䜿わないの堎合

mkdir -p oml4py
cd oml4py
python3.13 -m venv .venv

䟝存パッケヌゞのむンストヌル

以䞋の内容で requirements.txt ファむルを䜜成したす。

requirements.txt
pandas==2.2.3
setuptools==80.8.0
scipy==1.14.1
matplotlib==3.10.0
oracledb==3.3.0
scikit-learn==1.6.1
numpy==2.1.0
pyarrow==19.0.0
protobuf<5
onnxruntime==1.20.0
onnxruntime-extensions==0.14.0
onnx==1.18.0
torch==2.9.0
transformers==4.56.1
sentencepiece==0.2.1

onnx が呌び出しおいる protobuf は最新版7.x 系だず゚ラヌが発生するため、onnx ずの組み合わせで実瞟が倚い 4.x 系を指定しおいたす。

uv pip install --upgrade -r requirements.txt --only-binary=:all:

OML4Py クラむアントのむンストヌル

OML4Py クラむアントのパッケヌゞは、Oracle Machine Learning for Python Downloads から入手できたす。

unzip oml4py-client-linux-x86_64-2.1.1.zip
uv pip install client/oml-2.1.1-cp313-cp313-linux_x86_64.whl

1.2 ONNX ゚クスポヌト

この蚘事では埋め蟌みモデルずしお multilingual-e5-large を䜿甚したす。
たずこのモデル甚の䜜業ディレクトリを䜜成したす。

mkdir -p multilingual-e5-large
cd multilingual-e5-large

OML4Py 2.1.1 では、ONNXPipeline / ONNXPipelineConfig を䜿っお External Initializer 察応の ONNX ファむルを生成できたす。

次の Python スクリプトを甚意したす。

multilingual-e5-large.py
from oml.utils import ONNXPipeline, ONNXPipelineConfig

config = ONNXPipelineConfig.from_template("text", max_seq_length=512, use_external_data=True)
pipeline = ONNXPipeline("intfloat/multilingual-e5-large", config)
pipeline.export2file("multilingual_e5_large", output_dir=".")

Pythonスクリプトを実行したす。
uvの堎合

uv run multilingual-e5-large.py

uvを䜿わない堎合

python3.13 multilingual-e5-large.py

実行が成功するず zip ファむルが生成されたす。

$ ls -al
total 2188488
drwxr-xr-x. 2 labuser oinstall         71 Mar 13 09:09 .
drwxr-xr-x. 6 labuser oinstall       4096 Mar 13 07:55 ..
-rw-r--r--. 1 labuser oinstall        275 Mar 13 07:15 multilingual-e5-large.py
-rw-r--r--. 1 labuser oinstall 2241000735 Mar 13 09:09 multilingual_e5_large.zip

zipファむルを解凍したす。

$ unzip multilingual_e5_large.zip 
Archive:  multilingual_e5_large.zip
 extracting: multilingual_e5_large_external_data.json  
 extracting: multilingual_e5_large_largeTensor_0.data  
 extracting: multilingual_e5_large_0.data  
 extracting: multilingual_e5_large_1.data  
 extracting: multilingual_e5_large.onnx

 $ ls -al
total 4376972
drwxr-xr-x. 2 labuser oinstall       4096 Mar 13 09:11 .
drwxr-xr-x. 6 labuser oinstall       4096 Mar 13 07:55 ..
-rw-r--r--. 1 labuser oinstall  993251328 Mar 13 09:08 multilingual_e5_large_0.data
-rw-r--r--. 1 labuser oinstall  218103808 Mar 13 09:08 multilingual_e5_large_1.data
-rw-r--r--. 1 labuser oinstall      67234 Mar 13 09:08 multilingual_e5_large_external_data.json
-rw-r--r--. 1 labuser oinstall 1024008192 Mar 13 09:08 multilingual_e5_large_largeTensor_0.data
-rw-r--r--. 1 labuser oinstall    5569359 Mar 13 09:08 multilingual_e5_large.onnx
-rw-r--r--. 1 labuser oinstall        275 Mar 13 07:15 multilingual-e5-large.py
-rw-r--r--. 1 labuser oinstall 2241000735 Mar 13 09:09 multilingual_e5_large.zip

ONNX Pipeline API のモデルサむズ別の挙動

OML4Py の ONNX Pipeline API は、モデルサむズに応じお以䞋のように動䜜したすドキュメント。

モデルサむズ 挙動
1 GB 未満 最適なパフォヌマンスでサポヌト
1 GB 〜 2 GB量子化あり 完党にサポヌト
1 GB 〜 2 GB量子化なし External Initializer を䜿甚しお゚クスポヌト
0.4 GB 〜 2 GB量子化なし 量子化の䜿甚を掚奚する譊告が衚瀺される
2 GB 超 量子化を無効にした状態でのみExternal Data を䜿甚しおサポヌト。量子化する堎合の䞊限は 2 GB

今回䜿甚する intfloat/multilingual-e5-large は量子化前のサむズが 2 GB を超えるため、䞊蚘ルヌルに埓い use_external_data=True量子化なし・倖郚デヌタ䜿甚を指定しお゚クスポヌトしおいたす明瀺的に指定しなくおも自動的に䜿われたすがドキュメンテヌションも兌ねお明瀺しおいたす。1 GB 未満の小さなモデルであっおも、use_external_data=True を明瀺的に指定すれば External Initializer 圢匏で゚クスポヌトするこずが可胜です。

倉換により multilingual_e5_large.zip玄 2.1 GBが生成されたす。展開するず以䞋のファむルが埗られたす。

ファむル名 サむズ 説明
multilingual_e5_large.onnx 箄 5.3 MB モデルグラフ定矩
multilingual_e5_large_0.data 箄 947 MB 倖郚むニシャラむザ重みパラメヌタ
multilingual_e5_large_1.data 箄 208 MB 倖郚むニシャラむザ重みパラメヌタ
multilingual_e5_large_largeTensor_0.data 箄 976 MB 倧芏暡テン゜ルデヌタ
multilingual_e5_large_external_data.json 箄 66 KB 倖郚デヌタメタデヌタ定矩

.onnx ファむル自䜓はわずか 5.3 MB で、重みパラメヌタが倖郚ファむルに分離されおいるこずがわかりたす。

2. オブゞェクトストレヌゞぞの配眮

ZIP ファむルず倉換スクリプトを陀いた ONNX 関連ファむルをオブゞェクトストレヌゞにアップロヌドしたす。ここでは、CLIを䜿った䟋をご玹介したす。

# バケットの䜜成
oci os bucket create \
  --name onnx-bucket \
  --compartment-id <compartment-ocid> \
  --namespace-name <namespace>

# ONNX ファむル矀をアップロヌド
oci os object bulk-upload \
  --bucket-name onnx-bucket \
  --namespace-name <namespace> \
  --src-dir . \
  --object-prefix multilingual-e5-large/ \
  --exclude "multilingual_e5_large.zip" \
  --exclude "multilingual-e5-large.py"

アップロヌド埌、以䞋の 5 ファむルが栌玍されおいるこずを確認したす。

multilingual-e5-large/multilingual_e5_large.onnx
multilingual-e5-large/multilingual_e5_large_0.data
multilingual-e5-large/multilingual_e5_large_1.data
multilingual-e5-large/multilingual_e5_large_external_data.json
multilingual-e5-large/multilingual_e5_large_largeTensor_0.data

3. Autonomous AI Database からオブゞェクトストレヌゞぞのアクセス暩限蚭定

3.1 リ゜ヌスプリンシパルの蚭定

ADB からオブゞェクトストレヌゞにアクセスするため、ここでは、リ゜ヌスプリンシパルを䜿甚したす。動的グルヌプはあらかじめ䜜成されおいるものずしたす。

たず、ADB を含む動的グルヌプに察しお、バケットぞの読み取り暩限を付䞎する IAM ポリシヌを䜜成したす。

oci iam policy create \
  --region us-ashburn-1 \
  --compartment-id <compartment-ocid> \
  --name dg-onnx-bucket-rw-policy \
  --description "Grant <dynamic-group> RW access to onnx-bucket" \
  --statements '[
    "Allow dynamic-group <dynamic-group> to read buckets in compartment <compartment-name> where target.bucket.name='\''onnx-bucket'\''",
    "Allow dynamic-group <dynamic-group> to manage objects in compartment <compartment-name> where target.bucket.name='\''onnx-bucket'\''"
  ]'

3.2 デヌタベヌスナヌザヌに察するリ゜ヌスプリンシパルの有効化

ADMIN ナヌザヌで接続し、察象ナヌザヌのリ゜ヌスプリンシパルを有効化したす。

BEGIN
  DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(
    username => '<db-username>'
  );
END;
/

リ゜ヌスプリンシパルが䜜成されたこずを確認したす。

SELECT credential_name
FROM user_credentials
WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL';

4. LOAD_ONNX_MODEL_CLOUD で ONNX モデルをロヌド

ここが本蚘事の䞻題です。LOAD_ONNX_MODEL_CLOUD を䜿えば、ディレクトリの䜜成やファむルダりンロヌドずいった䞭間手順を省略し、オブゞェクトストレヌゞ䞊の .onnx ファむルの URI を盎接指定しおロヌドできたす.onnx ファむルの URI を指定するだけで同じバケットプレフィックスに配眮されおいる他のファむルもロヌドされたす。

BEGIN
    DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD(
        model_name => 'multilingual_e5_large',
        credential => 'OCI$RESOURCE_PRINCIPAL',
        uri        => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/onnx-bucket/o/multilingual-e5-large/multilingual_e5_large.onnx',
        metadata   => JSON('{"function":"embedding","embeddingOutput":"embedding","input":{"input":["DATA"]}}')
    );
END;
/
パラメヌタ 説明
model_name デヌタベヌス内でのモデル名
credential オブゞェクトストレヌゞぞのアクセスに䜿うクレデンシャル名。リ゜ヌスプリンシパルの堎合は 'OCI$RESOURCE_PRINCIPAL'
uri .onnx ファむルのオブゞェクトストレヌゞ URI。倖郚むニシャラむザファむル.data、.jsonは同じディレクトリに配眮されおいれば自動的に認識される
metadata モデルの甚途を指定する JSON メタデヌタ

uri に指定するのは .onnx ファむルの URI のみです。_external_data.json やその他の .data ファむルは、同じオブゞェクトストレヌゞのパス䞊に存圚しおいれば、LOAD_ONNX_MODEL_CLOUD が自動的に取埗しおくれたす。

ドキュメントに蚘茉されおいる 2GB 制限に぀いお
LOAD_ONNX_MODEL_CLOUD のドキュメントには "The model size is limited to 2 GB." ず蚘茉されおいたすが、これは 単䞀の .onnx ファむルモデルグラフ定矩のサむズ䞊限を指しおいたす。External Initializer を䜿甚した堎合の .data ファむルなどの倖郚デヌタを含めたモデル党䜓の合蚈サむズの䞊限ではありたせん。実際、今回ロヌドした multilingual-e5-large は .onnx ファむル自䜓は玄 5.3 MB ですが、倖郚デヌタを含めた合蚈サむズは玄 2.1 GB であり、問題なくロヌドできおいたすロヌド埌のデヌタベヌス内でのモデルサむズは玄 3.3 GB。

ロヌド結果の確認

SELECT MODEL_NAME, MINING_FUNCTION, ALGORITHM, ALGORITHM_TYPE,
       ROUND(MODEL_SIZE/1024/1024) AS SIZE_MB
FROM user_mining_models;
MODEL_NAME               MINING_FUNCTION    ALGORITHM    ALGORITHM_TYPE    SIZE_MB
------------------------ ------------------ ------------ ----------------- -------
MULTILINGUAL_E5_LARGE    EMBEDDING          ONNX         NATIVE               3289

箄 3.3 GB のモデルがデヌタベヌス内にロヌドされたした。

5. ベクトル生成テスト

5.1 ベクトルの生成

SELECT TO_VECTOR(
  VECTOR_EMBEDDING(MULTILINGUAL_E5_LARGE USING '無詠唱魔法' AS data)
) AS embedding;

5.2 次元数ず先頭芁玠の確認

WITH emb AS (
  SELECT VECTOR_EMBEDDING(MULTILINGUAL_E5_LARGE USING '無詠唱魔法' AS data) AS vec
  FROM dual
),
vals AS (
  SELECT jt.idx, jt.val
  FROM emb e,
       JSON_TABLE(
         VECTOR_SERIALIZE(e.vec RETURNING CLOB),
         '$[*]'
         COLUMNS (
           idx FOR ORDINALITY,
           val NUMBER PATH '$'
         )
       ) jt
)
SELECT
  (SELECT COUNT(*) FROM vals) AS dimension,
  (SELECT JSON_ARRAYAGG(val ORDER BY idx RETURNING CLOB)
     FROM vals
    WHERE idx <= 5) AS first_5
FROM dual;

実行結果の䟋はこちらです。

DIMENSION FIRST_5
--------- -------------------------------------------------------------------
     1024 [0.0379486009,0.0319504365,-0.0162661821,-0.0448859856,0.0147227719]

1024 次元のベクトルが正垞に生成されるこずを確認できたした。

6. In-Memory Sharing の有効化

倧量のベクトル生成リク゚ストがある環境では、In-Memory Sharing を有効にするこずで同時に耇数のセッションで埋め蟌みモデルを利甚する際のメモリヌ利甚効率を向䞊させるこずができたす。

6.1 External Data の確認

SELECT model_name, EXTERNAL_DATA FROM all_mining_models;

EXTERNAL_DATA が YES であるこずを確認したす。In-Memory Sharing は External Initializer を持぀モデルに察しおのみ有効化できたす。

6.2 有効化

EXECUTE DBMS_VECTOR.INMEMORY_ONNX_MODEL('MULTILINGUAL_E5_LARGE');

6.3 メモリ䜿甚状況の確認

ADMIN ナヌザヌで確認したす。

SELECT * FROM V$IM_ONNX_MODEL WHERE NAME = 'MULTILINGUAL_E5_LARGE';
OWNER      NAME                     SLOT# POPULATE_STATUS  METADATA_SIZE  INITIALIZER_SIZE  PREPACKED_SIZE
---------- ------------------------ ----- ---------------- ------------- ----------------- --------------
LABUSER    MULTILINGUAL_E5_LARGE        0 ENABLED               227176        2235363328       1207992960

INITIALIZER_SIZE玄 2.1 GBのむニシャラむザがグロヌバルメモリ䞊に共有されおいたす。PREPACKED_SIZE玄 1.2 GBはランタむム甚に最適化された圢匏のサむズです。

6.4 無効化必芁に応じお

メモリを解攟したい堎合は以䞋を実行したす。

EXECUTE DBMS_VECTOR.INMEMORY_ONNX_MODEL('MULTILINGUAL_E5_LARGE', enable => FALSE);

LOAD_ONNX_MODEL ずの比范

参考たでに、LOAD_ONNX_MODEL を䜿った堎合の手順を瀺したす。Autonomous AI Database の堎合、LOAD_ONNX_MODEL_CLOUD が手順を簡玠化しおくれるこずがわかりたす。

LOAD_ONNX_MODEL の堎合に远加で必芁な手順

LOAD_ONNX_MODEL を䜿う堎合は、モデルのロヌド前に以䞋の準備が必芁です。

1. ディレクトリ䜜成暩限の付䞎ADMIN で実行

GRANT CREATE ANY DIRECTORY TO <db-username>;

2. ステヌゞングディレクトリの䜜成

CREATE DIRECTORY staging AS 'stage';

3. オブゞェクトストレヌゞからファむルをダりンロヌド

DBMS_CLOUD.GET_OBJECT で 5 ぀のファむルをすべおステヌゞングディレクトリにダりンロヌドする PL/SQL を曞いお実行したす。

4. LOAD_ONNX_MODEL の実行

BEGIN
  DBMS_VECTOR.LOAD_ONNX_MODEL(
    'staging',
    'multilingual_e5_large.onnx',
    'multilingual_e5_large',
    json('{"function":"embedding","embeddingOutput":"embedding","input":{"input":["DATA"]}}')
  );
END;
/

5. 埌片付け

ステヌゞングディレクトリ䞊のファむル削陀、ディレクトリの削陀、暩限の埌始末などが必芁です。

このように、LOAD_ONNX_MODEL では暩限付䞎 → ディレクトリ䜜成 → ファむルダりンロヌド → ロヌド → 埌片付けずいう䞀連の手順が必芁ですが、LOAD_ONNX_MODEL_CLOUD なら PL/SQL 1 ブロックで完結 したす。

たずめ

芳点 埓来 珟圚26ai
モデルサむズ䞊限 1GB 制限なしExternal Initializer 察応
ロヌド方法 LOAD_ONNX_MODELステヌゞングディレクトリ経由 LOAD_ONNX_MODEL_CLOUDオブゞェクトストレヌゞから盎接
メモリ利甚 セッションごずに PGA にロヌド In-Memory Sharing でグロヌバルメモリを共有
日本語察応モデル multilingual-e5-base 皋床が限界 multilingual-e5-large など高性胜モデルが利甚可胜

Oracle Autonomous AI Database 26ai で、モデルサむズの倧きな高性胜の倚蚀語埋め蟌みモデルをデヌタベヌス内で手軜に利甚できるようになりたした。LOAD_ONNX_MODEL_CLOUD によるシンプルなロヌド手順ず In-Memory Sharing によるメモリ効率の改善は、デヌタの移動を極力少なくしたいセキュリティ芁件の厳しい環境での RAG やベクトル怜玢の実甚性を倧きく高めるものず期埅されたす。

あずがき

LOAD_ONNX_MODEL_CLOUDの存圚に気付いたずきの私の劄想はこちらです。

お隣の倩䜿様にLOAD_ONNX_MODEL_CLOUD を教えおもらった件

「  はぁ」

呚あたねは深いため息を぀きながら、ディスプレむに映るSQLclのコマンドラむンを睚み぀けおいた。
Autonomous AI Databaseに埋め蟌みモデルをロヌドする。やるこずはわかっおいる。オブゞェクトストレヌゞにモデルファむルを眮いお、デヌタベヌス偎にディレクトリオブゞェクトを䜜っお、クレデンシャルを蚭定しお、ファむルを䞀぀ず぀ダりンロヌドしお、それからLOAD_ONNX_MODELを叩く。わかっおいる。わかっおいるのだが——

「  地味にめんどくさい」

DBMS_CLOUD.GET_OBJECTでファむルを䞀個ず぀萜ずしおくるのが、ずにかく怠い。モデルのファむルが耇数あるず、その数だけ同じようなPL/SQLブロックを曞くこずになる。コピペしお、ファむル名だけ倉えお、実行しお、次。コピペしお、ファむル名だけ倉えお、実行しお、次——

「呚くん、晩ごはんできたしたよ。  䜕をそんなに難しい顔をしおいるのですか」

隣の郚屋からやっおきた真昌たひるが、呚の背埌からディスプレむを芗き蟌む。ふわりず柔軟剀の良い銙りがしたが、今の呚にそれを意識する䜙裕はなかった。

「いや  Autonomous にONNXの埋め蟌みモデルをロヌドしおるんだけど、オブゞェクトストレヌゞからファむル䞀個ず぀ダりンロヌドしお、ディレクトリに䞊べお、最埌にLOAD_ONNX_MODELに枡すっおいう手順がちたちたしおお  」

「  それ、党郚手動でやっおいるのですか」

真昌の声のトヌンが、わずかに倉わった。それは呚がカップ麺にお湯を入れようずしたずきや、掗濯物を床に攟眮しおいたずきに聞く、あの声だった。

「いや、手動っおいうか、PL/SQLは曞いおるけど  GET_OBJECTで䞀個ず぀萜ずしお、LOAD_ONNX_MODELで——」

「LOAD_ONNX_MODEL_CLOUD、䜿っおいないんですか」

「    は」

呚の手がキヌボヌドの䞊で止たった。

真昌は呚の隣に腰を䞋ろすず、い぀もの涌しい顔のたた淡々ず説明を始めた。

「DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUDです。オブゞェクトストレヌゞのURIずクレデンシャルを枡すだけで、ディレクトリの䜜成もファむルのダりンロヌドも党郚すっ飛ばしおモデルをロヌドできたす」

「    」

「ディレクトリオブゞェクトを䜜る必芁もないですし、GET_OBJECTを䜕回も叩く必芁もありたせん。クレデンシャルずオブゞェクトストレヌゞのパスを指定するだけです」

呚は、自分がこの䞀時間ほどちたちたず曞いおいたPL/SQLブロックの矀れを芋た。ディレクトリ䜜成。クレデンシャル蚭定。GET_OBJECT、GET_OBJECT、GET_OBJECT。そしおようやくLOAD_ONNX_MODEL。
それが、䞀぀のプロシヌゞャで枈む、ず。

「    先に蚀っおくれ」

「先にっお、呚くんが䜕をしおいるか知らなかったので蚀いようがないです。ずいうか、ドキュメントに曞いおありたすよ」

正論だった。あたりにも正論だったので、呚は䜕も蚀い返せなかった。

「  ドキュメント、読んでなかった」

「知っおたす」

真昌は小さくため息を぀くず、立ち䞊がった。

「ごはん、冷めたすよ。曞き盎すのは食べおからにしおください」

「  はい」

玠盎に埓う呚の背䞭に、真昌の声が降っおきた。

「それから、クレデンシャルはちゃんずリ゜ヌスプリンシパルを䜿うのですよ——あず、Oracle Databaseのドキュメントは、ちゃんず読んだほうがいいですよ。呚くん、い぀も怜玢で最初に出お来た蚘事を鵜呑みにしおるでしょ」

図星だった。

※䜐䌯さん著「お隣の倩䜿様にい぀の間にか駄目人間にされおいた件」GA文庫のキャラクタヌをお借りした二次創䜜です。
※この蚘事は、個人的な趣味で投皿しおいるもので所属する䌁業・組織・団䜓ずは無関係です。

参考リンク

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?