はじめに
Oracle AI Database 26aiでマルチモーダルembeddingするためのCLIP ONNX(オニキス)のepxportをなるべく簡単に早く実施する方法をまとめてみました。
ONNXをOracle AI Database 26aiに組み込むことで、Oracle AI Database上でembeddingが可能となります。
※ この記事は技術の詳細な説明を省き、とにかく早く、Oracle AI Database 26aiに組み込むためのマルチモーダル埋め込み用ONNXファイルを手に入れることに特化しています。
所要時間
40分程度
前提
- OCIアカウントが利用可能であること
- OCI Computeサービスを利用できること
- ローカルPCはWindows、エディタはVS Codeを利用
ゴール
CLIP(マルチモーダル)のONNXファイルをゲットすること
- clip_img.onnx (画像embeddingモデル)
- clip_txt.onnx (テキストembeddingモデル)
これらのモデルはCLIP(Contrastive Language-Image Pre-training)モデルに基づいて、画像とテキストを同じベクトル空間にベクトル化(Embedding)します。
これにより、画像↔画像、テキスト↔テキストだけでなく、
画像↔テキストのマルチ―モーダル類似度検索が可能となります。
参考リンク
Qiita
- https://qiita.com/msasakaw/items/b5fb048b80a46c35b668
- https://qiita.com/kenwatan/items/153f0f6d2385fffaf606
- https://qiita.com/yuji-arakawa/items/e43e0ad9f0f033fd55ab
ドキュメント
1. OCI コンピュート インスタンスの作成
下記の「OCIチュートリアルその3」を参考にコンピュートを作成します。
https://oracle-japan.github.io/ocitutorials/beginners/creating-compute-instance/
1-1. インスタンスの基本設定
-
OCIコンソールでComputeインスタンスの作成を開始します。
-
最重要ポイント:イメージの選択
「イメージの変更」をクリックし、「イメージの選択」から「Oracle Linux Cloud developer 8」を選択します。
この開発者向けイメージには必要な環境がプリインストールされており、セットアップ時間を大幅に短縮できます。
Oracle Linux Cloud developer
-
シェイプはVM.Standard.E4.Flexなど、Oracle Linux Cloud developerと互換性があれば何でも問題ありません。
1-2. ストレージの確保
デフォルトのブートボリューム(約36GB)では容量不足になる可能性があるため、100GBに拡張します。
「ブート・ボリュームのアタッチ」>「新規ボリュームの作成」を選択します。
2. VS Codeでインスタンスに接続
ローカルのVisual Studio Code(VS Code)を使い、リモートでOCIインスタンスに接続することで、ファイル操作やコマンド実行をスムーズに行えます。
2-1. Remote Explorerのインストールと設定
-
VS Codeの拡張機能から「Remote Explorer」をインストールします。
https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-explorer -
Remote Explorerインストール完了後にRemote Explorerのアイコン(プラグのようなマーク)をクリックし、「SSHの設定」ボタンを押して~/.ssh/configファイルを選択します。
.ssh\configファイルに下記のような設定を記入します。
- Host:任意
- HostName:インスタンスのpublic IP addressを指定
- User:opc
- port:22
- IdentityFile:1.で作成したインスタンスの秘密鍵のパスを指定
Host create-onnx-instance
HostName xxx.xxx.xxx.xxx
User opc
port 22
IdentityFile "C:\path\to\private\key\ssh-key-xxxxx.key"
2-2. SSH接続の開始
リロードボタンを押し、create-onnx-instanceのConnect New Windowボタンを押します。
下記の画像の通り、Linux、Continueを選択し、SSH接続します。
接続が完了したらVS Code画面左のファイルアイコンからOpen Foloderを選択し、デフォルトのホームディレクトリ(/home/opc)を開きます。

3. OML4Pyの準備
こちらの記事を参考にします。
Oracle Databaseに学習済みモデルをONNXフォーマットでimportするには、 OML4Pyを使ったONNXのexportが必要です。(OML4Py以外でexportされたONNXフォーマットはImportできない・・・)
とのことなのでOML4Pyをインストールします。
3-1. OML4Py Serverモジュールのダウンロード
Oracle Technology NetworkからOracle Machine Learning for Python をダウンロードページにアクセスし、Serverモジュールをダウンロードします。
https://www.oracle.com/database/technologies/oml4py-downloads.html
出来上がったzipファイルを展開すると、clientフォルダの中にファイルが4個入っています。
後で使うので取っておきます。

4. OCI コンピュート インスタンスに各種インストール
Visual Studio Codeに戻り、1.で作成したインスタンスに対して操作します。
VS Codeのターミナルで、ONNXエクスポートのためのPython仮想環境を構築します。
下記の記事にならって、Python仮想環境を作成します。
4-1. 仮想環境の作成と有効化
ターミナルで下記を実行します。
[opc@create-onnx-instance ~]$ mkdir oml4py
[opc@create-onnx-instance ~]$ cd oml4py/
[opc@create-onnx-instance oml4py]$ python3.12 -m venv .venv
[opc@create-onnx-instance oml4py]$ source .venv/bin/activate
(.venv) [opc@create-onnx-instance oml4py]$
4-2. 依存パッケージリストの作成とインストール
下記を実行してrequirements.txtを作成します。
cat <<EOF > requirements.txt
--extra-index-url https://download.pytorch.org/whl/cpu
pandas==2.2.2
setuptools==70.0.0
scipy==1.14.0
matplotlib==3.8.4
oracledb==2.4.1
scikit-learn==1.5.1
numpy>=2.0.1
onnxruntime==1.20.0
onnxruntime-extensions==0.12.0
onnx==1.17.0
torch==2.6.0
transformers==4.49.0
sentencepiece==0.2.0
EOF
作成されたrequirements.txtからoml4pyの依存パッケージのインストールします。
pip install -r requirements.txt
4-3. OML4Pyクライアントファイルのアップロード
oml4pyフォルダの中にclientフォルダを作成します。
このclientフォルダの中に先ほど2.で作成した4つのファイル群をドラッグ・アンド・ドロップでアップロードします。
4-5. OML4Pyの環境設定スクリプトを実行
下記を実行します。
(.venv) [opc@create-onnx-instance oml4py]$ perl -Iclient client/client.pl
5. ONNXモデルのexport
oml4pyフォルダにexportONNX.pyファイルを作成します。
こちらのドキュメントの
1. Exporting a pre-configured image model to a file:
のpythonプログラムをexportONNX.pyにコピーして実行します。
exportONNX.pyを開き、先ほどのコードを貼り付けます。
from oml.utils import ONNXPipeline
pipeline = ONNXPipeline("openai/clip-vit-large-patch14")
pipeline.export2file("clip")
exportONNX.pyを実行します。
(.venv) [opc@create-onnx-instance oml4py]$ python exportONNX.py
実行が完了すると2つのファイルが生成されます。
- clip_img.onnx
- clip_text.onnx
VS Codeで2つのファイルをそれぞれ右クリックしてダウンロードします。

二つのファイルを手に入れることができました!
以上の手順が地味に時間がかかるので、この二つのONNXは大事に大事に取っておきましょう!

~20026/01/21追記~
ついでに、その他のONNXもダウンロードしてみましょう。
こちらを参考に他のONNXをダウンロードします。
https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/onnx-pipeline-models-text-embedding.html#GUID-E7C08BA2-B2B9-4081-9050-B9EB3EA46FA6
下記のコードで、どのモデルが利用できるか確認します。
from oml.utils import ONNXPipeline, ONNXPipelineConfig
# 事前構成済モデル
preconfigured = ONNXPipelineConfig.show_preconfigured()
print("\n----- 事前構成済モデルのリスト -----")
for i, model in enumerate(preconfigured, start=1):
print(f"{i}. {model}")
# 使用可能なテンプレート
templates = ONNXPipelineConfig.show_templates()
print("\n----- 使用可能なテンプレートのリスト -----")
for i, template in enumerate(templates, start=1):
print(f"{i}. {template}")
----- 事前構成済モデルのリスト -----
1. sentence-transformers/all-mpnet-base-v2
2. sentence-transformers/all-MiniLM-L6-v2
3. sentence-transformers/multi-qa-MiniLM-L6-cos-v1
4. sentence-transformers/distiluse-base-multilingual-cased-v2
5. sentence-transformers/all-MiniLM-L12-v2
6. BAAI/bge-small-en-v1.5
7. BAAI/bge-base-en-v1.5
8. taylorAI/bge-micro-v2
9. intfloat/e5-small-v2
10. intfloat/e5-base-v2
11. thenlper/gte-base
12. thenlper/gte-small
13. TaylorAI/gte-tiny
14. sentence-transformers/paraphrase-multilingual-mpnet-base-v2
15. intfloat/multilingual-e5-base
16. intfloat/multilingual-e5-small
17. sentence-transformers/stsb-xlm-r-multilingual
18. Snowflake/snowflake-arctic-embed-xs
19. Snowflake/snowflake-arctic-embed-s
20. Snowflake/snowflake-arctic-embed-m
21. mixedbread-ai/mxbai-embed-large-v1
22. openai/clip-vit-large-patch14
23. google/vit-base-patch16-224
24. microsoft/resnet-18
25. microsoft/resnet-50
26. WinKawaks/vit-tiny-patch16-224
27. Falconsai/nsfw_image_detection
28. WinKawaks/vit-small-patch16-224
29. nateraw/vit-age-classifier
30. rizvandwiki/gender-classification
31. AdamCodd/vit-base-nsfw-detector
32. trpakov/vit-face-expression
33. BAAI/bge-reranker-base
----- 使用可能なテンプレートのリスト -----
1. image_convnext
2. image_vit
3. multimodal_clip
4. text
次にONNXを出力するコードを実行します。
ここでは、先ほどのリスト一覧の中から「15. intfloat/multilingual-e5-base」を作ってみます。
from oml.utils import ONNXPipeline, ONNXPipelineConfig
# ① パイプラインの設定
config = ONNXPipelineConfig.from_template(
"text", # テキスト入力用パイプライン
max_seq_length=256, # 文章最大長(トークン数)
distance_metrics=["COSINE"], # 類似度計算にCOSINEを使用
quantize_model=True # 量子化して軽量化(高速化)
)
# ② パイプラインの作成
pipeline = ONNXPipeline(
model_name="intfloat/multilingual-e5-base", # ここに使用モデル名
config=config
)
# ③ ファイルとしてエクスポート
pipeline.export2file(
"multilingual-e5-base-text", # このモデルの名前(任意、Oracle側で識別用)
output_dir="." # 保存先ディレクトリ
)















