서드 파티 패키지 사용하기

스테이지를 사용하여 서드 파티 패키지를 가져올 수 있습니다. 또한 Python UDF를 만들 때 설치할 Anaconda 패키지를 지정할 수도 있습니다.

이 항목의 내용:

Snowflake 스테이지를 통해 패키지 가져오기

Snowflake 스테이지를 사용하여 패키지를 가져올 수 있습니다. 일반 제한 사항 에 정의된 지침을 따르는 모든 Python 코드를 가져올 수 있습니다. 자세한 내용은 스테이지에서 업로드된 코드로 Python UDF 만들기 섹션을 참조하십시오.

Anaconda의 서드 파티 패키지 사용하기

편의상, Anaconda에서 만들어 제공하는 여러 인기 오픈 원본 서드 파티 Python 패키지는 Snowflake 가상 웨어하우스 내부에서 바로 사용할 수 있도록 되어 있습니다. Snowflake의 표준 소비 기반 가격과 별개로 Anaconda 패키지 사용에 대한 추가 비용은 없습니다. Anaconda 패키지는 현재 Snowpark Container Services(SPCS) 내에서 사용할 수 없습니다. SPCS용 컨테이너 이미지에서 Python 패키지를 사용해야 하는 경우 pip를 사용하여 PyPi에서 그와 같은 패키지를 설치할 수 있습니다.

Anaconda의 서드 파티 패키지 목록을 보려면 Anaconda Snowflake 채널 을 참조하십시오.

새 패키지 추가를 요청하려면 Snowflake 커뮤니티의 Snowflake Ideas 페이지로 이동하십시오. Python Packages & Libraries 카테고리를 선택하고 누군가가 이미 요청을 제출했는지 확인하십시오. 그렇다면 투표하십시오. 그렇지 않으면 New Idea 를 클릭하고 제안을 제출하십시오.

시작하기

Snowflake 내부에서 Anaconda가 제공하는 패키지를 처음 사용하기 전에 Snowflake 서드 파티 약관 에 동의해야 합니다.

참고

조직 관리자(ORGADMIN 역할 사용)가 약관을 수락할 수 있습니다. Snowflake 계정에 대해 약관을 한 번만 수락하면 됩니다. 계정에서 ORGADMIN 역할 활성화하기 섹션을 참조하십시오.

  1. Snowsight 에 로그인합니다.

  2. Admin » Billing & Terms 를 선택합니다.

  3. Anaconda 섹션에서 Enable 을 선택합니다.

  4. Anaconda Packages 대화 상자에서 링크를 클릭하여 Snowflake 서드 파티 약관 페이지 를 검토하십시오.

  5. 약관에 동의하면 Acknowledge & Continue 를 선택합니다.

서비스 약관을 수락하려고 할 때 오류가 나타날 경우 사용자 프로필에 이름, 성 또는 이메일 주소가 누락되었기 때문일 수 있습니다. 관리자 역할이 있는 경우 사용자 프로필에 사용자 세부 정보 추가하기 섹션을 참조하여 Snowsight 를 사용해 프로필을 업데이트하십시오. 그렇지 않으면 관리자에게 문의하여 계정을 업데이트하십시오.

패키지 표시 및 사용하기

사용 가능한 패키지 표시하기

Information Schema에서 PACKAGES 뷰를 쿼리하여 사용 가능한 모든 패키지와 해당 버전 정보를 표시할 수 있습니다.

select * from information_schema.packages where language = 'python';
Copy

특정 패키지(예: numpy)에 대한 버전 정보를 표시하려면 다음 명령을 사용하십시오.

select * from information_schema.packages where (package_name = 'numpy' and language = 'python');
Copy

참고

Anaconda Snowflake 채널의 일부 패키지는 UDF가 제한된 엔진 내에서 실행되므로 Snowflake UDF 내에서 사용하기 위한 것이 아닙니다. 자세한 내용은 우수한 보안 관행 따르기 섹션을 참조하십시오.

Python UDF를 호출하는 쿼리가 Snowflake 웨어하우스 내에서 실행되면 Anaconda 패키지가 원활하게 설치되고 사용자를 대신하여 가상 웨어하우스에 캐시됩니다.

가져온 패키지 표시하기

DESCRIBE FUNCTION 명령을 실행하여 UDF 또는 UDTF가 사용 중인 패키지와 모듈의 목록을 표시할 수 있습니다. 핸들러가 Python으로 구현된 UDF에 대해 DESCRIBE FUNCTION 명령을 실행하면 가져온 모듈과 패키지의 목록뿐 아니라 설치된 패키지, 함수 서명 그리고 그 반환 형식을 비롯한 여러 속성의 값이 반환됩니다.

UDF의 식별자를 지정할 때 함수 매개 변수 형식(있는 경우)을 포함해야 합니다.

desc function stock_sale_average(varchar, number, number);
Copy

Anaconda 패키지 사용하기

Python UDF에서 가져온 Anaconda 패키지를 사용하는 방법에 대한 예는 인라인 처리기에서 패키지 가져오기 섹션을 참조하십시오.

패키지 정책 설정하기

패키지 정책을 사용하여 계정 수준에서 Anaconda의 서드 파티 Python 패키지에 대한 허용 목록과 차단 목록을 설정할 수 있습니다. 이를 통해 보다 엄격한 감사 및 보안 요구 사항을 충족할 수 있으며 환경에서 사용 가능하거나 차단되는 패키지를 더욱 세밀하게 제어할 수 있습니다. 자세한 내용은 패키지 정책 섹션을 참조하십시오.

콜드 웨어하우스에서의 성능

더욱 효율적인 리소스 관리를 위해 새로 프로비저닝된 가상 웨어하우스는 Anaconda 패키지를 사전 설치하지 않습니다. 그 대신, Anaconda 패키지는 UDF를 처음 사용할 때 온디맨드 방식으로 설치됩니다. 향후 UDF 실행을 위해 패키지는 같은 웨어하우스에 캐시됩니다. 웨어하우스가 일시 중단되면 캐시가 삭제됩니다. 이로 인해 UDF를 처음 사용할 때나 웨어하우스가 재개된 후에 성능이 저하될 수 있습니다. 약 30초 정도의 대기 시간이 추가로 발생할 수 있습니다.

로컬 개발 및 테스트

개발과 테스트를 위해 로컬 컴퓨터에 conda 환경을 만드는 데 도움이 되도록, Anaconda는 Snowflake Python UDF 환경에서 지원되는 패키지와 버전 중 일부를 미러링하는 Snowflake 채널을 만들었습니다. Anaconda의 서비스 약관에 대한 추가 포함 소프트웨어 약관에 따라 현지 테스트 및 개발을 위한 Snowflake conda 채널을 무료로 사용할 수 있습니다.

예를 들어, Snowflake 채널을 사용하여 로컬로 새 conda 환경을 만들려면 명령줄에 다음과 같이 입력하십시오.

conda create --name py38_env -c https://repo.anaconda.com/pkgs/snowflake python=3.8 numpy pandas
Copy

플랫폼 차이 때문에, 로컬 conda 환경이 서버 환경과 정확히 동일하지 않을 수 있습니다.

모범 사례

create function 문 내에서 패키지 사양(예: packages = ('numpy','pandas'))은 UDF가 직접 사용 중인 최상위 패키지만 지정해야 합니다. Anaconda는 패키지의 종속 항목 관리를 수행하고 필요한 종속 항목을 자동으로 설치합니다. 이 때문에 종속성 패키지를 지정하면 안 됩니다.

Anaconda는 패키지 버전을 지정하지 않으면 최신 버전의 패키지와 해당 종속 항목을 설치합니다. 일반적으로, 특정 패키지 버전을 지정할 필요는 없습니다. 버전 확인은 create function 명령을 사용하여 UDF를 생성할 때 한 번 수행됩니다. 그 후, 결과 버전 확인이 고정되고 이 특정 UDF가 실행될 때 동일한 패키지 세트가 사용됩니다.

create function 문 내에서 패키지 사양을 사용하는 방법의 예는 인라인 처리기에서 패키지 가져오기 섹션을 참조하십시오.

서드 파티 패키지의 알려진 문제

단일 행 예측 사용 시의 성능

Scikit-learn 및 TensorFlow와 같은 어떤 데이터 과학 프레임워크는 단일 행 ML 예측을 수행할 때 느릴 수 있습니다.

성능을 향상하려면 단일 행 예측 대신 일괄 예측을 수행하십시오. 이렇게 하려면 입력 데이터 세트를 Snowflake 배열로 변환하고 배열을 예측 코드에 입력하십시오. 테이블 형식 Python UDTF, ARRAY_AGG 함수, 테이블 형식 Java UDF(UDTF) 또는 테이블 형식 JavaScript UDF(UDTF) 를 사용하여 일괄 처리를 수행할 수 있습니다.

또한 벡터화된 Python UDF를 사용해 머신 러닝 또는 데이터 과학 라이브러리가 작동하도록 최적화된 배치로 입력 행을 수신하는 Python 함수를 정의할 수도 있습니다. 자세한 내용은 벡터화된 Python UDF 섹션을 참조하십시오.

데이터 과학 라이브러리에서 온디맨드 방식으로 데이터 다운로드하기

NLTK, Keras, spaCy 와 같은 데이터 과학 라이브러리에서는 온디맨드 방식으로 말뭉치, 데이터 또는 모델을 추가로 다운로드하는 기능을 제공합니다.

하지만 네트워크 액세스 및 파일에 쓰기와 같은 일부 기능을 사용하지 못하게 되는 Snowflake 보안 제약 조건으로 인해 Python UDF에서는 온디맨드 방식으로 다운로드할 수 없습니다.

이 문제를 해결하려면 데이터를 로컬 환경으로 다운로드한 다음, Snowflake 스테이지를 통해 데이터를 UDF에 제공하십시오.

XGBoost

병렬 예측 또는 훈련을 위해 UDF 또는 UDTF에 XGBoost를 사용할 때 각 XGBoost 인스턴스의 동시성은 1로 설정해야 합니다. 이를 통해 Snowflake 환경에서 실행 시 XGBoost가 최적의 성능을 고려해 구성됩니다.

예:

import xgboost as xgb
model = xgb.Booster()
model.set_param('nthread', 1)
model.load_model(...)
Copy
import xgboost as xgb
model = xgb.XGBRegressor(n_jobs=1)
Copy

TensorFlow/Keras

예측에 Tensorflow/Keras를 사용할 때는 Model.predict가 아니라 Model.predict_on_batch를 사용하십시오.

예:

import keras
model = keras.models.load_model(...)
model.predict_on_batch(np.array([input]))
Copy