【大模型---streamlit中的装饰器st.cache_resource()】

文章介绍了Streamlit中的@st.cache_resource装饰器,用于缓存数据库连接等不可序列化资源,提高应用性能。通过ttl设置缓存过期时间,展示了其在减少重复创建资源和提升效率方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@st.cache_resource 是 Streamlit 提供的一个装饰器,用于缓存返回全局资源(如数据库连接、机器学习模型等)的函数。这些缓存的对象可以在所有用户、会话和重新运行中全局可用。这个装饰器特别适合于那些本质上不可序列化的类型,例如数据库连接、文件句柄或线程等,但也可以用于可序列化的对象。缓存的对象必须是线程安全的,因为它们可能会被多个线程同时访问。如果线程安全成为问题,可以考虑使用 st.session_state 来存储每个会话的资源。

@st.cache_resource 装饰器的使用示例如下:

import streamlit as st
import pandas as pd
from sqlalchemy import create_engine

@st.cache_resource(ttl=10800) # 3小时过期
def pd_mysql():
    host='localhost'
    port=3306
    username='root'
    password='123456'
    db='mydb'

    db_url = f'mysql+mysqlconnector://{username}:{password}@{host}:{port}/{db}'
    engine = create_engine(db_url)
    return engine

engine = pd_mysql() # 创建引擎

from transformers import AutoModel, AutoTokenizer import streamlit as st from streamlit_chat import message st.set_page_config( page_title="ChatGLM-6b 演示", page_icon=":robot:" ) @st.cache_resource def get_model(): tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda() model = model.eval() return tokenizer, model MAX_TURNS = 20 MAX_BOXES = MAX_TURNS * 2 def predict(input, max_length, top_p, temperature, history=None): tokenizer, model = get_model() if history is None: history = [] with container: if len(history) > 0: if len(history)>MAX_BOXES: history = history[-MAX_TURNS:] for i, (query, response) in enumerate(history): message(query, avatar_style="big-smile", key=str(i) + "_user") message(response, avatar_style="bottts", key=str(i)) message(input, avatar_style="big-smile", key=str(len(history)) + "_user") st.write("AI正在回复:") with st.empty(): for response, history in model.stream_chat(tokenizer, input, history, max_length=max_length, top_p=top_p, temperature=temperature): query, response = history[-1] st.write(response) return history container = st.container() # create a prompt text for the text generation prompt_text = st.text_area(label="用户命令输入", height = 100, placeholder="请在这儿输入您的命令") max_length = st.sidebar.slider( 'max_length', 0, 4096, 2048, step=1 ) top_p = st.sidebar.slider( 'top_p', 0.0, 1.0, 0.6, step=0.01 ) temperature = st.sidebar.slider( 'temperature', 0.0, 1.0, 0.95, step=0.01 ) if 'state' not in st.session_state: st.session_state['state'] = [] if st.button("发送", key="predict"): with st.spinner("AI正在思考,请稍等........"): # text generation st.session_state["state"] = predict(prompt_text, max_length, top_p, temperature, st.session_state["state"])逐句解析代码
05-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值