Snowpark ML: Snowflake의 엔드 투 엔드 머신 러닝¶
참고
Snowpark ML Modeling API는 패키지 버전 1.1.1부터 일반 공급으로 제공되며 Snowpark 모델 레지스트리는 패키지 버전 1.2.0부터 미리 보기로 제공됩니다. 곧 출시될 Snowpark ML 특징에 대한 설명서를 일찍 살펴보고 싶으신 분은 Snowflake 담당자에게 문의하십시오.
Snowpark ML은 모델 개발 및 운영을 위한 구성 요소를 포함하여 Snowflake의 엔드 투 엔드 ML 워크플로를 위한 Python 라이브러리이자 기본 인프라입니다. Snowpark ML을 사용하면 전처리, 특징 공학, 학습을 위해 친숙한 Python 프레임워크를 사용할 수 있습니다. 데이터 이동, 사일로 또는 거버넌스 절충 없이 Snowflake에서 모델을 완전히 배포하고 관리할 수 있습니다.
팁
Snowpark ML의 엔드 투 엔드 워크플로 예시는 Snowpark ML을 이용한 머신 러닝 소개 를 참조하십시오.
Snowpark ML의 핵심 구성 요소¶
Snowpark ML은 엔드 투 엔드 머신 러닝 개발 및 관리 프로세스의 각 스테이지를 지원하는 API를 제공하며 다음과 같은 주요 기능을 포함합니다.
Snowpark ML은 모델이 데이터에 액세스 할 수 있는 방법도 제공합니다.
Snowpark ML Modeling¶
Snowpark ML Modelig 은 scikit-learn, xgboost, lightgbm 등 널리 사용되는 머신 러닝 프레임워크를 사용하여 Snowflake에서 데이터 전처리, 특징 공학, 모델 학습을 지원합니다. 이 API에는 Snowpark에 최적화된 웨어하우스에서 제공하는 컴퓨팅 리소스를 사용하여 확장 가능한 데이터 변환을 제공할 수 있는 전처리 모듈도 포함되어 있습니다.
Snowpark ML Operations¶
Snowpark ML 모델 레지스트리 를 갖춘 Snowpark ML Operations(MLOps)는 Snowpark ML Development API를 보완합니다. 모델 레지스트리는 Snowflake에서 모델을 안전하게 배포하고 관리할 수 있게 해주며 Snowflake 내부와 외부 모두에서 학습된 모델을 지원합니다.
Snowpark ML Data Access¶
Snowpark ML Data Access는 머신 러닝 모델에 데이터를 공급하는 간단하고 효율적인 방법을 제공합니다.
FileSet API 는 쿼리 또는 Snowpark DataFrame에서 Snowflake 내부 스테이지로 해당 데이터를 구체화하기 위한 Python fsspec 준수 API를 제공합니다. 또한 데이터로 작업하고 데이터를 PyTorch 또는 TensorFlow로 공급하는 편리한 방법을 제공합니다.
프레임워크 커넥터 세트는 네이티브 데이터 로더 형식으로 Pytorch 및 Tensorflow 프레임워크에 최적화되고 안전하며 성능이 우수한 데이터 프로비저닝을 제공합니다.
Snowpark ML 설치하기¶
중요
Python용 Snowpark 커넥터 라이브러리에 대한 최근 변경 사항을 통해 PyArrow 에 대한 종속성을 제거했습니다. Snowpark ML에는 PyArrow가 필요하지만 Snowpark ML 1.1.2 이전에는 그에 대한 명시적인 종속성이 없습니다. 이전 버전을 사용 중인데 최근에 Python용 Snowpark 커넥터를 업그레이드한 경우 PyArrow를 수동으로 설치해야 할 수도 있습니다. 이렇게 하려면 프로젝트에서 conda 또는 pip를 사용하는지 여부에 따라 다음 명령 중 하나를 사용하십시오.
conda install pyarrow
python -m pip install pyarrow
모든 Snowpark ML 특징은 단일 패키지 snowflake-ml-python
에 제공됩니다.
conda
명령을 사용하여 Snowflake conda 채널에서 또는 pip
를 사용하여 PyPI(Python Package Index)에서 Snowpark ML을 설치할 수 있습니다. Conda가 기본 설정되어 있습니다.
Snowflake conda 채널에서 Snowpark ML 설치하기¶
경고
ARM 기반 Mac(M1 또는 M2 칩 사용)의 conda에서 Snowpark ML을 설치하려면 conda 환경을 생성할 때 시스템 아키텍처를 지정해야 합니다. 이는 conda create
명령 CONDA_SUBDIR=osx-arm64 conda create --name snowpark-ml
에서 CONDA_SUBDIR=osx-arm64
를 설정하여 수행됩니다.
Snowpark ML을 설치할 conda 환경을 만듭니다. 기존 환경을 사용하려면 이 단계를 건너뛰십시오.
conda create --name snowpark-ml
Conda 환경을 활성화합니다.
conda activate snowpark-ml
Snowflake conda 채널에서 Snowpark ML을 설치합니다.
conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ snowflake-ml-python
팁
Snowpark ML로 작업할 때 가능하면 항상 Snowpark ML에서 검증된 패키지를 받을 수 있도록 Snowflake conda 채널에서 패키지를 설치하십시오.
PyPI에서 Snowpark ML 설치하기¶
표준 Python 패키지 관리자 pip
를 사용하여 PyPI(Python Package Index)의 Snowpark ML 패키지를 설치할 수도 있습니다.
경고
conda 환경을 사용하는 경우 이 설치 프로시저를 사용하지 마십시오. 대신 conda 명령 을 사용하십시오.
프로젝트 디렉터리로 변경하고 Python 가상 환경을 활성화합니다.
cd ~/projects/ml source .venv/bin/activate
Snowpark ML 패키지를 설치합니다.
python -m pip install snowflake-ml-python
선택적 모델링 종속성 설치하기¶
일부 Snowpark ML Modeling API에는 Snowpark ML의 종속성으로 설치되지 않은 종속성이 필요합니다. Snowpark ML Modeling을 설치할 때 scikit-learn 및 xgboost 패키지가 기본적으로 설치되지만, lightgbm은 선택적 종속성입니다. snowflake.ml.modeling.lightgbm
네임스페이스의 클래스를 사용하려면 lightgbm을 직접 설치하십시오.
다음 명령을 사용하여 conda 환경을 활성화하고 Snowflake conda 채널에서 lightgbm을 설치하십시오.
conda activate snowpark-ml
conda install --override-channels --channel https://repo.anaconda.com/pkgs/snowflake/ lightgbm
다음 명령을 사용하여 가상 환경을 활성화하고 pip를 사용하여 lightgbm을 설치하십시오.
.venv/bin/activate
python -m pip install 'snowflake-ml-python[lightgbm]'
Snowflake는 때때로 Snowpark ML에 선택적 종속성을 더 추가할 수 있습니다. pip를 사용하여 모든 선택적 종속성을 설치하려면 다음을 수행하십시오.
.venv/bin/activate
python -m pip install 'snowflake-ml-python[all]'
Snowpark Python 설정하기¶
Snowpark Python은 Snowpark ML의 종속 항목이며 Snowpark ML과 함께 자동으로 설치됩니다. Snowpark Python이 시스템에 설정되지 않은 경우 추가 구성 단계를 수행해야 할 수도 있습니다. Snowpark Python 설정 지침은 Snowpark Python을 위한 개발 환경 설정하기 섹션을 참조하십시오.
Snowflake에 연결하기¶
Snowpark ML에서는 Snowpark Session
오브젝트를 사용하여 Snowflake에 연결해야 합니다. 세션을 생성하기 위한 구성 설정을 가져오려면 snowflake.ml.utils.connection_params
모듈에서 SnowflakeLoginOptions
함수를 사용하십시오. 이 함수는 SnowSQL 구성 파일 에 명명된 연결 또는 사용자가 설정한 환경 변수에서 연결 설정을 읽을 수 있습니다. 이 함수는 연결 생성에 사용할 수 있는 이러한 매개 변수가 포함된 사전을 반환합니다.
다음 예에서는 SnowSQL 구성 파일에 있는 명명된 연결 myaccount
에서 연결 매개 변수를 읽습니다. Snowpark Python 세션을 생성하려면 Session
클래스에 대한 빌더를 생성하고 연결 정보를 빌더의 configs
메서드에 전달하십시오.
from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params
params = connection_params.SnowflakeLoginOptions("myaccount")
sp_session = Session.builder.configs(params).create()
이제 연결 또는 세션이 필요한 Snowpark ML 함수에 세션을 전달할 수 있습니다.
팁
기존 Python용 Snowflake 커넥터 연결에서 Snowpark Python 세션을 생성하려면 연결 오브젝트를 세션 빌더에 전달하십시오. 여기서 connection
은 Python 연결용 Snowflake 커넥터입니다.
session = Session.builder.configs({"connection": connection}).create()
웨어하우스 지정하기¶
모델 교육이나 추론 실행 등 Snowpark ML의 많은 부분은 Snowflake Warehouse에서 코드를 실행합니다. 이러한 작업은 연결하는 데 사용하는 세션에서 지정한 웨어하우스에서 실행됩니다. 예를 들어, SnowSQL 구성 파일 의 명명된 연결에서 세션을 생성하는 경우 명명된 구성에서 warehousename
매개 변수를 사용하여 웨어하우스를 지정할 수 있습니다.
구성에 아직 존재하지 않는 경우 여기에 표시된 대로 Session
오브젝트를 생성할 때 웨어하우스 설정을 추가할 수 있습니다.
from snowflake.snowpark import Session
from snowflake.ml.utils import connection_params
# Get named connection from SnowQSL configuration file
params = connection_params.SnowflakeLoginOptions("myaccount")
# Add warehouse name for model method calls if it's not already present
if "warehouse" not in params:
params["warehouse"] = "mlwarehouse"
sp_session = Session.builder.configs(params).create()
세션에 지정된 웨어하우스가 없거나 다른 웨어하우스를 사용하려는 경우 세션의 use_warehouse
메서드를 호출하십시오.
sp_session.use_warehouse("mlwarehouse")
비용 고려 사항¶
Snowflake에서 모델을 학습시키고 사용할 때 가상 웨어하우스에서 코드를 실행하는데, 이로 인해 컴퓨팅 비용이 발생합니다. 이러한 비용은 모델 유형과 학습 및 예측에 사용된 데이터의 양에 따라 다릅니다. Snowflake 컴퓨팅 비용에 대한 일반적인 정보는 컴퓨팅 비용 이해하기 섹션을 참조하십시오.
추가 자료¶
Snowpark ML Modeling과 Snowpark ML Ops에 대한 정보는 다음 리소스를 참조하십시오.
엔드 투 엔드 ML 워크플로
Modeling
Data Access
ML Ops
현재 개발 중인 다른 특징에 대한 설명서를 일찍 살펴보고 싶으신 분은 Snowflake 담당자에게 문의하십시오.
API 참조¶
Snowpark ML API 참조 에는 공개적으로 출시된 모든 기능에 대한 설명서가 포함됩니다. 대화식 Python 세션에서 Python의 help
함수를 사용하여 모든 클래스에 대한 자세한 API 설명서를 구할 수도 있습니다. 예:
from snowflake.ml.modeling.preprocessing import OneHotEncoder
help(OneHotEncoder)