ã¯ããã«
Oracle Database 26aiïŒ23.26.1ïŒãããONNX 圢åŒã®åã蟌ã¿ã¢ãã«ã®ãµã€ãºå¶éïŒåŸæ¥ã¯ 1GB äžéïŒãæ€å»ãããmultilingual-e5-large ã®ãããªé«æ§èœãªå€èšèªå¯Ÿå¿ã¢ãã«ãããŒã¿ããŒã¹å
ã«ããŒãã§ããããã«ãªããŸããã
以åã®èšäºã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 ã®å Žåãããã¯ä»¥äžã®ãããªæéãæå³ããŸãã
-
CREATE ANY DIRECTORYæš©éã®ååŸ - ãã£ã¬ã¯ããªã®äœæ
-
DBMS_CLOUD.GET_OBJECTã«ããå šãã¡ã€ã«ã®ããŠã³ããŒã -
LOAD_ONNX_MODELã®å®è¡ - åŸçä»ãïŒãã£ã¬ã¯ããªäžã®ãã¡ã€ã«ã»ãã£ã¬ã¯ããªã®åé€ïŒ
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 ãã¡ã€ã«ãäœæããŸãã
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 ã¹ã¯ãªãããçšæããŸãã
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æåº«ïŒã®ãã£ã©ã¯ã¿ãŒããåãããäºæ¬¡åµäœã§ãã
â»ãã®èšäºã¯ãå人çãªè¶£å³ã§æçš¿ããŠãããã®ã§æå±ããäŒæ¥ã»çµç¹ã»å£äœãšã¯ç¡é¢ä¿ã§ãã
åèãªã³ã¯
- Oracle AI Database New Features - ONNX Support
- DBMS_VECTOR - LOAD_ONNX_MODEL_CLOUD
- LOAD_ONNX_MODEL_CLOUD ãªãã¡ã¬ã³ã¹ïŒOracle AI Vector Search User's GuideïŒ
- About ONNX - External Initializers and In-Memory Sharing
- Support For Large ONNX Format ModelïŒOML4PyïŒ
- OML4Py 2.1.1 ããŠã³ããŒã
- Oracle Autonomous Database ã§ In-database åã蟌ã¿ã¢ãã«ã䜿ã£ãŠãã¯ãã«ãçæããïŒååèšäºïŒ
- Oracle AI DB 26aiãé«ç²ŸåºŠEmbeddingã¢ãã«ã®ONNXã€ã³ããŒãã«å¯Ÿå¿ããã®ã§è©ŠããŠã¿ãïŒ@ssfujita ããã®èšäºïŒ
