Snowpark 컨테이너 서비스의 Milvus
이 가이드는 Snowpark 컨테이너 서비스에서 Milvus 데모를 시작하는 방법을 설명합니다.
Snowpark 컨테이너 서비스 소개
스노우파크 컨테이너 서비스는 스노우플레이크 에코시스템 내에서 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 용이하게 하도록 설계된 완전 관리형 컨테이너 서비스입니다. 이 서비스를 통해 사용자는 컨테이너화된 워크로드를 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에서 사용하는 이미지는 로컬에서 빌드한 후 사용자가 업로드해야 합니다. 이미지의 관련 구성은 이 리포지토리를 참조하세요. 코드를 복제한 후 프로젝트의 루트 디렉토리로 이동하여 이미지 빌드를 준비합니다.
로컬에서 이미지 빌드하기
로컬 셸을 열고 이미지 빌드를 시작합니다.
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 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;
컴퓨팅 풀 상태
- 사양 파일 업로드
컴퓨팅 풀을 생성한 후 서비스용 스페이스 파일 준비를 시작합니다. 파일은 이 리포지토리에 있습니다. 사양 디렉토리를 참조하세요.
이 두 서비스의 스펙 파일을 열고, 스펙 파일에서 ${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 노트북의 엔드포인트를 보고 기록합니다.
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 실행하기
연결을 설정한 후 계속 실행을 클릭합니다. 이 코드는 임베딩 처리 후 텍스트를 벡터 데이터로 변환한 다음 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.",
]
그런 다음 "누가 AI 연구를 시작했나요?"와 같은 텍스트를 쿼리로 사용하고 임베딩 처리 후 쿼리를 수행하여 가장 관련성이 높은 결과를 가져와 표시합니다.
가장 연관성이 높은 결과 얻기 및 표시
Milvus 클라이언트 사용법에 대한 자세한 내용은 Milvus 문서 섹션을 참조하세요.
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 버전을 참조하시고, 임베딩 및 통합에 대한 정보도 참고하시기 바랍니다.