Проблема с ошибкой отображения программы 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
        )
Другие вопросы по тегам