在 Snowpark 容器服務上使用 Milvus
本指南演示如何在 Snowpark 容器服務上啟動 Milvus 演示。
關於 Snowpark 容器服務
Snowpark Container Services 是完全受管理的容器產品,旨在促進 Snowflake 生態系統內容器化應用程式的部署、管理和擴充。此服務可讓使用者直接在 Snowflake 內執行容器化工作負載,確保資料不需移出 Snowflake 環境進行處理。如需詳細資訊,請參閱官方介紹:Snowpark 容器服務。
配置 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 使用的映像需要在本地建立,然後由使用者上傳。關於 image 的相關設定,請參考此 repo。克隆代碼後,到專案根目錄準備建立映像。
在本機建立映像
開啟本機 shell 並開始建立映像。
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
這裡有兩個映像,第一個是執行 Milvus 資料庫,第二個是用來顯示的筆記型電腦。
本機影像建立完成後,準備標記並上傳。
標記已建立的影像
登入 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
然後在本機 shell 中使用
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 shell。
- 建立運算池
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;
透過DESCRIBE
檢查計算池,直到狀態為ACTIVE
或IDLE
。
DESCRIBE COMPUTE POOL MILVUS_COMPUTE_POOL;
DESCRIBE COMPUTE POOL JUPYTER_COMPUTE_POOL;
計算池狀態
- 上傳規格檔案
建立計算池後,開始準備服務的 spce 檔案。這些檔案也在此 repo 中。請參考 specs 目錄。
打開這兩個服務的 spec 檔案,在 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;
- 建立服務
上傳完成後,您就可以建立服務了,繼續完成建立服務的程序。
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的相關資訊可供參考。