Streamlit 앱을 위한 런타임 환경

Streamlit in Snowflake 는 Streamlit 앱을 위한 두 가지 유형의 런타임 환경을 제공합니다.

  • Container Runtime(미리 보기): 앱을 장기 실행 서비스로 제공하고 모든 뷰어 간에 공유되는 앱의 전용 인스턴스를 생성합니다.

  • Warehouse Runtime: 온디맨드를 실행하고 각 뷰어에 대한 앱의 개인 인스턴스를 생성합니다.

참고

ROOT_LOCATION 매개 변수와 CREATE STREAMLIT 명령을 사용하는 경우 앱은 Warehouse Runtime만 사용할 수 있으며 추가적인 제한 사항이 적용됩니다. 이 페이지에서는 FROM 매개 변수로 만든 앱을 다룹니다. 자세한 내용은 다양한 유형의 Streamlit 오브젝트 이해하기 섹션을 참조하십시오.

다음 테이블에서는 Streamlit in Snowflake 앱용 Warehouse Runtime 및 Container Runtime에서 지원하는 기능을 비교합니다.

지원되는 기능

Warehouse Runtime

Container Runtime

컴퓨팅

앱 코드 및 내부 쿼리를 위한 가상 웨어하우스.

앱 코드의 컴퓨팅 풀 노드. 내부 쿼리를 위한 가상 웨어하우스.

기본 이미지

Python 저장 프로시저의 Linux.

Snowpark 컨테이너의 Linux.

Python 버전

3.9, 3.10, 3.11

3.11

Streamlit 버전

1.22 이상(제한된 선택).

1.49 이상(streamlit-nightly 버전을 비롯한 모든 버전).

종속성

:file:`environment.yml`을 통한 Snowflake Conda 채널의 패키지.

pyproject.toml 또는 :file:`requirements.txt`를 통한 PyPI와 같은 외부 패키지 인덱스의 패키지.

= 연산자가 있는 버전 고정.

== 연산자가 있는 버전 고정.

* 와일드카드가 있는 버전 범위 사용.

<, <=, >=, > 기호가 있는 버전 범위 및 쉼표로 구분된 목록 사용.

진입점 위치

소스 디렉터리의 루트.

소스 디렉터리 내의 루트 또는 하위 디렉터리.

Streamlit 서버

각 뷰어 세션에 대한 Streamlit 서버의 임시 개별 인스턴스.

모든 뷰어 세션에 대한 영구 공유 서버 인스턴스.

뷰어 세션 간에 디스크, 컴퓨팅 및 메모리 리소스를 공유하지 않음.

뷰어 세션 간에 디스크, 컴퓨팅 및 메모리 리소스 공유.

세션 간 캐싱을 지원하지 않음.

Streamlit의 캐싱 기능을 완벽하게 지원.

시작 시간

온디맨드 앱 생성으로 인해 뷰어 세션당 속도가 느림.

뷰어 세션당 속도는 더 빠르지만 컨테이너 시작으로 인해 배포 속도가 느려짐.

액세스

편집하려면 소유권이 필요함.

Warehouse Runtime과 동일함.

소유자 권한 저장 프로시저와 유사하게 쿼리에 소유자 권한 사용.

일부 또는 모든 쿼리에 호출자 권한을 사용하는 옵션과 함께 쿼리에 대해 소유자 권한 사용.

Container Runtime

Container Runtime은 모든 뷰어 간에 공유되는 Streamlit 앱의 전용 인스턴스를 제공합니다. 각 뷰어는 앱의 동일한 인스턴스에 연결됩니다. 즉, 뷰어는 이미 실행 중인 앱에 빠르게 연결할 수 있습니다. 컨테이너는 분당 웨어하우스보다 비용이 훨씬 저렴하며 일반적으로 특히 자주 사용하는 앱의 경우 더 비용 효율적인 호스팅 솔루션입니다.

Container Runtime은 뷰어 세션 간에 디스크, 컴퓨팅 및 메모리 리소스를 공유합니다. 즉, Streamlit의 캐싱 기능을 최대한 활용하여 성능을 개선할 수 있습니다. 모든 뷰어가 바람직한 경험을 제공하려면 Container Runtime에서 효율적인 앱 디자인이 중요합니다.

외부 액세스 통합을 사용하면 PyPI 또는 단순 리포지토리 API<https://peps.python.org/pep-0503/>`_를 지원하는 기타 패키지 인덱스에서 Python 패키지를 설치할 있습니다. 이를 통해 Container Runtime이 유연해집니다. ``streamlit-nightly` 버전을 포함한 최신 버전의 Streamlit에 항상 액세스할 수 있습니다.

Warehouse Runtime

Warehouse Runtime은 각 뷰어에 대한 Streamlit 앱의 온디맨드 개인 인스턴스를 제공합니다. 뷰어가 앱을 열면 해당 뷰어에 대한 앱의 새 인스턴스가 생성됩니다. 각 뷰어에는 자체적으로 격리된 환경이 있으므로 사용자 로드 시간이 늘어납니다. 두 런타임 모두 소유자 권한을 사용하는 SQL 쿼리를 실행하는 경우, Warehouse Runtime을 사용하는 앱은 소유자 권한 저장 프로시저와 유사한 제한 사항이 적용됩니다. 자세한 내용은 소유자 권한 저장 프로시저 섹션을 참조하십시오.

Streamlit in Snowflake 의 리소스 선택 지침

Streamlit in Snowflake 에서 Streamlit 앱을 실행하면 Streamlit 앱의 복잡성, 웨어하우스 가용성, 대기 시간을 비롯한 여러 요소가 성능에 영향을 미칠 수 있습니다. 다음 섹션에서는 Streamlit in Snowflake 에서 가상 웨어하우스 및 컴퓨팅 풀을 사용하기 위한 일반적인 지침을 제공합니다.

컴퓨팅 풀 선택하기

Container Runtime을 사용하는 경우 Streamlit 앱을 실행할 컴퓨팅 풀을 선택해야 합니다. 각 Streamlit 앱은 단일 컴퓨팅 풀 노드에서 실행됩니다. 컴퓨팅 풀 노드의 크기는 앱의 성능에 영향을 미칩니다. 앱에 더 많은 메모리가 필요한 경우 더 큰 노드 크기를 사용할 수 있습니다. 그러나 Streamlit은 단일 프로세스로 실행되므로 앱이 여러 CPUs의 이점을 누릴 가능성은 낮습니다. 자세한 내용은 컴퓨팅 풀 만들기 섹션을 참조하십시오.

  • 향후 더 많은 앱을 추가할 때 마찰을 줄이려면 향후 Streamlit 앱을 설명하기 위한 MAX_NODES를 설정합니다.

  • 앱을 빠르게 만들려면 테스트 및 실험을 포함하여 동시에 실행하려는 앱의 수와 동일한 수의 MIN_NODES로 컴퓨팅 풀을 생성합니다.

  • 비용을 줄이려면 더 작은 노드 크기를 사용합니다.

  • 노드 수량과 노드 크기 모두 비용에 영향을 줍니다. 자세한 내용은 컴퓨팅 풀 비용 섹션을 참조하십시오.

예를 들어, 다음 명령은 2~5개의 Streamlit 앱을 동시에 실행하기 위한 컴퓨팅 풀을 생성합니다.

CREATE COMPUTE POOL streamlit_compute_pool
 MIN_NODES = 2
 MAX_NODES = 5
 INSTANCE_FAMILY = CPU_X64_XS;
Copy

가상 웨어하우스 선택하기

비용, 성능, 모니터링을 최적화하려면 앱을 실행하고 앱 내에서 쿼리를 실행하기 위해 별도의 컴퓨팅 리소스를 사용합니다. Container Runtime을 사용하는 경우 앱 코드가 컴퓨팅 풀 노드에서 실행되고 해당 쿼리가 가상 웨어하우스에서 실행되므로 컴퓨팅 리소스가 자동으로 분리됩니다. Warehouse Runtime을 사용하는 경우 앱 코드 내에서 다른 쿼리 웨어하우스를 활성화하지 않는 한, 앱은 동일한 웨어하우스를 사용하여 앱 코드를 실행하고 쿼리를 실행합니다.

예를 들어, Warehouse Runtime을 사용하면 X-Small 웨어하우스를 통해 Python 코드를 실행하고 앱에서 Large 쿼리 웨어하우스를 활성화하여 복잡한 쿼리를 실행할 수 있습니다.

참고

CREATE STREAMLIT 및 ALTER STREAMLIT 명령에서 QUERY_WAREHOUSE 매개 변수는 런타임 유형에 따라 다르게 사용해야 합니다.

  • Container Runtime의 경우, QUERY_WAREHOUSE는 앱 내에서 쿼리를 실행하기 위한 쿼리 웨어하우스를 설정합니다.

  • Warehouse Runtime의 경우, QUERY_WAREHOUSE는 앱 코드를 실행하기 위한 코드 웨어하우스를 설정합니다. 앱 코드 내에서 다른 웨어하우스를 활성화하지 않으면 쿼리 실행에 동일한 웨어하우스가 사용됩니다.

쿼리 웨어하우스 모범 사례

Streamlit 앱에서 쿼리 웨어하우스를 선택하려면 다른 Snowflake 워크로드와 동일한 일반 지침을 따릅니다. 웨어하우스 크기를 선택할 때 쿼리의 복잡성, 쿼리되는 데이터의 크기, 예상되는 동시성을 고려합니다.

앱에서 Container Runtime을 사용하는 경우 QUERY_WAREHOUSE 매개 변수를 사용하여 Streamlit 앱을 만들거나 변경할 때 쿼리 웨어하우스를 설정합니다. 그러나 앱에서 Warehouse Runtime을 사용하는 경우에는 QUERY_WAREHOUSE 매개 변수를 사용하여 코드 웨어하우스를 설정합니다. 일반적으로 앱 코드를 실행하기 위해 더 작은 전용 웨어하우스를 사용하고 앱 코드 내에서 다른 쿼리 웨어하우스로 수동으로 전환해야 합니다.

예: Container runtime

Container Runtime을 사용하는 경우 앱의 내부 쿼리를 실행하기에 충분히 큰 쿼리 웨어하우스를 설정합니다.

CREATE STREAMLIT my_app
FROM '@my_stage/app_folder'
MAIN_FILE = 'streamlit_app.py'
RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
COMPUTE_POOL = streamlit_compute_pool
QUERY_WAREHOUSE = my_large_warehouse
;
Copy

예: Warehouse runtime

Warehouse Runtime을 사용할 때 Streamlit 앱을 실행하기 위한 작은 전용 코드 웨어하우스를 설정합니다.

CREATE STREAMLIT my_app
FROM '@my_stage/app_folder'
MAIN_FILE = 'streamlit_app.py'
QUERY_WAREHOUSE = my_small_warehouse;
Copy

앱 코드 내에서 쿼리를 위해 다른 웨어하우스로 전환합니다.

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()
session.use_warehouse("my_large_warehouse")
Copy

코드 웨어하우스 모범 사례

Streamlit in Snowflake 에서 Warehouse Runtime을 사용하는 경우 앱 코드를 실행할 수 있는 가장 작은 웨어하우스를 선택합니다.

웨어하우스는 Streamlit 앱에서 사용하는 Python 패키지를 캐시하여 후속 앱 로드 성능을 개선합니다. 웨어하우스가 일시 중단되면 캐시가 제거되므로 웨어하우스가 재개된 후 초기 앱 로딩이 느려질 수 있습니다. 재개된 웨어하우스가 더 많은 앱을 실행하면 패키지 캐시가 다시 빌드되고 로딩 성능이 향상됩니다.

초당 청구 및 자동 일시 중단을 통해 소규모 웨어하우스에서 시작하여 필요에 따라 크기를 조정할 수 있는 유연성이 제공됩니다. 웨어하우스의 크기는 언제든지 늘릴 수 있습니다. 자세한 내용은 Streamlit 앱의 웨어하우스 변경하기 섹션을 참조하십시오.

Snowflake는 Streamlit 앱용 전용 웨어하우스를 사용하여 비용을 분리하고 다른 워크로드를 방지함으로써 잠재적으로 로드 시간을 개선할 것을 권장합니다. 앱 코드 내에서 필요에 따라 쿼리에 다른 웨어하우스를 활성화합니다.

자세한 내용은 웨어하우스 고려 사항 섹션을 참조하십시오.

  • 초기화 중에 웨어하우스 일시 중단을 방지하려면 자동 일시 중단을 30초 이상으로 설정합니다.

  • 비용을 절감하려면 Streamlit 앱의 절전 시간 및 WebSocket 시간 제한을 구성합니다. 자세한 내용은 Streamlit 앱용 사용자 지정 슬립 타이머 섹션을 참조하십시오.