※ 本記事は、Doug Hoodによる”Getting Started with the Vector Index Service – Part 2“を翻訳したものです。
2026年7月23日
はじめに
このシリーズには二つのブログがあります:
- パート1では、Private AI Services ContainerでのVector Index Serviceのインストールと構成について説明します
- パート2では、Oracle AI Database 23.26.2でのVector Index Serviceの構成について説明します
このブログ(パート2)では、GPUを使用してOracle AI Database 26aiでのベクトル索引の作成をオフロードする方法について説明します。ベクトル索引の作成は、CPUを使用したリソース集約的で時間がかかるため、このタスクをリモート・マシン上のGPUにオフロードして、Oracle AI Database 26aiのCPUリソースを解放できます。ボーナスとして、GPUでのベクトル索引の作成を大幅に高速化できます。

Private AI Services Containerは、お客様のデータ・センターで実行するように設計されていますが、Linux x86-64コンテナを使用してパブリック・クラウドで実行することもできます。
コンテンツ
このブログは以下の分野をカバーしています
- OCIでのOracle AI Database 26ai Freeの使用
- VM for Oracle AI Database 26ai Freeの作成
- ブート・ボリュームのサイズ変更
- Oracle AI Database Free 23.26.2のインストールと構成
- Vector Index Service用のOracle AI Databaseの構成
- 表の作成およびベクトルのロード
- Vector Index Serviceを使用しないベクトル索引の作成
- Vector Index Serviceを使用したベクトル索引の作成
前提条件
このブログの例では、Oracle Cloud Infrastructure (OCI)で2つの仮想マシンを使用しました:
- Oracle AI Database 23.26.2.0.0.0用のVM
- Private AI Services Container gpu-index-26.1.0.0.0用のGPU VM

データベースVMにはホスト名dbfreeが含まれ、GPU VMにはホスト名gpuvmが含まれます。
ディスク領域の問題を回避するために、両方のVMでブート・ボリュームが100 GBに拡張されています。Private AI Services ContainerはOracle AI Databaseと同じマシンで実行できますが、リソース・オフロードのポイント全体は、Oracle AI DatabaseのCPU使用率を減らすために別のマシンで実行することであり、ボーナスとしてベクトル索引をより迅速に作成することです。
Oracle AI Database 26ai 23.26.2およびハイエンドGPUのEnterprise Editionを使用できましたが、使用開始のコストを最小限に抑えるために、データベースVMにOracle AI Database 26ai Freeを使用し、Private AI Services Containerにサポートされている最小のOCI GPU VM (VM.GPU.A10.1)を使用しました。GPU VMとデータベースVMの両方がOracle Linux 9.7を使用していますが、Oracle Linux 8.10を使用することはできました。
Oracle Private AI Services Containerをインストールするための詳細な前提条件は、公式ドキュメントに記載されています。
OCIでのOracle AI Database 26ai Freeの使用
Vector Index ServiceがPrivate AI Services Containerで稼働しているので、今こそデータベース側で作業する時です。
Oracle AI Database 26ai Free用のVMの作成
Vector Index Serviceは、Oracle AI Database 23.26.2のEnterprise EditionとFreeバージョンの両方で機能します。Vector Index Serviceを学習しながらコストを最小限に抑えるには、Oracle AI Database 26ai Freeを使用します。

Oracle Linux 9で24 GBのRAMを備えた、dbfreeというVM.Standard.E5.Flexコンピュート・シェイプを使用する2 OCPUのVMを使用します。
ディスク領域が不足しないように、100 GBのカスタム・ブート・ボリューム・サイズを使用します。

ブート・ボリュームのサイズ変更
dbfree仮想マシンにssh接続したら、ブート・ボリューム・ストレージをフル・サイズに拡張します。
sudo /usr/libexec/oci-growfs -y
df -h

これにより、/マウント・ポイントに約73 GBの使用可能なディスク領域が残ります。
Oracle AI Database 26ai Freeのインストールと構成
RPMインストール方法を使用して、Oracle AI Database Freeバージョン23.26.2をインストールできます。
RPMのインストール方法はX-Windowsユーザー・インタフェースを必要としないため、ヘッドレス・クラウドのインストールに便利です。
Vector Index Service用のOracle AI Databaseの構成
HNSW索引のためにSGA内のベクトル・プールを設定し、データベースを再起動する必要があります。
sqlplus / as sysdba
ALTER SYSTEM SET vector_memory_size = 1024M SCOPE=SPFILE;
shutdown
startup
show parameter vector_memory_size;
alter pluggable database all open;
exit

これにより、Oracle AI Database Freeの残りのSGAおよびPGAには1 GBしか残りませんが、HNSWベクトル索引用に数百万のベクトルを使用できるよう、十分なサイズのベクトル・プールを確保したいと考えました。
tnsnames.oraの更新
tnsnames.oraを更新して、PDBのサービス名 (freepdb1)を含めます。
cd $TNS_ADMIN
vi tnsnames.ora
cd


DBユーザーの作成および権限の付与
sqlplus sys@freepdb1 as sysdba
create user vector identified by <MY_VECTOR_PASSWORD> default tablespace users quota unlimited on users;
grant DB_DEVELOPER_ROLE to vector;
exit
ベクトルを作成するための表およびPLSQLパッケージの作成
『AI Vector Searchユーザーズ・ガイド』でサンプルgenvec表およびPLSQLパッケージを作成します。
ドキュメントからgenvec表を作成するには、「Copy」ボタンを使用します。
sqlplus vector/<MY_VECTOR_PASSWORD>@freepdb1

vector_gen_pkg PLSQLパッケージ仕様を作成するには、「Copy」ボタンを使用します。

「Copy」ボタンを使用して、vect_gen_pkg PLSQLパッケージ本体を作成します。

genv.sqlというPLSQLスクリプトを作成
次のスクリプトを使用すると、Vector Index Serviceをテストするための320万のベクトルを生成できます。320万を超えるベクトルを使用すると、Oracle AI Database 26ai Freeのベクトル・プールには収まりません。これは、SGAとPGAを組み合せた場合に2 GBの制限があるためです。Oracle AI Database 23.26.2のEnterprise Editionは、大規模なHNSWベクトル索引に使用します。
vi genv.sql
set timing on;
BEGIN
vector_gen_pkg.generate_vectors(
num_vectors => 1600000,
dimensions => 2,
num_clusters => 6,
cluster_spread => 1,
min_value => 0,
max_value => 100
);
END;
/
exit
2つのsshウィンドウを使用して、3.2Mベクトルをパラレルに作成
Oracle AI Database 26ai Freeでは2つのフォアグラウンド・プロセスしか許可されないため、2つ以上の同時セッションを使用すると、320万ベクトルの作成にかかる時間が短縮されることはありません。これらの2つのデータベース・セッションを使用して1.6Mベクトルを作成すると、それぞれ約5分かかるため、ベクトルがデータベースにロードされるまでコーヒーでも飲んでお待ちください。
1つのsshウィンドウで、ユーザー・ベクトルとして160万のベクトルを作成します:
sqlplus vector/<MY_VECTOR_PASSWORD>@freepdb1
@genv

もう1つのsshウィンドウで、ユーザー・ベクトルと同じgenvスクリプトを実行して、2番目の160万ベクトルをロードします。両方のセッションで160万のベクトルがロードされると、genvec表に320万のベクトルがロードされます。
Vector Index Serviceを使用しないHNSW索引の作成
ベースラインとして、GPUアクセラレーションなしでHNSW索引を作成します。
vi idx.sql
set timing on;
drop index my_hnsw_idx;
CREATE VECTOR INDEX my_hnsw_idx ON genvec(v)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
PARAMETERS (
TYPE HNSW,
NEIGHBORS 32,
EFCONSTRUCTION 200
);


sqlplus vector@freepdb1
@idx

GPUを使用せずにHNSW索引を作成する時間は、OCIのdbfree VMシェイプを使用した場合、24分から40分程度になることがあります。この大きな時間差は、仮想マシンのノイジー・ネイバーが原因で発生する傾向があります。
gpuvmに証明書をコピー
gpuvmからVM dbfree上の/home/oracleディレクトリに証明書をコピーします
scpまたはsftpを使用して、gpuvm VMからdbfree VMにファイルをコピーできます。
注意 証明書はPrivate AI Servics Containerのインストール時に自動的に作成され、cert.pemファイルの内容は類似していますが、マシン上のものとは異なります。
Walletの作成と証明書の追加
Oracle AI Database 26aiでは、Private AI Services ContainerのVector Index Serviceと通信する際に、ウォレットを使用してSSL (TLS 1.3)を使用する必要があります。次に、ウォレットを作成し、それにデジタル証明書を追加します。
mkdir -p /home/oracle/wallets
orapki wallet create -wallet /home/oracle/wallets/cwallet.sso -pwd <MY_WALLET_PASSOWRD> -auto_login
orapki wallet add -wallet /home/oracle/wallets/cwallet.sso -trusted_cert -cert /home/oracle/cert.pem -pwd <MY_WALLET_PASSOWRD>

CDB SYSユーザーとして、Walletの場所を定義
sqlplus / as sysdba
ALTER DATABASE PROPERTY SET ssl_wallet='file:/home/oracle/wallets/cwallet.sso';
exit
データベース資格証明値の決定
gpuvmで、Private AI Services ContainerのAPI KEYの値を決定します。このAPI KEYは、リクエストを認証するために必要です。
コンテナのシークレット・ストアからAPIキー値を取得します。これは、$SECRETS_DIR/api-keyファイルの内容です。
関連するデータベース権限の付与
dbfree VMで、PDB SYSユーザーとして次の手順を実行します:
sqlplus sys@freepdb1 as sysdba
grant create credential to vector;
grant execute on dbms_network_acl_admin to vector;
exit

API KEYのデータベース資格証明の設定
PDBベクトル・ユーザーとして、Private AI Services Containerのapi-keyの値を使用します:
setkey.sqlという名前のファイルを作成
vi setkey.sql
access_tokenの値をgpuvmのapi-keyファイルの値に置き換えます。APIキーの値は、Private AI Services Containerのインストール時に生成するために使用した値とは異なることに注意してください。
DECLARE
jo json_object_t := json_object_t();
BEGIN
jo.put('access_token', '<ACCESS_TOKEN>');
dbms_vector.create_credential(
credential_name => 'MYCREDENTIALNAME',
params => json(jo.to_string));
END;
/
exit
sqlplus vector@freepdb1
@setkey

許可されるアウトバウンド・ネットワーク・エンドポイントの定義
Private AI Services Containerのホスト名の取得
hostname -f

net.sqlというファイルを作成し、必要に応じてhost、principal_name (DBユーザー)およびwallet_pathの値を更新します。VCN名が異なるため、あなたのホスト (hostname)は私のものとは異なります。
vi net.sql
BEGIN
dbms_network_acl_admin.append_host_ace (
host => '<GPUVM_FQDN>',
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy', 'resolve'),
principal_name => 'VECTOR',
principal_type => xs_acl.ptype_db));
dbms_network_acl_admin.append_wallet_ace(
wallet_path => 'file:/home/oracle/wallets/cwallet.sso',
ace => xs$ace_type(
principal_name => 'VECTOR',
principal_type => xs_acl.ptype_db,
privilege_list => xs$name_list('use_client_certificates', 'use_passwords')));
END;
/
exit
sqlplus vector@freepdb1
@net

Private AI Services Containerへのネットワーク・アクセスの検証
curlユーティリティを使用して、プライベートAIサービス・コンテナがdbfree VMからアクセス可能であることを確認します。したがって、dbfree VMで、次の手順を実行します:
export SECRETS_DIR=/home/oracle
export HOST=<GPUVM_FQDN>
curl --http2-prior-knowledge -i --cacert $SECRETS_DIR/cert.pem \ https://$HOST:8443/health
curlが機能しない場合、Oracle AI Database 26aiからのネットワーク・コールも機能しません。

Vector Index Serviceの妥当性チェック
Private AI Services ContainerのVector Index Serviceを使用する前に、次のことを確認してください:
- Private AI Services Containerは実行中です
- SSLポート (8443)がPrivate AI Services Containerで開いています
- OCIネットワーク・セキュリティ・リストでは、SSLポート (8443)へのTCPアクセスが許可されます。
- Private AI Services Containerは/healthリクエストに応答しています
- Private AI Services Containerのホスト名は正しいです
- Private AI Services ContainerのURLは正しいです
- API KEYの値は正しいです
- cert.pemファイルの内容は正しいです
- ウォレット・ディレクトリが正しい場所に作成されます
- ウォレット・ディレクトリはCDBで設定されています
- 証明書がウォレットに追加されました
- データベース・ユーザー (例: vector)に、PDBで必要な権限があります。
- データベース・ユーザー (例: vector)は、Vector Index Serviceを使用してベクトル索引を作成するために使用されます。
Vector Index Serviceの使用
Vector Index Serviceを使用してHNSWベクトル索引を作成するスクリプトを作成します。
vi idxgpu.sql
set timing on;
drop index my_hnsw_idx;
CREATE VECTOR INDEX my_hnsw_idx ON genvec(v)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
PARAMETERS (
TYPE HNSW,
NEIGHBORS 32,
EFCONSTRUCTION 200,
OFFLOAD_CREDENTIAL_NAME MYCREDENTIALNAME,
OFFLOAD_URL 'https://<GPUVM_FQDN>:8443/v1/index'
);
ここで、idxgpu.sqlスクリプトを使用して、GPUオフロードを使用してHNSW索引を作成します。
sqlplus vector@freepdb1
@idxgpu

このテスト環境では:
- Vector Index ServiceでのHNSWベクトル索引の作成に76秒から138秒かかりました
- Vector Index Serviceを使用せずにHNSWベクトル索引を作成するのに24分から40分かかりました
- この例では、Vector Index Serviceの使用が高速でした
- これらの結果は、単一のテスト環境からのもので、ハードウェア、構成、ワークロードおよびデータ・サイズによって異なる場合があります。
