서드 파티 패키지 사용하기

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

이 항목의 내용:

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

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

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

편의상, Anaconda에서 만들어 제공하는 여러 인기 오픈 소스 서드 파티 Python 패키지는 Snowflake 내부에서 바로 사용할 수 있도록 되어 있습니다. Snowflake의 표준 소비 기반 가격과 별개로 Anaconda 패키지 사용에 대한 추가 비용은 없습니다.

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

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

시작하기

Snowflake 내부에서 Anaconda가 제공하는 패키지를 사용하기 시작하기 전, 아래 단계를 따라 Snowflake 서드 파티 약관 에 동의해야 합니다.

참고

  • 조직 관리자(즉, ORGADMIN 시스템 역할을 가진 사용자)가 이 섹션의 단계를 완료해야 합니다. 자세한 내용은 계정에 ORGADMIN 역할 활성화하기 섹션을 참조하십시오. 조직에 대한 일반적인 사항은 Snowflake 조직 관리 섹션을 참조하십시오.

  • 약관에 동의하려면 사용자는 다음 사용자 속성 을 설정해야 합니다.

    • 이름

    • 이메일 주소


    사용자 속성이 설정되지 않은 경우 Snowflake UI는 이러한 속성을 업데이트하라는 메시지를 표시한 후 계속 진행합니다. 사용자 관리자(즉, USERADMIN 역할이 있는 사용자) 또는 더 높은 역할이나, Snowflake 사용자 오브젝트에 대한 OWNERSHIP 권한이 있는 다른 역할은 이러한 세부 정보를 귀하의 사용자 프로필에 추가할 수 있습니다. 자세한 내용은 다른 사용자 속성 수정하기 섹션을 참조하십시오.

  1. Snowflake 웹 인터페이스인 Snowsight 에 로그인합니다.

  2. 로그인 이름 옆에 있는 드롭다운 메뉴를 클릭한 다음 Switch Role » ORGADMIN 을 클릭하여 조직 관리자 역할로 변경합니다.

  3. Admin » Billing » Terms & Billing 를 클릭합니다.

  4. Anaconda 섹션으로 스크롤하고 Enable 버튼을 클릭합니다. Anaconda Packages (Preview Feature) 대화 상자가 열립니다.

  5. 링크를 클릭하여 Snowflake 서드 파티 약관을 검토하십시오.

  6. 약관에 동의하면 Acknowledge & Continue 버튼을 클릭합니다.

패키지 표시 및 사용하기

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

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

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

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

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

참고

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);

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

더욱 효율적인 리소스 관리를 위해 새로 프로비저닝된 가상 웨어하우스는 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

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

모범 사례

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

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

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

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

단일 행 예측 사용 시의 성능

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

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

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

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

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(...)
import xgboost as xgb
model = xgb.XGBRegressor(n_jobs=1)

TensorFlow/Keras

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

예:

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

Joblib

Python UDF 또는 저장 프로시저에서 joblib.Parallel 을 사용할 때 backend 매개 변수를 threading 으로 설정해야 합니다. multiprocessing 또는 loky 와 같은 다른 백엔드는 지원되지 않습니다. 병렬 처리를 위해 multiprocessing 또는 loky 백엔드에 의존하는 특정 scikit-learn 알고리즘은 현재 사용 가능한 모든 리소스를 사용하지 않고 더 느리게 실행될 수 있습니다.

맨 위로 이동