Dolly + LangChain SQL Chain - RuntimeError: The size of tensor a (2048) must match the size of tensor b (2611) at non-singleton dimension 3

#11
by kevinknights29 - opened

Hi Team,

I've being playing with dolly v2 3b model and extending its functionality with LangChain, one of those being SQL Chain.

While doing so I've encountered the following error:
RuntimeError: The size of tensor a (2048) must match the size of tensor b (2611) at non-singleton dimension 3

Do you know what might be the cause of this error?

Support information:
Code (Executed on google collab with GPU):

!pip install "accelerate>=0.16.0,<1" "transformers[torch]>=4.28.1,<5" "torch>=1.13.1,<2" langchain 

import torch
from transformers import pipeline

generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16,
                         trust_remote_code=True, device_map="auto", return_full_text=True)

from langchain.llms import HuggingFacePipeline

hf_pipeline = HuggingFacePipeline(pipeline=generate_text)

import requests

dataset_url = "https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip"
dataset_zip = "chinook_db.zip"

response = requests.get(dataset_url)
with open(dataset_zip, "wb") as f:
  f.write(response.content)

import zipfile
from pathlib import Path

with zipfile.ZipFile(dataset_zip, "r") as f:
    f.extractall(".")
Path(dataset_zip).unlink()

from langchain import SQLDatabase

db = SQLDatabase.from_uri("sqlite:///./chinook.db")
db.table_info

from langchain import SQLDatabaseChain

db_chain = SQLDatabaseChain(llm=hf_pipeline, database=db, verbose=True)
db_chain.run("How many employees are there?")

Complete Error Log:

> Entering new SQLDatabaseChain chain...
How many employees are there?
SQLQuery:
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ in <cell line: 4>:4                                                                              โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/base.py:213 in run                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   210 โ”‚   โ”‚   if args and not kwargs:                                                            โ”‚
โ”‚   211 โ”‚   โ”‚   โ”‚   if len(args) != 1:                                                             โ”‚
โ”‚   212 โ”‚   โ”‚   โ”‚   โ”‚   raise ValueError("`run` supports only one positional argument.")           โ”‚
โ”‚ โฑ 213 โ”‚   โ”‚   โ”‚   return self(args[0])[self.output_keys[0]]                                      โ”‚
โ”‚   214 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   215 โ”‚   โ”‚   if kwargs and not args:                                                            โ”‚
โ”‚   216 โ”‚   โ”‚   โ”‚   return self(kwargs)[self.output_keys[0]]                                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/base.py:116 in __call__                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   113 โ”‚   โ”‚   โ”‚   outputs = self._call(inputs)                                                   โ”‚
โ”‚   114 โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                        โ”‚
โ”‚   115 โ”‚   โ”‚   โ”‚   self.callback_manager.on_chain_error(e, verbose=self.verbose)                  โ”‚
โ”‚ โฑ 116 โ”‚   โ”‚   โ”‚   raise e                                                                        โ”‚
โ”‚   117 โ”‚   โ”‚   self.callback_manager.on_chain_end(outputs, verbose=self.verbose)                  โ”‚
โ”‚   118 โ”‚   โ”‚   return self.prep_outputs(inputs, outputs, return_only_outputs)                     โ”‚
โ”‚   119                                                                                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/base.py:113 in __call__                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   110 โ”‚   โ”‚   โ”‚   verbose=self.verbose,                                                          โ”‚
โ”‚   111 โ”‚   โ”‚   )                                                                                  โ”‚
โ”‚   112 โ”‚   โ”‚   try:                                                                               โ”‚
โ”‚ โฑ 113 โ”‚   โ”‚   โ”‚   outputs = self._call(inputs)                                                   โ”‚
โ”‚   114 โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                        โ”‚
โ”‚   115 โ”‚   โ”‚   โ”‚   self.callback_manager.on_chain_error(e, verbose=self.verbose)                  โ”‚
โ”‚   116 โ”‚   โ”‚   โ”‚   raise e                                                                        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/sql_database/base.py:83 in _call         โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    80 โ”‚   โ”‚   โ”‚   "stop": ["\nSQLResult:"],                                                      โ”‚
โ”‚    81 โ”‚   โ”‚   }                                                                                  โ”‚
โ”‚    82 โ”‚   โ”‚   intermediate_steps = []                                                            โ”‚
โ”‚ โฑ  83 โ”‚   โ”‚   sql_cmd = llm_chain.predict(**llm_inputs)                                          โ”‚
โ”‚    84 โ”‚   โ”‚   intermediate_steps.append(sql_cmd)                                                 โ”‚
โ”‚    85 โ”‚   โ”‚   self.callback_manager.on_text(sql_cmd, color="green", verbose=self.verbose)        โ”‚
โ”‚    86 โ”‚   โ”‚   result = self.database.run(sql_cmd)                                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/llm.py:151 in predict                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   148 โ”‚   โ”‚   โ”‚   โ”‚                                                                              โ”‚
โ”‚   149 โ”‚   โ”‚   โ”‚   โ”‚   completion = llm.predict(adjective="funny")                                โ”‚
โ”‚   150 โ”‚   โ”‚   """                                                                                โ”‚
โ”‚ โฑ 151 โ”‚   โ”‚   return self(kwargs)[self.output_key]                                               โ”‚
โ”‚   152 โ”‚                                                                                          โ”‚
โ”‚   153 โ”‚   async def apredict(self, **kwargs: Any) -> str:                                        โ”‚
โ”‚   154 โ”‚   โ”‚   """Format prompt with kwargs and pass to LLM.                                      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/base.py:116 in __call__                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   113 โ”‚   โ”‚   โ”‚   outputs = self._call(inputs)                                                   โ”‚
โ”‚   114 โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                        โ”‚
โ”‚   115 โ”‚   โ”‚   โ”‚   self.callback_manager.on_chain_error(e, verbose=self.verbose)                  โ”‚
โ”‚ โฑ 116 โ”‚   โ”‚   โ”‚   raise e                                                                        โ”‚
โ”‚   117 โ”‚   โ”‚   self.callback_manager.on_chain_end(outputs, verbose=self.verbose)                  โ”‚
โ”‚   118 โ”‚   โ”‚   return self.prep_outputs(inputs, outputs, return_only_outputs)                     โ”‚
โ”‚   119                                                                                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/base.py:113 in __call__                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   110 โ”‚   โ”‚   โ”‚   verbose=self.verbose,                                                          โ”‚
โ”‚   111 โ”‚   โ”‚   )                                                                                  โ”‚
โ”‚   112 โ”‚   โ”‚   try:                                                                               โ”‚
โ”‚ โฑ 113 โ”‚   โ”‚   โ”‚   outputs = self._call(inputs)                                                   โ”‚
โ”‚   114 โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                        โ”‚
โ”‚   115 โ”‚   โ”‚   โ”‚   self.callback_manager.on_chain_error(e, verbose=self.verbose)                  โ”‚
โ”‚   116 โ”‚   โ”‚   โ”‚   raise e                                                                        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/llm.py:57 in _call                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    54 โ”‚   โ”‚   return [self.output_key]                                                           โ”‚
โ”‚    55 โ”‚                                                                                          โ”‚
โ”‚    56 โ”‚   def _call(self, inputs: Dict[str, Any]) -> Dict[str, str]:                             โ”‚
โ”‚ โฑ  57 โ”‚   โ”‚   return self.apply([inputs])[0]                                                     โ”‚
โ”‚    58 โ”‚                                                                                          โ”‚
โ”‚    59 โ”‚   def generate(self, input_list: List[Dict[str, Any]]) -> LLMResult:                     โ”‚
โ”‚    60 โ”‚   โ”‚   """Generate LLM result from inputs."""                                             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/llm.py:118 in apply                      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   115 โ”‚                                                                                          โ”‚
โ”‚   116 โ”‚   def apply(self, input_list: List[Dict[str, Any]]) -> List[Dict[str, str]]:             โ”‚
โ”‚   117 โ”‚   โ”‚   """Utilize the LLM generate method for speed gains."""                             โ”‚
โ”‚ โฑ 118 โ”‚   โ”‚   response = self.generate(input_list)                                               โ”‚
โ”‚   119 โ”‚   โ”‚   return self.create_outputs(response)                                               โ”‚
โ”‚   120 โ”‚                                                                                          โ”‚
โ”‚   121 โ”‚   async def aapply(self, input_list: List[Dict[str, Any]]) -> List[Dict[str, str]]:      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/chains/llm.py:62 in generate                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    59 โ”‚   def generate(self, input_list: List[Dict[str, Any]]) -> LLMResult:                     โ”‚
โ”‚    60 โ”‚   โ”‚   """Generate LLM result from inputs."""                                             โ”‚
โ”‚    61 โ”‚   โ”‚   prompts, stop = self.prep_prompts(input_list)                                      โ”‚
โ”‚ โฑ  62 โ”‚   โ”‚   return self.llm.generate_prompt(prompts, stop)                                     โ”‚
โ”‚    63 โ”‚                                                                                          โ”‚
โ”‚    64 โ”‚   async def agenerate(self, input_list: List[Dict[str, Any]]) -> LLMResult:              โ”‚
โ”‚    65 โ”‚   โ”‚   """Generate LLM result from inputs."""                                             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/llms/base.py:107 in generate_prompt             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   104 โ”‚   โ”‚   self, prompts: List[PromptValue], stop: Optional[List[str]] = None                 โ”‚
โ”‚   105 โ”‚   ) -> LLMResult:                                                                        โ”‚
โ”‚   106 โ”‚   โ”‚   prompt_strings = [p.to_string() for p in prompts]                                  โ”‚
โ”‚ โฑ 107 โ”‚   โ”‚   return self.generate(prompt_strings, stop=stop)                                    โ”‚
โ”‚   108 โ”‚                                                                                          โ”‚
โ”‚   109 โ”‚   async def agenerate_prompt(                                                            โ”‚
โ”‚   110 โ”‚   โ”‚   self, prompts: List[PromptValue], stop: Optional[List[str]] = None                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/llms/base.py:140 in generate                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   137 โ”‚   โ”‚   โ”‚   โ”‚   output = self._generate(prompts, stop=stop)                                โ”‚
โ”‚   138 โ”‚   โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                    โ”‚
โ”‚   139 โ”‚   โ”‚   โ”‚   โ”‚   self.callback_manager.on_llm_error(e, verbose=self.verbose)                โ”‚
โ”‚ โฑ 140 โ”‚   โ”‚   โ”‚   โ”‚   raise e                                                                    โ”‚
โ”‚   141 โ”‚   โ”‚   โ”‚   self.callback_manager.on_llm_end(output, verbose=self.verbose)                 โ”‚
โ”‚   142 โ”‚   โ”‚   โ”‚   return output                                                                  โ”‚
โ”‚   143 โ”‚   โ”‚   params = self.dict()                                                               โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/llms/base.py:137 in generate                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   134 โ”‚   โ”‚   โ”‚   โ”‚   {"name": self.__class__.__name__}, prompts, verbose=self.verbose           โ”‚
โ”‚   135 โ”‚   โ”‚   โ”‚   )                                                                              โ”‚
โ”‚   136 โ”‚   โ”‚   โ”‚   try:                                                                           โ”‚
โ”‚ โฑ 137 โ”‚   โ”‚   โ”‚   โ”‚   output = self._generate(prompts, stop=stop)                                โ”‚
โ”‚   138 โ”‚   โ”‚   โ”‚   except (KeyboardInterrupt, Exception) as e:                                    โ”‚
โ”‚   139 โ”‚   โ”‚   โ”‚   โ”‚   self.callback_manager.on_llm_error(e, verbose=self.verbose)                โ”‚
โ”‚   140 โ”‚   โ”‚   โ”‚   โ”‚   raise e                                                                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/llms/base.py:324 in _generate                   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   321 โ”‚   โ”‚   # TODO: add caching here.                                                          โ”‚
โ”‚   322 โ”‚   โ”‚   generations = []                                                                   โ”‚
โ”‚   323 โ”‚   โ”‚   for prompt in prompts:                                                             โ”‚
โ”‚ โฑ 324 โ”‚   โ”‚   โ”‚   text = self._call(prompt, stop=stop)                                           โ”‚
โ”‚   325 โ”‚   โ”‚   โ”‚   generations.append([Generation(text=text)])                                    โ”‚
โ”‚   326 โ”‚   โ”‚   return LLMResult(generations=generations)                                          โ”‚
โ”‚   327                                                                                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/langchain/llms/huggingface_pipeline.py:150 in _call       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   147 โ”‚   โ”‚   return "huggingface_pipeline"                                                      โ”‚
โ”‚   148 โ”‚                                                                                          โ”‚
โ”‚   149 โ”‚   def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:                 โ”‚
โ”‚ โฑ 150 โ”‚   โ”‚   response = self.pipeline(prompt)                                                   โ”‚
โ”‚   151 โ”‚   โ”‚   if self.pipeline.task == "text-generation":                                        โ”‚
โ”‚   152 โ”‚   โ”‚   โ”‚   # Text generation return includes the starter text.                            โ”‚
โ”‚   153 โ”‚   โ”‚   โ”‚   text = response[0]["generated_text"][len(prompt) :]                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/pipelines/base.py:1109 in __call__           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1106 โ”‚   โ”‚   โ”‚   โ”‚   )                                                                         โ”‚
โ”‚   1107 โ”‚   โ”‚   โ”‚   )                                                                             โ”‚
โ”‚   1108 โ”‚   โ”‚   else:                                                                             โ”‚
โ”‚ โฑ 1109 โ”‚   โ”‚   โ”‚   return self.run_single(inputs, preprocess_params, forward_params, postproces  โ”‚
โ”‚   1110 โ”‚                                                                                         โ”‚
โ”‚   1111 โ”‚   def run_multi(self, inputs, preprocess_params, forward_params, postprocess_params):   โ”‚
โ”‚   1112 โ”‚   โ”‚   return [self.run_single(item, preprocess_params, forward_params, postprocess_par  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/pipelines/base.py:1116 in run_single         โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1113 โ”‚                                                                                         โ”‚
โ”‚   1114 โ”‚   def run_single(self, inputs, preprocess_params, forward_params, postprocess_params):  โ”‚
โ”‚   1115 โ”‚   โ”‚   model_inputs = self.preprocess(inputs, **preprocess_params)                       โ”‚
โ”‚ โฑ 1116 โ”‚   โ”‚   model_outputs = self.forward(model_inputs, **forward_params)                      โ”‚
โ”‚   1117 โ”‚   โ”‚   outputs = self.postprocess(model_outputs, **postprocess_params)                   โ”‚
โ”‚   1118 โ”‚   โ”‚   return outputs                                                                    โ”‚
โ”‚   1119                                                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/pipelines/base.py:1015 in forward            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1012 โ”‚   โ”‚   โ”‚   โ”‚   inference_context = self.get_inference_context()                          โ”‚
โ”‚   1013 โ”‚   โ”‚   โ”‚   โ”‚   with inference_context():                                                 โ”‚
โ”‚   1014 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   model_inputs = self._ensure_tensor_on_device(model_inputs, device=se  โ”‚
โ”‚ โฑ 1015 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   model_outputs = self._forward(model_inputs, **forward_params)         โ”‚
โ”‚   1016 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   model_outputs = self._ensure_tensor_on_device(model_outputs, device=  โ”‚
โ”‚   1017 โ”‚   โ”‚   โ”‚   else:                                                                         โ”‚
โ”‚   1018 โ”‚   โ”‚   โ”‚   โ”‚   raise ValueError(f"Framework {self.framework} is not supported")          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /root/.cache/huggingface/modules/transformers_modules/databricks/dolly-v2-3b/e19a5252f69d79d94ac โ”‚
โ”‚ 95045eb9b8a158775f701/instruct_pipeline.py:132 in _forward                                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   129 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚   130 โ”‚   โ”‚   โ”‚   in_b = input_ids.shape[0]                                                      โ”‚
โ”‚   131 โ”‚   โ”‚                                                                                      โ”‚
โ”‚ โฑ 132 โ”‚   โ”‚   generated_sequence = self.model.generate(                                          โ”‚
โ”‚   133 โ”‚   โ”‚   โ”‚   input_ids=input_ids.to(self.model.device),                                     โ”‚
โ”‚   134 โ”‚   โ”‚   โ”‚   attention_mask=attention_mask.to(self.model.device) if attention_mask is not   โ”‚
โ”‚   135 โ”‚   โ”‚   โ”‚   pad_token_id=self.tokenizer.pad_token_id,                                      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/torch/autograd/grad_mode.py:27 in decorate_context        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    24 โ”‚   โ”‚   @functools.wraps(func)                                                             โ”‚
โ”‚    25 โ”‚   โ”‚   def decorate_context(*args, **kwargs):                                             โ”‚
โ”‚    26 โ”‚   โ”‚   โ”‚   with self.clone():                                                             โ”‚
โ”‚ โฑ  27 โ”‚   โ”‚   โ”‚   โ”‚   return func(*args, **kwargs)                                               โ”‚
โ”‚    28 โ”‚   โ”‚   return cast(F, decorate_context)                                                   โ”‚
โ”‚    29 โ”‚                                                                                          โ”‚
โ”‚    30 โ”‚   def _wrap_generator(self, func):                                                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/generation/utils.py:1485 in generate         โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1482 โ”‚   โ”‚   โ”‚   )                                                                             โ”‚
โ”‚   1483 โ”‚   โ”‚   โ”‚                                                                                 โ”‚
โ”‚   1484 โ”‚   โ”‚   โ”‚   # 13. run sample                                                              โ”‚
โ”‚ โฑ 1485 โ”‚   โ”‚   โ”‚   return self.sample(                                                           โ”‚
โ”‚   1486 โ”‚   โ”‚   โ”‚   โ”‚   input_ids,                                                                โ”‚
โ”‚   1487 โ”‚   โ”‚   โ”‚   โ”‚   logits_processor=logits_processor,                                        โ”‚
โ”‚   1488 โ”‚   โ”‚   โ”‚   โ”‚   logits_warper=logits_warper,                                              โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/generation/utils.py:2524 in sample           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   2521 โ”‚   โ”‚   โ”‚   model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)  โ”‚
โ”‚   2522 โ”‚   โ”‚   โ”‚                                                                                 โ”‚
โ”‚   2523 โ”‚   โ”‚   โ”‚   # forward pass to get next token                                              โ”‚
โ”‚ โฑ 2524 โ”‚   โ”‚   โ”‚   outputs = self(                                                               โ”‚
โ”‚   2525 โ”‚   โ”‚   โ”‚   โ”‚   **model_inputs,                                                           โ”‚
โ”‚   2526 โ”‚   โ”‚   โ”‚   โ”‚   return_dict=True,                                                         โ”‚
โ”‚   2527 โ”‚   โ”‚   โ”‚   โ”‚   output_attentions=output_attentions,                                      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/torch/nn/modules/module.py:1194 in _call_impl             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1191 โ”‚   โ”‚   # this function, and just call forward.                                           โ”‚
โ”‚   1192 โ”‚   โ”‚   if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks o  โ”‚
โ”‚   1193 โ”‚   โ”‚   โ”‚   โ”‚   or _global_forward_hooks or _global_forward_pre_hooks):                   โ”‚
โ”‚ โฑ 1194 โ”‚   โ”‚   โ”‚   return forward_call(*input, **kwargs)                                         โ”‚
โ”‚   1195 โ”‚   โ”‚   # Do not call functions when jit is used                                          โ”‚
โ”‚   1196 โ”‚   โ”‚   full_backward_hooks, non_full_backward_hooks = [], []                             โ”‚
โ”‚   1197 โ”‚   โ”‚   if self._backward_hooks or _global_backward_hooks:                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/accelerate/hooks.py:165 in new_forward                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   162 โ”‚   โ”‚   โ”‚   with torch.no_grad():                                                          โ”‚
โ”‚   163 โ”‚   โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                      โ”‚
โ”‚   164 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚ โฑ 165 โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                          โ”‚
โ”‚   166 โ”‚   โ”‚   return module._hf_hook.post_forward(module, output)                                โ”‚
โ”‚   167 โ”‚                                                                                          โ”‚
โ”‚   168 โ”‚   module.forward = new_forward                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/models/gpt_neox/modeling_gpt_neox.py:662 in  โ”‚
โ”‚ forward                                                                                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   659 โ”‚   โ”‚   ```"""                                                                             โ”‚
โ”‚   660 โ”‚   โ”‚   return_dict = return_dict if return_dict is not None else self.config.use_return   โ”‚
โ”‚   661 โ”‚   โ”‚                                                                                      โ”‚
โ”‚ โฑ 662 โ”‚   โ”‚   outputs = self.gpt_neox(                                                           โ”‚
โ”‚   663 โ”‚   โ”‚   โ”‚   input_ids,                                                                     โ”‚
โ”‚   664 โ”‚   โ”‚   โ”‚   attention_mask=attention_mask,                                                 โ”‚
โ”‚   665 โ”‚   โ”‚   โ”‚   position_ids=position_ids,                                                     โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/torch/nn/modules/module.py:1194 in _call_impl             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1191 โ”‚   โ”‚   # this function, and just call forward.                                           โ”‚
โ”‚   1192 โ”‚   โ”‚   if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks o  โ”‚
โ”‚   1193 โ”‚   โ”‚   โ”‚   โ”‚   or _global_forward_hooks or _global_forward_pre_hooks):                   โ”‚
โ”‚ โฑ 1194 โ”‚   โ”‚   โ”‚   return forward_call(*input, **kwargs)                                         โ”‚
โ”‚   1195 โ”‚   โ”‚   # Do not call functions when jit is used                                          โ”‚
โ”‚   1196 โ”‚   โ”‚   full_backward_hooks, non_full_backward_hooks = [], []                             โ”‚
โ”‚   1197 โ”‚   โ”‚   if self._backward_hooks or _global_backward_hooks:                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/accelerate/hooks.py:165 in new_forward                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   162 โ”‚   โ”‚   โ”‚   with torch.no_grad():                                                          โ”‚
โ”‚   163 โ”‚   โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                      โ”‚
โ”‚   164 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚ โฑ 165 โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                          โ”‚
โ”‚   166 โ”‚   โ”‚   return module._hf_hook.post_forward(module, output)                                โ”‚
โ”‚   167 โ”‚                                                                                          โ”‚
โ”‚   168 โ”‚   module.forward = new_forward                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/models/gpt_neox/modeling_gpt_neox.py:553 in  โ”‚
โ”‚ forward                                                                                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   550 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   head_mask[i],                                                          โ”‚
โ”‚   551 โ”‚   โ”‚   โ”‚   โ”‚   )                                                                          โ”‚
โ”‚   552 โ”‚   โ”‚   โ”‚   else:                                                                          โ”‚
โ”‚ โฑ 553 โ”‚   โ”‚   โ”‚   โ”‚   outputs = layer(                                                           โ”‚
โ”‚   554 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   hidden_states,                                                         โ”‚
โ”‚   555 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   attention_mask=attention_mask,                                         โ”‚
โ”‚   556 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   position_ids=position_ids,                                             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/torch/nn/modules/module.py:1194 in _call_impl             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1191 โ”‚   โ”‚   # this function, and just call forward.                                           โ”‚
โ”‚   1192 โ”‚   โ”‚   if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks o  โ”‚
โ”‚   1193 โ”‚   โ”‚   โ”‚   โ”‚   or _global_forward_hooks or _global_forward_pre_hooks):                   โ”‚
โ”‚ โฑ 1194 โ”‚   โ”‚   โ”‚   return forward_call(*input, **kwargs)                                         โ”‚
โ”‚   1195 โ”‚   โ”‚   # Do not call functions when jit is used                                          โ”‚
โ”‚   1196 โ”‚   โ”‚   full_backward_hooks, non_full_backward_hooks = [], []                             โ”‚
โ”‚   1197 โ”‚   โ”‚   if self._backward_hooks or _global_backward_hooks:                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/accelerate/hooks.py:165 in new_forward                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   162 โ”‚   โ”‚   โ”‚   with torch.no_grad():                                                          โ”‚
โ”‚   163 โ”‚   โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                      โ”‚
โ”‚   164 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚ โฑ 165 โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                          โ”‚
โ”‚   166 โ”‚   โ”‚   return module._hf_hook.post_forward(module, output)                                โ”‚
โ”‚   167 โ”‚                                                                                          โ”‚
โ”‚   168 โ”‚   module.forward = new_forward                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/models/gpt_neox/modeling_gpt_neox.py:320 in  โ”‚
โ”‚ forward                                                                                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   317 โ”‚   โ”‚   layer_past: Optional[Tuple[torch.Tensor]] = None,                                  โ”‚
โ”‚   318 โ”‚   โ”‚   output_attentions: Optional[bool] = False,                                         โ”‚
โ”‚   319 โ”‚   ):                                                                                     โ”‚
โ”‚ โฑ 320 โ”‚   โ”‚   attention_layer_outputs = self.attention(                                          โ”‚
โ”‚   321 โ”‚   โ”‚   โ”‚   self.input_layernorm(hidden_states),                                           โ”‚
โ”‚   322 โ”‚   โ”‚   โ”‚   attention_mask=attention_mask,                                                 โ”‚
โ”‚   323 โ”‚   โ”‚   โ”‚   position_ids=position_ids,                                                     โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/torch/nn/modules/module.py:1194 in _call_impl             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   1191 โ”‚   โ”‚   # this function, and just call forward.                                           โ”‚
โ”‚   1192 โ”‚   โ”‚   if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks o  โ”‚
โ”‚   1193 โ”‚   โ”‚   โ”‚   โ”‚   or _global_forward_hooks or _global_forward_pre_hooks):                   โ”‚
โ”‚ โฑ 1194 โ”‚   โ”‚   โ”‚   return forward_call(*input, **kwargs)                                         โ”‚
โ”‚   1195 โ”‚   โ”‚   # Do not call functions when jit is used                                          โ”‚
โ”‚   1196 โ”‚   โ”‚   full_backward_hooks, non_full_backward_hooks = [], []                             โ”‚
โ”‚   1197 โ”‚   โ”‚   if self._backward_hooks or _global_backward_hooks:                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/accelerate/hooks.py:165 in new_forward                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   162 โ”‚   โ”‚   โ”‚   with torch.no_grad():                                                          โ”‚
โ”‚   163 โ”‚   โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                      โ”‚
โ”‚   164 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚ โฑ 165 โ”‚   โ”‚   โ”‚   output = old_forward(*args, **kwargs)                                          โ”‚
โ”‚   166 โ”‚   โ”‚   return module._hf_hook.post_forward(module, output)                                โ”‚
โ”‚   167 โ”‚                                                                                          โ”‚
โ”‚   168 โ”‚   module.forward = new_forward                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/models/gpt_neox/modeling_gpt_neox.py:152 in  โ”‚
โ”‚ forward                                                                                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   149 โ”‚   โ”‚   present = (key, value) if use_cache else None                                      โ”‚
โ”‚   150 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   151 โ”‚   โ”‚   # Compute attention                                                                โ”‚
โ”‚ โฑ 152 โ”‚   โ”‚   attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_m   โ”‚
โ”‚   153 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   154 โ”‚   โ”‚   # Reshape outputs                                                                  โ”‚
โ”‚   155 โ”‚   โ”‚   attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /usr/local/lib/python3.9/dist-packages/transformers/models/gpt_neox/modeling_gpt_neox.py:219 in  โ”‚
โ”‚ _attn                                                                                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   216 โ”‚   โ”‚   # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar ty   โ”‚
โ”‚   217 โ”‚   โ”‚   # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on    โ”‚
โ”‚   218 โ”‚   โ”‚   mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.de   โ”‚
โ”‚ โฑ 219 โ”‚   โ”‚   attn_scores = torch.where(causal_mask, attn_scores, mask_value)                    โ”‚
โ”‚   220 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   221 โ”‚   โ”‚   if attention_mask is not None:                                                     โ”‚
โ”‚   222 โ”‚   โ”‚   โ”‚   # Apply the attention mask                                                     โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
RuntimeError: The size of tensor a (2048) must match the size of tensor b (2611) at non-singleton dimension 3
Databricks org

The model has a context window limit of 2048 tokens. If you end up constructing input that's longer it won't work. The SQL chain is producing very long input. Maybe you need to limit the size of the results it parses or something (number of rows). See the SQL chain docs.

@srowen , would this limit also exist for the dolly-v2-7b and dolly-v2-12b versions as well ?

Databricks org

Yes, they're based on Pythia, and all have a 2048 token context window. In general, you want to be careful about sending so many tokens even if the model accommodates them, as it increases runtime (and cost). The prompt engineering is most of the work here!

@srowen I'm also encountering a similar kind of tensor size mismatch error when using RetrievalQA chain to create a model that can learn from my pdf document and then answer based on the content in the pdf document. When I pass the HuggingFacePipeline model into the RetrievalQA chain it loads correctly. But when I use the chain.run(query) as shown here https://python.langchain.com/en/latest/modules/chains/index_examples/vector_db_qa.html .It shows me the following error.
RuntimeError: The size of tensor a (2048) must match the size of tensor b (2568) at non-singleton dimension 3

Databricks org

Same answer, you're exceeding the context window size.

I'm assuming there is something to do with tokenization of the document while creating embeddings in the vector score. The model is not able to retrieve large size embeddings from the vector store. Can this be an issue here?

Databricks org

No, not related to the vector DB. This happens when you feed context to the model. You are perhaps retrieving too much to feed to the model, yes.

Hi @srowen , thanks for your response.

Can you please expand on: "The prompt engineering is most of the work here!"?

Would like to know what approaches or strategies you recommend or have seen that work to reduce the amount of context needed for the model to generate accurate predictions.

In this example, passing the schema of the database and tables structure is making us exceed the limit of tokens.

Thanks and regards,
Kevin K.

PS: my account was created yesterday, so I'm limited to one comment a day.

Databricks org

See for example https://python.langchain.com/en/latest/modules/chains/examples/sqlite.html#choosing-how-to-limit-the-number-of-rows-returned to limit rows.
Try turning on verbose=True in the chain so you can see what is being passed. That may give you ideas about what is very long here.
You may have to write custom, shorter prompts that are more targeted at your use case. Langchain prompts tend to have a lot of boilerplate instruction.

kevinknights29 changed discussion status to closed

Sign up or log in to comment