Как увеличить max_new_tokens

Я сталкиваюсь с этой ошибкой при запуске моего кода:

ValueError: входная длина input_ids равна 1495, но для max_length установлено значение 20. Это может привести к неожиданному поведению. Вам следует рассмотреть возможность увеличения max_length или, еще лучше, установки max_new_tokens.

Я хотел, чтобы код генерировал запрос, вместо этого он говорит о проблеме максимальной длины, поскольку в основном я использую 8-битную квантованную ламу с использованием векторного внедрения для разработки чат-бота RAG.

import os
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from transformers import BitsAndBytesConfig, AutoTokenizer
from langchain_huggingface import ChatHuggingFace, HuggingFacePipeline
from time import time
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# Load PDF and split into chunks
def split_doc(file, chunk_size, chunk_overlap):
    text_splitter = CharacterTextSplitter(
        separator = "\n\n",
        chunk_size=chunk_size,
        chunk_overlap=chunk_overlap,
        length_function=len
    )
    return text_splitter.split_documents(file)

loader = PyPDFLoader("/kaggle/input/report/report.pdf")
pages = loader.load()
docs = split_doc(pages, 700, 450)

# Configure and load the model
model_name = "NousResearch/Llama-2-7b-chat-hf"
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
llm = HuggingFacePipeline.from_model_id(
    model_id=model_name,
    task = "text-generation",
    model_kwargs = {"trust_remote_code": True, "quantization_config": bnb_config}
)
chat_model = ChatHuggingFace(llm=llm)

# Set up embeddings and vector store
embedding_model_name = "sentence-transformers/all-mpnet-base-v2"
embedding_model_kwargs = {"device": "cuda"}
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name, model_kwargs=embedding_model_kwargs)
vectordb = Chroma.from_documents(documents=docs, embedding=embeddings, persist_directory = "chroma_db")
retriever = vectordb.as_retriever()

# Set up the QA system
qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type = "stuff",
    retriever=retriever,
    verbose=True
)

# Define the testing function
def test_rag(qa, query):
    print(f"Query: {query}\n")
    result = qa.run(query)
    print("\nResult: ", result)

query = "What were the main topics in this "
test_rag(qa, query)# get stuck here
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
167
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решение кроется внутри самого модуля. Просто надо аналогично задать Pipeline_kwargs

Пример использования from_model_id: .. кодовый блок:: python

        from langchain_community.llms import HuggingFacePipeline
        hf = HuggingFacePipeline.from_model_id(
            model_id = "gpt2",
            task = "text-generation",
            pipeline_kwargs = {"max_new_tokens": 10},
        )
Example passing pipeline in directly:
    .. code-block:: python

        from langchain_community.llms import HuggingFacePipeline
        from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

        model_id = "gpt2"
        tokenizer = AutoTokenizer.from_pretrained(model_id)
        model = AutoModelForCausalLM.from_pretrained(model_id)
        pipe = pipeline(
            "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=10
        )
        hf = HuggingFacePipeline(pipeline=pipe)
Ответ принят как подходящий

спасибо, это помогло, я добавил следующие детали: используя конвейер_kwargs в файлеhuggingface.py, я смог найти переменную, которую мог бы использовать, хотя использование этого метода сделает метод квантования немного бесполезным, поскольку вы будете потреблять больше памяти при увеличении токенов

llm = HuggingFacePipeline.from_model_id(
    model_id=model_name,
    task = "text-generation",
    model_kwargs = {
        "trust_remote_code": True,
        "quantization_config": bnb_config,
        "use_auth_token": auth_token
    },
    pipeline_kwargs = {"max_new_tokens": 8096}# this part is how i reconfigured the tokens

)

Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?

Jeremy Caney 24.07.2024 04:00

Другие вопросы по теме