Benutzer-Werkzeuge

Webseiten-Werkzeuge


ki:oracle_model_loading_vector_search_oml4py

Oracle Datenbank 23ai - Modelle für Vector Search über Python OML4Py bereitstellen und mit Hybrid Vector Search testen

Aufgabe:

Nach der Bereitstellung einer lokalen 23ai Umgebung sollen nun verschiedene Modell für einen Hybrid Vektor getestet werden.

Wie aber am einfachsten die passenden Modell im „Open Neural Network Exchange (ONNX)„ Format herunterladen?

Dafür wird der Oracle® Machine Learning for Python - OML4Py eingesetzt.

Nach der Installation des Clients können bereits hinterleget Modell heruntergeladen und in die Datenbank importiert werden.


Oracle 23ai lokal bereitstellen

Im ersten Teil wurde ein Hybird Vector mit einem „gefunden“ Model erfolgreich anlegt und getestet.

Dazu dient eine Oracle 23ai podman Container Installation unter Linux ⇒ siehe dazu Oracle Datenbank 23ai Free Edition über ein Container Image unter Linux 9 als Testumgebung für AI Vector Search verwenden


Python OML4Py Client bereitstellen

Um ein Model für Vektor Search zu laden, wird ein Model im ONNX Format benötigt.

Für das Handling dieser Modell kann das OML4Py Client Framework von Oracle verwendet werden.


Oracle Instant Client installieren

Um später auch die OML4Py Server Komponente zuzugreifen, wird der Instant Client als Oracle Basis Library installiert.

Da wir ein Oracle Linux 9 verwenden kann das gleich über ein Repo erfolgen:

dnf install oracle-instantclient-release-23ai-el9
 
# minmal  dnf install oracle-instantclient-odbc.x86_64
 
# alles, mit SQL*Plus zum debuggen der Verbindung!
dnf install oracle-instantclient-basic oracle-instantclient-odbc oracle-instantclient-sqlplus oracle-instantclient-tools
 
# wo landet das ganze?
 
rpm -ql oracle-instantclient-odbc.x86_64
 
***
/usr/lib/oracle/23/client64
***

siehe auch https://yum.oracle.com/repo/OracleLinux/OL9/oracle/instantclient23/x86_64/index.html


Python Update

!Python 3.12.3 is required to install and use OML4Py 2.0.1 client.!

Version prüfen:

python3 --version
Python 3.9.21

Gibt es für Linux 9 auch ein neueres Python?

siehe ⇒ https://yum.oracle.com/oracle-linux-python.html

dnf repolist
yum-config-manager --enable ol9_appstream
 
 
dnf install python3.12
dnf install python3.12-pip
 
python3.12 --version
Python 3.12.5

Version konfigurieren:

alternatives --install /usr/bin/python python /usr/bin/python3.12 10
alternatives --install /usr/bin/python python /usr/bin/python3.9 20
 
alternatives --config python
 
python --version
Python 3.12.5
 
alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 10
alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9  20
 
alternatives --config python3
 
python3 --version
 
# falls vertippt
# aufräumen und wieder von vorn anfangen .-)
# alternatives --remove-all python
# alternatives --remove-all python3

PIP upgarde

python3 -m pip install --upgrade pip  --no-warn-script-location --root-user-action ignore
Requirement already satisfied: pip in /usr/local/lib/python3.12/site-packages (25.0.1)

Installation Libs und Python Bibliotheken

Notwendendige Libs installieren:

Als root:

dnf install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel

Python Libs installieren:

vi requirements.txt
 
--extra-index-url https://download.pytorch.org/whl/cpu
pandas==2.1.1
setuptools==68.0.0
scipy==1.12.0
matplotlib==3.8.4
oracledb==2.2.0
scikit-learn==1.4.1.post1
numpy==1.26.4
onnxruntime==1.17.0
onnxruntime-extensions==0.10.1
onnx==1.16.0
torch==2.2.0
transformers==4.38.1
sentencepiece==0.2.0

Mit PIP installieren:

pip3.12 install -r requirements.txt

OML4Py Client

Den Client installieren wir ganz klassisch unter /opt/oracle/products/OML4Py als Oracle User.

Über die Seite https://www.oracle.com/database/technologies/oml4py-downloads.html den OML4Py 2.0.1 Client für die 23ai herunterladen

Über den Link wird man auf edelivery weiter leitet und kann „V1045139-01.zip OML4Py 2.0.1 client for (Linux x86-64), 8.3 MB“ herunterladen

V1045139-01.zip		
OML4Py 2.0.1 client for (Linux x86-64), 8.3 MB
	SHA-1		D7C740CDD851A7EDC1BBB9D8D03BBF46BE290C3E
	SHA-256		0350CB27A2DEF31708813EBB3AD73F6054D2FD1EC4C806556853253C9C2E620C

Wie gewohnt nach dem Download den SHA prüfen ob es wirklich die richtige Datei ist!

Installation als User Oracle

su  - oracle
cd /opt/oracle/
mkdir install
cd /opt/oracle/install
 
cp /tmp/V1045139-01.zip .
 
sha1sum V1045139-01.zip
d7c740cdd851a7edc1bbb9d8d03bbf46be290c3e  V1045139-01.zip
 
unzip V1045139-01.zip
Archive:  V1045139-01.zip
  inflating: client/client.pl
  inflating: client/OML4PInstallShared.pm
  inflating: client/oml-2.0-cp312-cp312-linux_x86_64.whl
  extracting: client/oml4py.ver

Installation starten:

Client Verzeichnis anlegen und Pfad auch auf /usr/local/bin setzen (falls nicht eh enthalten):

mkdir -p /opt/oracle/products/OML4Py
 
export PATH=$PATH:/usr/local/bin
# am besten gleich mit in die .bash_profile aufnehmen!

1.Versuch

 perl -Iclient client/client.pl --help
Can't locate File/Copy.pm in @INC (you may need to install the File::Copy module) (@INC contains: client /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at client/OML4PInstallShared.pm line 60.
BEGIN failed--compilation aborted at client/OML4PInstallShared.pm line 60.
Compilation failed in require at client/client.pl line 32.
BEGIN failed--compilation aborted at client/client.pl line 32.

Eine Perl Bibliothek fehlt:

#als root
dnf install perl-File-Copy-Recursive-Reduced

2.Versuch

perl -Iclient client/client.pl --help
 
Oracle Machine Learning for Python 2.0 Client.
 
Copyright (c) 2018, 2024 Oracle and/or its affiliates. All rights reserved.
Usage: client.pl [OPTION]...
Install, upgrade, or uninstall OML4P Client.
 
  -i, --install             install or upgrade (default)
  -u, --uninstall           uninstall
  -y                        never prompt
  --ask                     interactive mode (default)
  --no-embed                do not install embedded python functionality
  --no-deps                 turn off dependencies checking
  --target <dir>            install client into <dir>
perl -Iclient client/client.pl --target /opt/oracle/products/OML4Py
 
 
Oracle Machine Learning for Python 2.0 Client.
 
Copyright (c) 2018, 2024 Oracle and/or its affiliates. All rights reserved.
Checking platform .................. Pass
Checking Python .................... Pass
Checking dependencies .............. /opt/oracle/install/check_deps.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://en/latest/pkg_resources.html
  from pkg_resources import WorkingSet, VersionConflict, DistributionNotFound
Fail
  ERROR: Install version 1.26.4 or higher of numpy at client/client.pl line 141.

Darauf achten das zuvor auch alle Pyhton Libs installiert installiert wurden!

3.Versuch

export PATH=$PATH:/usr/local/bin
# am besten gleich mit in die .bash_profile aufnehmen!
 
perl -Iclient client/client.pl --target /opt/oracle/products/OML4Py
 
 
Oracle Machine Learning for Python 2.0 Client.
 
Copyright (c) 2018, 2024 Oracle and/or its affiliates. All rights reserved.
Checking platform .................. Pass
Checking Python .................... Pass
Checking dependencies .............. /opt/oracle/install/check_deps.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import WorkingSet, VersionConflict, DistributionNotFound
Pass
Checking OML4P version ............. Pass
Current configuration
  Python Version ................... 3.12.5
  PYTHONHOME ....................... /usr
  Existing OML4P module version .... None
  Installation location ............ /opt/oracle/products/OML4Py
 
  Operation ........................ Install/Upgrade
 
Proceed? [yes]yes
 
Processing ./client/oml-2.0-cp312-cp312-linux_x86_64.whl
Installing collected packages: oml
Successfully installed oml-2.0
 
Done

Damit ist die Python oml Bibliothek auf der Maschine verfügbar.


Erster Aufruf der oml Klassen um damit die verfügbare Modelle an zu zeigen

Im python3 Interpreter wird die oml Bibliothek importiert und dann können die entsprechenden Klassen aufgerufen werden:

cd /opt/oracle/products/OML4Py
 
# Interpreter starten
python3
 
# Abfragen
 
>>> import oml
 
>>> oml
<module 'oml' from '/opt/oracle/products/OML4Py/oml/__init__.py'>
 
>>> oml.EmbeddingModelConfig.show_preconfigured()
 
['sentence-transformers/all-mpnet-base-v2'
, 'sentence-transformers/all-MiniLM-L6-v2'
, 'sentence-transformers/multi-qa-MiniLM-L6-cos-v1'
, 'ProsusAI/finbert'
, 'medicalai/ClinicalBERT'
, 'sentence-transformers/distiluse-base-multilingual-cased-v2'
, 'sentence-transformers/all-MiniLM-L12-v2'
, 'BAAI/bge-small-en-v1.5'
, 'BAAI/bge-base-en-v1.5'
, 'taylorAI/bge-micro-v2'
, 'intfloat/e5-small-v2'
, 'intfloat/e5-base-v2'
, 'prajjwal1/bert-tiny'
, 'thenlper/gte-base'
, 'thenlper/gte-small'
, 'TaylorAI/gte-tiny'
, 'infgrad/stella-base-en-v2'
, 'sentence-transformers/paraphrase-multilingual-mpnet-base-v2'
, 'intfloat/multilingual-e5-base'
, 'intfloat/multilingual-e5-small'
, 'sentence-transformers/stsb-xlm-r-multilingual'
, 'microsoft/codebert-base'
, 'Snowflake/snowflake-arctic-embed-xs'
, 'Snowflake/snowflake-arctic-embed-s'
, 'Snowflake/snowflake-arctic-embed-m'
]

Ein Model herunterladen

Über den Interpreter Aufruf kann dann auch das gewünschte Model in unsere Datenbank Import Verzeichnis ( in unseren Fall /opt/oracle/datadump auf dem Host, das Verzeichnis ist zuvor in den 24ai Container gemappt worden und in der 23ai PPB als Directory hinterlegt) im ONNX Format geladen werden.

cd /opt/oracle/products/OML4Py
 
# Interpreter aufrufen
python3
 
 
# oml Klassen für den Download verwenden 
>>> from oml.utils import EmbeddingModel, EmbeddingModelConfig
>>> em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")
>>> em.export2file("all-MiniLM-L6-v2.onnx", output_dir="/opt/oracle/datadump")
/usr/local/lib/python3.12/site-packages/huggingface_hub/file_download.py:797: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.
  warnings.warn(
tokenizer_config.json: 100%|███████████████████████████████████████████████████████████████████████████████████| 350/350 [00:00<00:00, 1.15MB/s]
vocab.txt: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 232k/232k [00:00<00:00, 3.67MB/s]
special_tokens_map.json: 100%|██████████████████████████████████████████████████████████████████████████████████| 112/112 [00:00<00:00, 292kB/s]
tokenizer.json: 100%|████████████████████████████████████████████████████████████████████████████████████████| 466k/466k [00:00<00:00, 10.4MB/s]
config.json: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 612/612 [00:00<00:00, 1.52MB/s]
model.safetensors: 100%|███████████████████████████████████████████████████████████████████████████████████| 90.9M/90.9M [00:04<00:00, 18.5MB/s]
>>>
>>> quit()

Was wurde angelegt:

ls -la 
 
ls -la /opt/oracle/datadump
..
rw-r--r-- 1 oracle oinstall  90621438 Mar 18 21:33 all-MiniLM-L6-v2.onnx.onnx
..

Model in die Datenbank laden

In der PDB als GPI User anmelden und Modell einlesen.

Anmelden:

sqlplus gpi@//10.10.10.118:1521/freepdb1

Model einlesen:

-- löschen falls schon existiert!
BEGIN
   DBMS_VECTOR.DROP_ONNX_MODEL (model_name => 'ALL_MINILM_L6_V2', force => TRUE);
END;
/
 
 
--einlesen
BEGIN
 DBMS_VECTOR.LOAD_ONNX_MODEL(
     directory  => 'DATA_EXCHANGE'
    ,file_name  => 'all-MiniLM-L6-v2.onnx.onnx'
    ,model_name => 'ALL_MINILM_L6_V2'
    ,metadata   => JSON ('{ "function" : "embedding", "embeddingOutput" : "embedding", "input": { "input": ["DATA"] } }')
  );
END;
/
 
 
SELECT * FROM user_mining_models;
 
ALL_MINILM_L6_V2	EMBEDDING	ONNX	NATIVE	18.03.2025 20:42	0	90621438	NO

Einen Hybrid Vektor anlegen

In der PDB als GPI User anmelden und Vector Index mit dem neuen Model anlegen.

Anmelden:

sqlplus gpi@//10.10.10.118:1521/freepdb1

Nun kann versucht werden einen Hybrid Vektor mit dem zuvor geladenen Model ALL_MINILM_L6_V2 anzulegen:

DROP INDEX IDX_HV_TEXTE;
INDEX IDX_HV_TEXTE dropped.
 
CREATE HYBRID VECTOR INDEX IDX_HV_TEXTE ON TEXTE  (TEXT) PARAMETERS ('MODEL ALL_MINILM_L6_V2');
Hybrid VECTOR created.

Abfragen:

SELECT 
   DBMS_HYBRID_VECTOR.SEARCH( 
         JSON( '{  "hybrid_index_name" : "IDX_HV_TEXTE" 
                 , "search_text" : "Katze" } ' 
            ) 
      )
FROM DUAL;
 
[{"rowid":"AAARdvAAAAAAAMLAAC","score":67.05,"vector_score":73.35,"text_score":4,"vector_rank":1,"text_rank":1,"chunk_text":"Die Katze auf dem Dach","chunk_id":"1"}
,{"rowid":"AAARdvAAAAAAAMLAAB","score":65.25,"vector_score":71.38,"text_score":4,"vector_rank":2,"text_rank":1,"chunk_text":"Die liebsten Haustiere sind Katze und Hund","chunk_id":"1"}
,{"rowid":"AAARdvAAAAAAAMLAAA","score":51.86,"vector_score":57.05,"text_score":0,"vector_rank":3,"text_rank":80,"chunk_text":"Ein Hund steht neben der Hütte","chunk_id":"1"}]
Ergebnis des Versuches, eine Hybrid Vektor Testumgebung mit einem Container Image der 23ai scheint möglich zu sein, der Vortrag bei der APEX Connect 2025 über das Thema wird das weiter ausarbeiten

Wie diese Modelle nun einschätzen und vergleichen?

Für einen Datenbank Entwickler wird es nun sehr schwierig die Modelle einzuschätzen.

Beim Vergleich von Sentence Transformer Modellen für Vektor Search gibt es mehrere wichtige Metriken und Methoden, um ihre Qualität zu bewerten, wie nDCG, MRR, Recall@k, Geschwindigkeitstests und manuelle Stichproben um die Modelle zu verglichen und vieles mehr. Und zusätzlich zum ganzen … wie verhält sich am Ende das in einer Oracle Datenbank verhält bzgl. Performance und Speicherplatz etc.

D.h. jetzt wird es kompliziert …..

Zumal auch die Text Sprache (Deutsch / Englisch etc.) eine entscheidende Rolle bzgl. der Qualität der, meist in Englisch, trainierten Modelle spielt.

Mehr Informationen dazu:


Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
ki/oracle_model_loading_vector_search_oml4py.txt · Zuletzt geändert: 2025/04/01 21:55 von gpipperr