Streamlit에서 캐싱이 필요한 이유
Streamlit에서 앱에서 상호작용이 발생할 때마다 전체 스크립트가 처음부터 다시 실행
이 모델은 프로그래밍 모델을 간단하게 만들지만 비효율성을 초래
예를 들어, 스크립트에 대용량 데이터셋을 로드하는 함수나 시간이 오래 걸리는 계산을 수행하는 함수가 포함되어 있다면, 스크립트가 재실행될 때마다 해당 함수는 재실행됨
이때 캐싱이 필요
Streamlit의 캐싱을 사용하면 특정 함수가 입력 값이 변경될 때만 다시 실행되도록 할 수 있음
Streamlit 캐싱 사용의 장점
성능 향상: 캐시에 비싼 함수 호출 결과를 저장함으로써 Streamlit 앱의 속도를 향상 시킬수 있으며, 특히 대용량 데이터셋이나 복잡한 기계 학습 모델과 함께 작업할 때 데이터 로드 또는 계산에 오랜 시간이 걸리는 경우에 이점이 큼
효율성 증대: 함수가 이전과 같은 인수로 이전에 호출된 경우, Streamlit은 함수의 결과를 다시 계산하는 대신 캐시에서 결과를 검색가능
사용자 경험 향상: 로드 시간이 더 빠르고 반응성이 높은 앱은 더 좋은 사용자 경험을 제공
캐싱을 사용하면 사용자는 앱과 상호작용할 때마다 데이터가 로드되거나 계산이 완료될 때까지 기다릴 필요없음
@st.cache
함수 정의 앞에 추가하여 캐싱을 사용하도록 표시할 수 있는 데코레이터
@st.cache가 표시된 함수가 호출되면 Streamlit은 해당 함수가 이전과 같은 입력으로 호출되었는지 확인
이전에 호출되었다면 Streamlit은 함수의 출력을 캐시에서 읽어옴
그렇지 않다면 함수를 실행하고 결과를 캐시에 저장하고 결과를 반환
st.cache_data는
데이터프레임 변환, 데이터베이스 쿼리 또는 머신러닝 추론과 같은 데이터를 반환하는 함수를 캐시하는 데 사용되는 데코레이터
캐시된 객체는 "pickled" 형태로 저장되며, 캐시된 함수의 반환 값은 pickleable해야함
캐시된 함수를 호출하는 각 호출자는 캐시된 데이터의 고유한 사본을 받게 됨
함수의 캐시를 `func.clear()`로 지울 수 있고, 전체 캐시를 `st.cache_data.clear()`로 지울 수 있음
글로벌 리소스를 캐시하려는 경우 `st.cache_resource`를 사용하는 것이 좋음
st.cache_data(func=None, *, ttl, max_entries, show_spinner, persist, experimental_allow_widgets, hash_funcs=None)
'python' 카테고리의 다른 글
[GPT][문서검색] Streaming (0) | 2024.04.15 |
---|---|
[GPT][문서 검색] Chain (0) | 2024.04.15 |
[GPT][문서검색] Uploading Documents (0) | 2024.04.15 |
[GPT] streamlit - Chat Messages (0) | 2024.04.08 |
[GPT] streamlit - Multi Page (0) | 2024.04.08 |