Snowflake의 컨테이너 런타임(SPCS) 기반 노트북은 AI/ML 워크로드를 위해 강력한 CPU/GPU 리소스에 접근할 수 있게 해주는 훌륭한 기능입니다. 하지만 표준 노트북 환경과 달리, 이 컨테이너 환경에서 Python 패키지를 설치하는 것은 몇 가지 독특한 제약 사항과 절차를 따릅니다. 컨테이너 노트북에서 패키지를 설치할 때 겪을 수 있는 오류와 그 해결 과정을 공유합니다.
ML 모델링을 위해 numpy와 snowflake-ml-python을 설치중 오류 발생
ML 모델을 만들기 위해 컨테이너 런타임 노트북을 생성 후 ML에 필요한 numpy, pandas, scikit_learn, snowflake-ml-python 등의 .whl 파일을 Snowflake Stage에 업로드한 뒤, 'Stage Packages' UI를 통해 설치를 시도했습니다.
하지만 이 과정에서 4가지의 각기 다른 오류를 순차적으로 마주하게 되었습니다.
1단계 오류: "File does not exist or not authorized." (경로 문제)
가장 먼저 마주한 오류입니다. Stage에 파일이 있는 것을 LIST @... 명령으로 확인했음에도 파일이 없다는 오류가 발생했습니다.
- 시도한 경로:
- @MY_PACKAGE_STAGE/numpy...whl
- @TEST_DB.TEST_SCHEMA.MY_PACKAGE_STAGE/numpy...whl
해결책 1: 모든 경로는 '소문자'로 작성
Snowflake Notebook의 'Stage Packages' UI는 경로의 대소문자를 구분하며, 전체 경로(데이터베이스, 스키마, 스테이지, 파일명)를 모두 소문자로 작성해야 합니다.
- 올바른 경로: @tcmsdb.datalake.my_package_stage/numpy...whl
2단계 오류: "File does not exist..." (파일명 문제)
경로를 소문자로 수정하자 numpy, pandas 등은 설치되었지만, 특정 패키지 2개가 여전히 동일한 오류를 발생시켰습니다.
- 오류 발생 파일:
- .../snowflake_ml_python-1.18.0-py3-none-any.whl
- .../snowflake_snowpark_python-1.41.0-py3-none-any.whl
해결책 2: 파일명에 특수 문자(-none-any) 제거
컨테이너 노트북 환경은 패키지 파일명에 -none-any와 같은 특정 문자열이 포함된 경우, 이를 제대로 인식하지 못하는 문제가 있었습니다.
파일명을 더 간결하게(예: snowflake_ml_python-1.18.0-py3.whl) 변경하여 스테이지에 다시 업로드한 뒤, 변경된 파일명으로 'Stage Packages'에 등록하여 문제를 해결했습니다.
3단계 오류: "At least one ZIP or PY file must be provided." (컨테이너 제약)
모든 .whl 파일 설치에 성공한 후, import 코드를 실행하자 이번에는 SQL 컴파일 오류가 발생했습니다.
해결책 3: 'Stage Packages'에는 .zip 또는 .py 파일이 최소 1개 포함되어야 함
컨테이너 런타임 노트북의 독특한 제약 사항입니다. 'Stage Packages' 기능을 사용할 때는 최소 한 개 이상의 .zip 또는 .py 파일이 목록에 포함되어야 합니다. .whl 파일만으로는 세션이 시작되지 않습니다.
가장 간단한 해결책은 설치하려던 모든 .whl 파일들을 하나의 .zip 파일로 압축한 뒤, 그 .zip 파일을 'Stage Packages'에 등록하는 것입니다.
4단계 오류: "ModuleNotFoundError: ... snowflake.snowpark.ml." (설치 방식의 오해)
Stage 패키지 설정을 마쳤지만, import 시 snowflake.snowpark.ml 모듈을 찾을 수 없다는 근본적인 오류가 발생했습니다.
해결책 4: 공개(Public) 패키지는 EAI + !pip로 설치
문제의 핵심은 설치 방식의 오해였습니다.
- Stage Packages (스테이지 설치):
- 용도: PyPI에 없거나, 인터넷 접근이 불가능한 환경에서 사용하는 비공개(Private) / 사용자 정의 패키지를 설치할 때 사용합니다. (예: numpy, pandas 등)
- 방법: .whl 파일들을 .zip으로 묶어 스테이지에 등록합니다.
- External Access (외부 설치):
- 용도: snowflake-ml-python처럼 PyPI에 공개된(Public) 패키지를 설치하는 표준적인 방법입니다.
- 방법:
- [관리자] ACCOUNTADMIN 역할로 PyPI(pypi.org, files.pythonhosted.org)로의 Egress를 허용하는 External Access Integration(EAI)을 생성합니다.
- [사용자] 노트북 설정(Notebook settings) > 'External access' 탭에서 생성된 EAI를 활성화(Toggle on)합니다.
- [사용자] 노트북 셀에서 !pip install snowflake-ml-python 명령을 직접 실행합니다.
5단계 오류: "ModuleNotFoundError: ... anomaly_detection" (Import 경로 오류)
EAI와 !pip 설치까지 마쳤음에도 from snowflake.snowpark.ml.anomaly_detection import IsolationForest 코드에서 모듈을 찾을 수 없다는 최종 오류가 발생했습니다.
해결책 5: 올바른 Import 경로 사용
snowflake.snowpark.ml.anomaly_detection는 존재하지 않는 모듈이었습니다. IsolationForest를 사용하기 위한 올바른 경로는 사용 목적에 따라 두 가지로 나뉩니다.
- Scikit-learn (로컬 메모리 처리):
- Import: from sklearn.ensemble import IsolationForest
- 특징: 표준 Scikit-learn 라이브러리입니다. 컨테이너의 로컬 메모리에서 단일 노드로 실행되며, 중소규모 데이터(1GB 이하)의 빠른 프로토타이핑에 적합합니다.
- Snowflake ML Modeling (분산 처리):
- Import: from snowflake.ml.modeling.ensemble import IsolationForest
- 특징: Snowflake 웨어하우스의 분산 컴퓨팅을 활용합니다. Snowpark DataFrame을 입력받아 대용량 데이터를 로컬로 가져오지 않고 웨어하우스에서 직접 병렬 처리합니다. 프로덕션 환경에 최적화되어 있습니다.
이 두 가지 옵션 중 사용 사례에 맞는 패키지를 선택하여 import 경로를 수정한 후, 마침내 모든 문제를 해결하고 정상 동작을 확인할 수 있었습니다.
결론
Snowflake 컨테이너 노트북에서의 패키지 설치는 표준 환경보다 복잡하지만, 명확한 규칙이 존재합니다.
- 비공개/오프라인 패키지: 'Stage Packages'를 사용하되, ①소문자 경로, ②간결한 파일명, ③최소 1개의 .zip 파일 포함 규칙을 지켜야 합니다.
- 공개(PyPI) 패키지: EAI + !pip install을 사용하는 것이 표준입니다.
- Import: sklearn과 snowflake.ml.modeling의 차이를 명확히 인지하고 올바른 경로를 사용해야 합니다.
'Snowflake' 카테고리의 다른 글
| [Snowflake] Snowflake World Tour Seoul 2025 참관 후기 (0) | 2025.11.04 |
|---|---|
| [Snowflake] MSSQL에서 Snowflake까지, CDC 파이프라인 구축 (0) | 2025.11.04 |