milvus-logo
LFAI
フロントページへ
  • 統合
    • その他

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にログインし、個人アカウント情報を確認することで取得できます。

Snowflake account information スノーフレークのアカウント情報

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;

Compute pool status コンピュートプールのステータス

  • 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'); からサービス情報を参照できます。

Service status サービスのステータス

詳しい情報は、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 アカウントを使用してウェブサイトにログインします。

Obtain the ingress URL イングレスURLの取得

ingress_url からノートブックを開き、ページ上のTestMilvus.ipynb ファイルをダブルクリックして、Milvus を試してみる。コードブロックの最初の部分を選択し、[実行]ボタンをクリックして、接続の確立と埋め込み関数の初期化を開始します。

Run TestMilvus.ipynb in the notebook ノートブックで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?"、埋め込み処理後にクエリを実行し、最後に最も関連性の高い結果を取得して表示します。

Obtain and display the most relevant results 最も関連性の高い結果を取得・表示

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の情報もありますので参考にしてください。

翻訳DeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?