Потоковая ошибка, не вызывающая хэширования, при использовании st.cache

#huggingface-transformers #streamlit

#huggingface-трансформеры #потоковая

Вопрос:

когда я использую декоратор 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: Вы можете прочитать больше о расширенном кэшировании в stremlit в их документации.

Примеры вывода:

1

2

Комментарии:

1. это тоже сработало, я попробовал allow_output_mutation = True, и это тоже сработало

Ответ №2:

после поиска в разделе проблем в потоковом репозитории

я обнаружил, что аргумент хеширования не требуется, просто нужно передать этот аргумент

allow_output_mutation = True