Проблема с ошибкой отображения программы LangChain: AttributeError: модуль «сигнал» не имеет атрибута «SIGALRM».
Я получаю эту ошибку, когда тестирую локальную модель falcon-7b-instruct HuggingFace:
AttributeError: модуль «сигнал» не имеет атрибута «SIGALRM».
Я используюstreamlit и думаю, чтоstreamlit использует сигнал, который может вызывать эту ошибку. Я запускаю это в Windows, и, судя по тому, что я читал, signal.SIGALRM работает только с компьютерами Unix. Однако в моем случае это не должно иметь значения, потому что вы можете использоватьstreamlit в Windows.
Вот мой код для справки:
`from langchain.llms import HuggingFacePipeline
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, AutoModelForSeq2SeqLM
model_id = 'tiiuae/falcon-7b-instruct'
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
pipe = pipeline(
"text2text-generation",
model=model,
tokenizer=tokenizer,
max_length=100
)
chat = HuggingFacePipeline(pipeline=pipe)
#chat = HuggingFaceHub(repo_id="tiiuae/falcon-7b-instruct", model_kwargs={"temperature": temperature, "max_new_tokens": 1000}) # HuggingFace models do not like temperature =
# We create a RetrievalQA by passing it our vectordb and llm
qa = RetrievalQA.from_chain_type(llm=chat, chain_type="stuff", retriever=db.as_retriever())
st.success(qa.run(query))`
Честно говоря, я ожидал, что он будет работать как обычный объект HuggingFaceHub, но я продолжаю получать эту ошибку и не знаю, как ее исправить.
1 ответ
Хотя этот сигнал не поддерживается в Windows, вы сможете прочитать трассировку стека и определить, какая условная ветвь привела к его попытке запуска. В моем случае это выглядело так:
File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\transformers\dynamic_module_utils.py:535, in resolve_trust_remote_code(trust_remote_code, model_name, has_local_code, has_remote_code)
533 trust_remote_code = False
534 elif has_remote_code and TIME_OUT_REMOTE_CODE > 0:
--> 535 signal.signal(signal.SIGALRM, _raise_timeout_error)
536 signal.alarm(TIME_OUT_REMOTE_CODE)
537 while trust_remote_code is None:
Поиск в Google переменной has_remote_code привел меня к kwarg моделиtrust_remote_code , который помог мне преодолеть ошибку. Так что, возможно, попробуйте, если ваша трассировка стека похожа на мою:
pipe = pipeline(
"text2text-generation",
model=model,
tokenizer=tokenizer,
trust_remote_code=True,
max_length=100
)