※ 本記事は、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の値をgpuvmapi-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というファイルを作成し、必要に応じてhostprincipal_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の使用が高速でした
  • これらの結果は、単一のテスト環境からのもので、ハードウェア、構成、ワークロードおよびデータ・サイズによって異なる場合があります。

関連ブログ