Container Runtime for ML의 Notebooks

개요

ML용 Container Runtime에서 Snowflake Notebooks를 실행할 수 있습니다. Container Runtime for ML은 Snowpark Container Services 를 기반으로 하며, 다양한 워크플로를 구축하고 운영할 수 있는 유연한 컨테이너 인프라를 Snowflake 내에서 완전히 지원합니다. Container Runtime for ML은 고급 데이터 과학 및 머신 러닝 워크로드를 지원하기 위한 소프트웨어 및 하드웨어 옵션을 제공합니다. 가상 웨어하우스 에 비해, Container Runtime for ML은 여러 소스에서 패키지를 설치하고 GPU 머신 유형을 비롯한 컴퓨팅 리소스를 선택할 수 있는 더욱 유연한 컴퓨팅 환경을 제공하며, 최적의 성능을 위해 웨어하우스에서 SQL 쿼리를 계속 실행할 수 있습니다.

이 문서에서는 Container Runtime for ML 에서 노트북을 사용할 때 고려해야 할 몇 가지 사항을 설명합니다. 개발에서 Container Runtime for ML을 사용하는 방법에 대해 자세히 알아보려면 Snowflake Notebook Container Runtime 시작하기 빠른 시작을 참조하십시오.

전제 조건

Container Runtime for ML에서 Snowflake Notebooks를 사용하기 전에 ACCOUNTADMIN 역할이 필요한 리소스를 생성하고 해당 리소스에 대한 권한을 부여하기 위한 노트북 설정 단계를 완료해야 합니다. 자세한 단계는 관리자 설정 섹션을 참조하십시오.

Container Runtime for ML에서 노트북 만들기

Container Runtime for ML에서 노트북을 생성할 때, 노트북을 실행할 리소스를 제공할 웨어하우스, 런타임 및 컴퓨팅 풀을 선택합니다. 선택한 런타임에 따라 사용 사례에 따라 다양한 Python 패키지에 액세스할 수 있습니다. 웨어하우스 크기나 컴퓨팅 풀에 따라 비용과 성능에 미치는 영향이 다릅니다. 이러한 모든 설정은 필요한 경우 나중에 변경할 수 있습니다.

참고

ACCOUNTADMIN, ORGADMIN 또는 SECURITYADMIN 역할이 있는 사용자는 Container Runtime에서 노트북을 직접 생성하거나 소유할 수 없습니다. 이러한 역할이 생성하거나 직접 소유한 노트북은 실행되지 않습니다. 하지만 ACCOUNTADMIN, ORGADMIN 또는 SECURITYADMIN 역할이 권한을 상속받는 역할(예: PUBLIC 역할)이 노트북을 소유하고 있는 경우에는 해당 역할을 사용해 해당 노트북을 실행할 수 있습니다.

Container Runtime에서 실행할 Snowflake Notebook을 만들려면 다음 단계를 따르십시오.

  1. Snowsight 에 로그인합니다.

  2. Notebooks 를 선택합니다.

  3. + Notebook 를 선택합니다.

  4. 노트북의 이름을 입력합니다.

  5. 노트북을 저장할 데이터베이스와 스키마를 선택합니다. 노트북을 만든 후에는 변경할 수 없습니다.

    참고

    데이터베이스와 스키마는 노트북을 저장하기 위한 용도로만 필요합니다. 사용자는 노트북 내에서 역할에 액세스 권한이 있는 모든 데이터베이스와 스키마를 쿼리할 수 있습니다.

  6. Python 환경으로 Run on container 를 선택합니다.

  7. CPU 또는 GPU의 Runtime 유형을 선택합니다.

  8. Compute pool 을 선택합니다.

    Snowflake는 노트북을 실행하기 위해 각 계정에서 SYSTEM_COMPUTE_POOL_CPU 와SYSTEM_COMPUTE_POOL_GPU 의 두 컴퓨팅 풀 을 자동으로 프로비저닝합니다.

  9. 선택한 웨어하우스를 변경하여 SQL 및 Snowpark 쿼리를 실행할 수 있습니다.

  10. 노트북을 생성하고 열려면 Create 를 선택합니다.

Runtime:

CPU 와 GPU 의 두 가지 유형의 런타임을 사용할 수 있습니다. 각 런타임 이미지에는 Snowflake에서 검증하고 통합한 Python 패키지 및 버전의 기본 세트가 포함되어 있습니다. 모든 런타임 이미지는 데이터 분석, 모델링, 훈련에 Snowpark Python, Snowflake ML, Streamlit을 지원합니다.

공개 리포지토리에서 추가 패키지를 설치하려면 pip를 사용하면 됩니다. 외부 엔드포인트에서 패키지를 설치하려면 Snowflake Notebooks에 대한 외부 액세스 통합(EAI)이 필요합니다. EAIs를 구성하려면 Snowflake Notebooks 에 대한 외부 액세스 설정 섹션을 참조하십시오. 그러나 패키지가 이미 기본 이미지의 일부인 경우에는 pip install을 사용하여 다른 버전을 설치하여 패키지의 버전을 변경할 수 없습니다. 사전 설치된 패키지 목록은 Container Runtime for ML 섹션을 참조하십시오.

Compute pool:

컴퓨팅 풀은 노트북 커널과 Python 코드에 대한 컴퓨팅 리소스를 제공합니다. 시작하려면 더 작은 CPU 기반 컴퓨팅 풀을 사용하고, 컴퓨터 비전이나 LLMs/VLMs과 같은 집중적인 GPU 사용 시나리오에 최적화하려면 더 높은 메모리의 GPU 기반 컴퓨팅 풀을 선택합니다.

각 컴퓨팅 노드는 한 번에 사용자당 1개의 노트북만 실행하도록 제한됩니다. 노트북용 컴퓨팅 풀을 생성할 때 MAX_NODES 매개 변수를 1보다 큰 값으로 설정해야 합니다. 예를 보려면 컴퓨팅 리소스 를 참조하십시오. Snowpark Container Services 컴퓨팅 풀에 대한 자세한 내용은 Snowpark Container Services: 컴퓨팅 풀 작업하기 섹션을 참조하십시오.

노트북을 사용하지 않을 때는 노트북을 종료하여 노드 리소스를 확보하는 것이 좋습니다. 연결 드롭다운에서 End session 을 선택해 노트북을 종료할 수 있습니다.

노트북이 Container Runtime에서 실행되는 경우, 이 역할에는 노트북 웨어하우스 대신 컴퓨팅 풀에 대한 USAGE 권한이 필요합니다. 컴퓨팅 풀은 Snowflake에서 관리하는 CPU 기반 또는 GPU 기반 가상 머신입니다. 컴퓨팅 풀을 만들 때는 각 노트북을 실행하려면 하나의 전체 노드가 필요하므로 MAX_NODES 매개 변수를 1보다 크게 설정하십시오. 자세한 내용은 Snowpark Container Services: 컴퓨팅 풀 작업하기 섹션을 참조하십시오.

리소스 사용률을 볼 수 있습니다. 자세한 내용은 Snowflake Notebooks 정보 섹션을 참조하십시오.

참고

AWS 에서 실행되는 노트북은 GPU 컴퓨팅 풀에서 고성능 NVMe 저장소를 기본 부팅 디바이스로 사용합니다.

Container Runtime에서 노트북 실행하기

노트북을 생성한 후 셀을 추가하고 실행하여 즉시 코드 실행을 시작할 수 있습니다. 셀 추가에 대한 정보는 Snowflake Notebooks 에서 코드 개발 및 실행 섹션을 참조하십시오.

더 많은 패키지 가져오기

노트북을 시작하고 실행하기 위해 사전 설치된 패키지 외에도 외부 액세스가 설정된 공개 소스에서 패키지를 설치할 수 있습니다. 스테이지나 개인 리포지토리에 저장된 패키지를 사용할 수도 있습니다. 특정 외부 엔드포인트 방문을 위한 액세스 권한을 설정하고 부여하려면 ACCOUNTADMIN 역할 또는 외부 액세스 통합을 생성할 수 있는 역할(EAIs)을 사용해야 합니다. 노트북에서 외부 액세스를 활성화하려면 ALTER NOTEBOOK 명령을 사용합니다. 권한이 부여되면 Notebook settings 에 EAIs가 표시됩니다. 외부 채널에서 설치를 시작하기 전에 EAIs를 토글합니다. 자세한 지침은 외부 액세스 및 시크릿이 있는 노트북 구성하기 섹션을 참조하십시오.

다음 예제에서는 pip install을 사용하여 코드 셀에 외부 패키지를 설치합니다.

!pip install transformers scipy ftfy accelerate
Copy

노트북 설정 업데이트하기

Notebook settings 에서 언제든 사용할 컴퓨팅 풀이나 웨어하우스 등의 설정을 업데이트할 수 있으며, 오른쪽 상단의 워크시트에 대한 추가 작업 노트북 작업 메뉴를 통해 액세스할 수 있습니다.

Notebook settings 에서 업데이트할 수 있는 설정 중 하나는 유휴 시간 제한 설정입니다. 유휴 시간 제한의 기본값은 1시간이며, 최대 72시간까지 설정할 수 있습니다. SQL로 이 값을 설정하려면 CREATE NOTEBOOK 또는 ALTER NOTEBOOK 명령을 사용하여 노트북의 IDLE_AUTO_SHUTDOWN_TIME_SECONDS 속성을 설정합니다.

비공개 패키지 설치하기

Pip는 기본 인증 (예: JFrog Artifactory) 같은 비공개 소스에서 패키지를 설치할 수 있도록 지원합니다. 외부 액세스 통합(EAI)을 위해 노트북을 구성하여 리포지토리에 액세스할 수 있도록 합니다.

  1. 네트워크 규칙을 만들어 액세스하려는 리포지토리를 지정합니다. 예를 들어, 이 네트워크 규칙은 JFrog 리포지토리를 지정합니다.

    CREATE OR REPLACE NETWORK RULE jfrog_network_rule
      MODE = EGRESS
      TYPE = HOST_PORT
      VALUE_LIST = ('<your-repo>.jfrog.io');
    
    Copy
  2. 리포지토리 액세스를 허용하는 외부 액세스 통합 을 만듭니다.

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION jfrog_integration
      ALLOWED_NETWORK_RULES = (jfrog_network_rule)
      ENABLED = TRUE;
    
    GRANT USAGE ON INTEGRATION jfrog_integration TO ROLE data_scientist;
    
    Copy
  3. 외부 액세스 구성에 액세스하려면 노트북 오른쪽 상단의 워크시트에 대한 추가 작업 (Notebook actions 메뉴)를 선택합니다.

  4. Notebook settings 를 선택한 다음 External access 탭을 선택합니다.

  5. EAI 를 선택하여 리포지토리에 연결합니다.

    노트북이 다시 시작됩니다.

  6. 노트북이 다시 시작되면 리포지토리에서 설치할 수 있습니다.

    !pip install hello-jfrog --index-url https://<user>:<token>@<your-repo>.jfrog.io/artifactory/api/pypi/test-pypi/simple
    
    Copy

비공개 연결이 있는 비공개 패키지 설치하기

비공개 패키지 리포지토리에 비공개 연결이 필요한 경우 다음 단계에 따라 계정을 구성하십시오. 도움이 필요한 경우 계정 관리자와 협력하여 네트워크 규칙을 설정할 수 있습니다.

  1. 비공개 연결을 사용한 네트워크 송신 의 단계에 따라 비공개 연결을 사용하여 네트워크 이그레스를 설정하십시오.

  2. 1단계의 네트워크 규칙을 사용하여 EAI 를 만듭니다. 예:

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION private_repo_integration
      ALLOWED_NETWORK_RULES = (PRIVATE_LINK_NETWORK_RULE)
      ENABLED = TRUE;
    
    GRANT USAGE ON INTEGRATION private_repo_integration TO ROLE data_scientist;
    
    Copy
  3. 외부 액세스 구성에 액세스하려면 노트북 오른쪽 상단의 워크시트에 대한 추가 작업 (Notebook actions 메뉴)를 선택합니다.

  4. Notebook settings 를 선택한 다음 External access 탭을 선택합니다.

  5. EAI 를 선택하여 비공개 리포지토리에 연결합니다.

    노트북이 다시 시작됩니다.

  6. 노트북이 다시 시작된 후, 리포지토리의 --index-url 을 제공할 수 있습니다.

    !pip install my_package --index-url https://my-private-repo-url.com/simple
    
    Copy

ML 워크로드 실행하기

Container Runtime의 Notebooks는 모델 학습 및 매개 변수 튜닝과 같은 ML 워크로드를 실행하는 데 적합합니다. 런타임은 인기 있는 ML 패키지와 함께 사전 설치되어 제공됩니다. 외부 통합 액세스가 설정되어 있으면 !pip install 을 사용하여 필요한 다른 패키지를 설치할 수 있습니다.

최적화된 환경을 위해 OSS 라이브러리를 사용해 모델을 개발하거나 OSS 구성 요소를 사용하는 노트북을 가져오십시오. Container Runtime은 다음과 같이 API를 최적화했습니다.

  • 더 빠른 데이터 수집을 위한 DataConnector

  • 확장 가능한 모델 피팅을 위한 분산 학습 API

  • 가용성 있는 모든 리소스를 효율적으로 활용하기 위한 분산 하이퍼 매개 변수 튜닝 API입니다.

자세한 내용은 Container Runtime for ML 섹션을 참조하십시오.

참고

런타임은 많은 패키지와 함께 사전 설치되어 제공되므로 버전을 변경하려면 커널을 다시 시작해야 합니다. 자세한 내용은 Notebooks 살펴보기 섹션을 참조하십시오.

OSS ML 라이브러리 사용

다음 예제는 OSS ML 라이브러리인 xgboost 및 활성 Snowpark 세션을 사용하여 훈련용 데이터를 메모리로 직접 가져오는 예제입니다.

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
# Predict
y_pred = model.predict(X_test)
Copy

제한 사항

Container Runtime 노트북 세션이 시작되면 중단 없이 최대 7일까지 실행할 수 있습니다. 예약된 SPCS 서비스 유지 관리 이벤트가 있는 경우 7일 이후에는 서비스가 중단되고 종료될 수 있습니다. 노트북 유휴 시간 설정은 계속 적용됩니다. SPCS 서비스 유지 관리에 대한 자세한 내용은 컴퓨팅 풀 유지 관리 섹션을 참조하십시오.

비용/청구 고려 사항

노트북을 Container Runtime에서 실행하는 경우, 웨어하우스 컴퓨팅SPCS 컴퓨팅 비용 이 모두 발생할 수 있습니다. 웨어하우스는 쿼리 실행과 Snowflake Notebooks 에서 특정 프론트엔드 기능을 지원하는 데 모두 필요합니다. 예를 들어, Python 실행을 위해 컴퓨팅 풀을 사용하는 경우 출력을 렌더링하거나 대화형 구성 요소를 처리하기 위해 웨어하우스가 필요할 수 있습니다.

Snowflake Notebooks에는 최적화된 성능을 위해 SQL 및 Snowpark 쿼리를 실행하기 위한 가상 웨어하우스가 필요합니다. 따라서 SQL 셀에서 SQL을 사용하고 Python 셀에서 실행되는 Snowpark 푸시다운 쿼리를 사용하는 경우 가상 웨어하우스 컴퓨팅 비용이 발생할 수도 있습니다. 다음 다이어그램은 각 셀 유형에 대해 컴퓨팅이 발생하는 위치를 보여줍니다.

노트북 셀의 계산 분포를 보여주는 다이어그램입니다.

예를 들어, 다음 Python 예제에서는 xgboost 라이브러리를 사용합니다. 데이터는 컨테이너로 가져오고 계산은 Snowpark Container Services 에서 수행됩니다.

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
Copy

웨어하우스 비용에 대해 자세히 알아보려면 웨어하우스의 개요 섹션을 참조하십시오.