Я сталкиваюсь с этой ошибкой при запуске моего кода:
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
Решение кроется внутри самого модуля. Просто надо аналогично задать 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. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?