当我使用 st.cache 时,Streamlit Unhashable TypeError

Posted

技术标签:

【中文标题】当我使用 st.cache 时,Streamlit Unhashable TypeError【英文标题】:Streamlit Unhashable TypeError when i use st.cache 【发布时间】:2022-01-13 09:28:17 【问题描述】:

当我使用 st.cache 装饰器兑现拥抱脸变压器模型时,我得到了

不可散列的类型错误

这是代码

from transformers import pipeline 
import streamlit as st 
from io import StringIO

@st.cache(hash_funcs=StringIO: StringIO.getvalue)
def model() :
    return pipeline("sentiment-analysis", model='akhooli/xlm-r-large-arabic-sent')

【问题讨论】:

【参考方案1】:

这对我有用:

from transformers import pipeline 
import tokenizers
import streamlit as st 
import copy


@st.cache(hash_funcs=tokenizers.Tokenizer: lambda _: None, tokenizers.AddedToken: lambda _: None)
def get_model() :
    return pipeline("sentiment-analysis", model='akhooli/xlm-r-large-arabic-sent')

input = st.text_input('Text')
bt = st.button("Get Sentiment Analysis")

if bt and input:
    model = copy.deepcopy(get_model())
    st.write(model(input))

注意 1: 使用输入 model(input) 调用管道会更改模型,我们不应该更改缓存值,因此我们需要复制模型并在副本上运行它。

注意 2: 第一次运行将使用get_model 函数加载模型,下一次运行将使用chace。

注意 3: 您可以在documentation 中阅读有关 stremlit 中高级缓存的更多信息。

输出示例:

【讨论】:

这也有效,我试过 allow_output_mutation = True 也有效【参考方案2】:

在 streamlit repo 的问题部分中搜索后

我发现不需要散列参数,只需要传递这个参数

allow_output_mutation = 真

【讨论】:

以上是关于当我使用 st.cache 时,Streamlit Unhashable TypeError的主要内容,如果未能解决你的问题,请参考以下文章

有了这个神器,轻松用 Python 写 APP !

如何在流光中缓存绘图?

在 Streamlit 上的 iframe 上使用 selenium 时打开了两个浏览器页面

我无法在 pycharm 和 spyder 上运行 streamlit。我在窗口上运行最新的 python 版本。当我尝试代码时,它说语法无效

如何使用 plotly 和 streamlit 绘制 groupby

为啥我的 Streamlit 应用程序会多次打开?