Snowparkコンテナサービス上のMilvus
このガイドでは、Snowparkコンテナサービス上でMilvusのデモを開始する方法を示します。
Snowpark コンテナサービスについて
Snowpark Container Servicesは、Snowflakeエコシステム内でのコンテナ化されたアプリケーションのデプロイ、管理、およびスケーリングを容易にするように設計されたフルマネージドコンテナサービスです。このサービスにより、ユーザーはコンテナ化されたワークロードをSnowflake内で直接実行できるようになり、処理のためにデータをSnowflake環境から移動する必要がなくなります。詳細については、公式の紹介を参照してください:Snowpark Container Servicesを参照してください。
Milvusデモの構成
以下では、Milvusの機能とSPCSでのMilvusの使用方法を設定とコードを通して理解していただきます。
1.アカウント情報の取得
SPCSクライアントをダウンロードします:SnowSQLをダウンロードし、アカウントにログインする。
snowsql -a ${instance_name} -u ${user_name}
${instance_name}
のルールは${org_name}-${acct_name}
です。関連情報は、app.snowflake.comにログインし、個人アカウント情報を確認することで取得できます。
スノーフレークのアカウント情報
2.役割と権限の設定
OAUTH 連携を設定する。
USE ROLE ACCOUNTADMIN;
CREATE SECURITY INTEGRATION SNOWSERVICES_INGRESS_OAUTH
TYPE=oauth
OAUTH_CLIENT=snowservices_ingress
ENABLED=true;
USE ROLE ACCOUNTADMIN;
GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO ROLE SYSADMIN;
サービス用のロールを作成します。ここでの${PASSWORD}
の部分は、デモが実行されるときにユーザーで置き換える必要があることに注意してください。
USE ROLE SECURITYADMIN;
CREATE ROLE MILVUS_ROLE;
USE ROLE USERADMIN;
CREATE USER milvus_user
PASSWORD='milvususerok'
DEFAULT_ROLE = MILVUS_ROLE
DEFAULT_SECONDARY_ROLES = ('ALL')
MUST_CHANGE_PASSWORD = FALSE;
USE ROLE SECURITYADMIN;
GRANT ROLE MILVUS_ROLE TO USER milvus_user;
3.データストレージ構成の作成
ウェアハウスとデータベースを作成します。
USE ROLE SYSADMIN; CREATE OR REPLACE WAREHOUSE MILVUS_WAREHOUSE WITH WAREHOUSE_SIZE='X-SMALL' AUTO_SUSPEND = 180 AUTO_RESUME = true INITIALLY_SUSPENDED=false; USE ROLE SYSADMIN; CREATE DATABASE IF NOT EXISTS MILVUS_DEMO; USE DATABASE MILVUS_DEMO; CREATE IMAGE REPOSITORY MILVUS_DEMO.PUBLIC.MILVUS_REPO; CREATE OR REPLACE STAGE YAML_STAGE; CREATE OR REPLACE STAGE DATA ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE'); CREATE OR REPLACE STAGE FILES ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
ロールに権限を付与する。
USE ROLE SECURITYADMIN; GRANT ALL PRIVILEGES ON DATABASE MILVUS_DEMO TO MILVUS_ROLE; GRANT ALL PRIVILEGES ON SCHEMA MILVUS_DEMO.PUBLIC TO MILVUS_ROLE; GRANT ALL PRIVILEGES ON WAREHOUSE MILVUS_WAREHOUSE TO MILVUS_ROLE; GRANT ALL PRIVILEGES ON STAGE MILVUS_DEMO.PUBLIC.FILES TO MILVUS_ROLE;
ACLの設定
USE ROLE ACCOUNTADMIN; USE DATABASE MILVUS_DEMO; USE SCHEMA PUBLIC; CREATE NETWORK RULE allow_all_rule TYPE = 'HOST_PORT' MODE= 'EGRESS' VALUE_LIST = ('0.0.0.0:443','0.0.0.0:80'); CREATE EXTERNAL ACCESS INTEGRATION allow_all_eai ALLOWED_NETWORK_RULES=(allow_all_rule) ENABLED=TRUE; GRANT USAGE ON INTEGRATION allow_all_eai TO ROLE SYSADMIN;
4.イメージの作成
Milvusで使用するイメージはローカルでビルドし、ユーザがアップロードする必要があります。関連するイメージの設定については、こちらのレポを参照してください。コードをクローンした後、プロジェクトのルートディレクトリに移動し、イメージをビルドする準備をします。
ローカルでイメージをビルドする
ローカルシェルを開き、イメージのビルドを開始します。
cd ${repo_git_root_path} docker build --rm --no-cache --platform linux/amd64 -t milvus ./images/milvus docker build --rm --no-cache --platform linux/amd64 -t jupyter ./images/jupyter
イメージは2つあり、1つ目はMilvusデータベースを実行するもの、2つ目は表示に使用するノートブックです。
ローカルイメージのビルドが完了したら、タグ付けとアップロードの準備をします。
ビルドしたイメージにタグを付ける
SPCSのdocker hubにログインする。
docker login ${instance_name}.registry.snowflakecomputing.com -u ${user_name}
そして、spcs用のイメージにタグを付けます。
docker tag milvus ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/milvus docker tag jupyter ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/jupyter
その後、ローカルのシェルで
docker images | grep milvus
を使って、イメージのパッケージ化とタグ付けが成功したかどうかを確認します。docker images | grep milvus ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/milvus latest 3721bbb8f62b 2 days ago 2.95GB ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/jupyter latest 20633f5bcadf 2 days ago 2GB
SPCSにイメージをプッシュする
docker push ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/milvus docker push ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/jupyter
5.サービスの作成と起動
SnowSQLシェルに戻りましょう。
- 計算プールの作成
USE ROLE SYSADMIN;
CREATE COMPUTE POOL IF NOT EXISTS MILVUS_COMPUTE_POOL
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = CPU_X64_S
AUTO_RESUME = true;
CREATE COMPUTE POOL IF NOT EXISTS JUPYTER_COMPUTE_POOL
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = CPU_X64_S
AUTO_RESUME = true;
ステータスがACTIVE
またはIDLE
になるまで、DESCRIBE
を通してコンピュートプールをチェックしてください。
DESCRIBE COMPUTE POOL MILVUS_COMPUTE_POOL;
DESCRIBE COMPUTE POOL JUPYTER_COMPUTE_POOL;
コンピュートプールのステータス
- specファイルのアップロード
コンピュートプールを作成したら、サービス用のspceファイルの準備を始めます。このファイルもこのリポジトリにあります。specsディレクトリを参照してください。
これら2つのサービスのspecファイルを開き、${org_name}-${acct_name}
、自分のアカウントの${instance_name}に置き換えてください。変更後、SnowSQL を使用してアップロードを完了します。
PUT file://${path/to/jupyter.yaml} @yaml_stage overwrite=true auto_compress=false;
PUT file://${path/to/milvus.yaml} @yaml_stage overwrite=true auto_compress=false;
- サービスの作成
アップロードが完了したら、Continue でサービスの作成が完了します。
USE ROLE SYSADMIN;
USE DATABASE MILVUS_DEMO;
USE SCHEMA PUBLIC;
CREATE SERVICE MILVUS
IN COMPUTE POOL MILVUS_COMPUTE_POOL
FROM @YAML_STAGE
SPEC='milvus.yaml'
MIN_INSTANCES=1
MAX_INSTANCES=1;
CREATE SERVICE JUPYTER
IN COMPUTE POOL JUPYTER_COMPUTE_POOL
FROM @YAML_STAGE
SPEC='jupyter.yaml'
MIN_INSTANCES=1
MAX_INSTANCES=1;
サービスはSHOW SERVICES;
から確認することもできます。
SHOW SERVICES;
+---------+---------------+-------------+----------+----------------------+--------------------------------------------------------+-----------------
| name | database_name | schema_name | owner | compute_pool | dns_name | ......
|---------+---------------+-------------+----------+----------------------+--------------------------------------------------------+-----------------
| JUPYTER | MILVUS_DEMO | PUBLIC | SYSADMIN | JUPYTER_COMPUTE_POOL | jupyter.public.milvus-demo.snowflakecomputing.internal | ......
| MILVUS | MILVUS_DEMO | PUBLIC | SYSADMIN | MILVUS_COMPUTE_POOL | milvus.public.milvus-demo.snowflakecomputing.internal | ......
+---------+---------------+-------------+----------+----------------------+--------------------------------------------------------+-----------------
サービスの開始時に問題が発生した場合は、CALL SYSTEM$GET_SERVICE_STATUS('milvus');
からサービス情報を参照できます。
サービスのステータス
詳しい情報は、CALL SYSTEM$GET_SERVICE_LOGS('milvus', '0', 'milvus', 10);
から入手できます。
ノートブックの使用
SnowSQL を使用して権限を付与します。
USE ROLE SECURITYADMIN;
GRANT USAGE ON SERVICE MILVUS_DEMO.PUBLIC.JUPYTER TO ROLE MILVUS_ROLE;
Jupyter nootbook のエンドポイントを表示して記録します。
USE ROLE SYSADMIN;
SHOW ENDPOINTS IN SERVICE MILVUS_DEMO.PUBLIC.JUPYTER;
ingress_url
の部分を記録し、ブラウザを開き、ingress_url
を入力し、milvus_user アカウントを使用してウェブサイトにログインします。
イングレスURLの取得
ingress_url
からノートブックを開き、ページ上のTestMilvus.ipynb
ファイルをダブルクリックして、Milvus を試してみる。コードブロックの最初の部分を選択し、[実行]ボタンをクリックして、接続の確立と埋め込み関数の初期化を開始します。
ノートブックでTestMilvus.ipynbを実行する 。
接続を確立したら、引き続きRUNをクリックします。エンベッディング処理後、テキストがベクトルデータに変換され、Milvusに挿入されます。
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
次に、テキストをクエリとして使用します。"Who started AI research?"、埋め込み処理後にクエリを実行し、最後に最も関連性の高い結果を取得して表示します。
最も関連性の高い結果を取得・表示
Milvusクライアントの使い方については、Milvus Docをご参照ください。
7.クリーンアップ
検証後、SnowSQLを使用してサービス、ロール、データリソースをクリーンアップすることができます。
USE ROLE ACCOUNTADMIN;
DROP USER milvus_user;
USE ROLE SYSADMIN;
DROP SERVICE MILVUS;
DROP SERVICE JUPYTER;
DROP COMPUTE POOL MILVUS_COMPUTE_POOL;
DROP COMPUTE POOL JUPYTER_COMPUTE_POOL;
DROP IMAGE REPOSITORY MILVUS_DEMO.PUBLIC.MILVUS_REPO;
DROP DATABASE MILVUS_DEMO;
DROP WAREHOUSE MILVUS_WAREHOUSE;
USE ROLE ACCOUNTADMIN;
DROP ROLE MILVUS_ROLE;
DROP SECURITY INTEGRATION SNOWSERVICES_INGRESS_OAUTH;
Milvusについて
Milvusの詳細については、Milvusの紹介と クイックスタートから始めることができます。もちろん、APIのより詳細な紹介やPython版、Java版もありますし、Embeddingsや Integrationsの情報もありますので参考にしてください。