Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

代码调用model.chat(tokenizer, "你好") 错误,数组越界?Assertion srcIndex < srcSelectDimSize failed. #243

Closed
worm128 opened this issue Nov 10, 2023 · 24 comments
Assignees

Comments

@worm128
Copy link

worm128 commented Nov 10, 2023

一样的问题,用model.stream_chat流输出字符串没问题,用model.chat整段字符串输出就报错,断点到源码看,看起来像是数组越界
调试代码得知:
错误文件:.cache\huggingface\modules\transformers_modules\local\modeling_chatglm.py
代码错误行:723行代码报错 words_embeddings = self.word_embeddings(input_ids)
错误信息:pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\native\cuda\Indexing.cu:1239: block: [28,0,0], thread: [63,0,0] Assertion srcIndex < srcSelectDimSize failed.
CUDA error: device-side assert triggered
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.

微信图片_20231110082442
QQ图片20231110081506

@worm128 worm128 changed the title model.chat(tokenizer, "你好") 错误,数组越界?Assertion srcIndex < srcSelectDimSize failed. 代码调用model.chat(tokenizer, "你好") 错误,数组越界?Assertion srcIndex < srcSelectDimSize failed. Nov 10, 2023
@worm128
Copy link
Author

worm128 commented Nov 10, 2023

开启CUDA_LAUNCH_BLOCKING调试
import os
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

错误位置补充:
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.20.0\pythonFiles\lib\python\debugpy_vendored\pydevd_pydevd_bundle\pydevd_runpy.py", line 124, in _run_code
exec(code, run_globals)
File "J:\ai\ai-yinmei\chatglm3.py", line 45, in
response, history = model.chat(tokenizer, "你好")
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\utils_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator/.cache\huggingface\modules\transformers_modules\local\modeling_chatglm.py", line 1035, in chat
outputs = self.generate(**inputs, **gen_kwargs, eos_token_id=eos_token_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\utils_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\transformers\generation\utils.py", line 1437, in generate
return self.sample(
^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\transformers\generation\utils.py", line 2443, in sample
outputs = self(
^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator/.cache\huggingface\modules\transformers_modules\local\modeling_chatglm.py", line 937, in forward
transformer_outputs = self.transformer(
^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator/.cache\huggingface\modules\transformers_modules\local\modeling_chatglm.py", line 807, in forward
inputs_embeds = self.embedding(input_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator/.cache\huggingface\modules\transformers_modules\local\modeling_chatglm.py", line 723, in forward
words_embeddings = self.word_embeddings(input_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\modules\sparse.py", line 162, in forward
return F.embedding(
^^^^^^^^^^^^
File "j:\pylib\aivenv\Lib\site-packages\torch\nn\functional.py", line 2233, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: CUDA error: device-side assert triggered
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.

@zRzRzRzRzRzRzR
Copy link
Member

收到问题,该问题影响使用,我们正在安排人员解决

@worm128
Copy link
Author

worm128 commented Nov 10, 2023

收到问题,该问题影响使用,我们正在安排人员解决

好的,谢谢

@Btlmd
Copy link
Member

Btlmd commented Nov 11, 2023

是否可以将 work_embedding 传入的 input_ids 打印出来?怎么看起来像是 input_ids 超过 vocab size 了?
以及是否可以提供一下输入的对话历史?

@worm128
Copy link
Author

worm128 commented Nov 13, 2023

是否可以将 work_embedding 传入的 input_ids 打印出来?怎么看起来像是 input_ids 超过 vocab size 了? 以及是否可以提供一下输入的对话历史?

input_ids 是一个对象,里面很多成员变量的,而且在源码内部,我控制不了输出,只能截图给你看

系统配置参数如下:
系统:Windows 11 专业版
显卡:4060TI 16G 耕升踏雪EX3
CUDA Tooklkit:12.1
CUDA driver api:12.3
torch版本:2.1.0+cu121
ChatGLM:3.0
transformers:4.26.1

微信图片_20231113144936 微信图片_20231113144941

@worm128
Copy link
Author

worm128 commented Nov 13, 2023

是否可以将 work_embedding 传入的 input_ids 打印出来?怎么看起来像是 input_ids 超过 vocab size 了? 以及是否可以提供一下输入的对话历史?

输入对话框历史就是一个 “你好”,使用代码 response, history = model.chat(tokenizer, "你好") 直接就报错
是不是和transformers、CUDA版本有关

系统配置参数如下:
系统:Windows 11 专业版
显卡:4060TI 16G 耕升踏雪EX3
CUDA Tooklkit:12.1
CUDA driver api:12.3
torch版本:2.1.0+cu121
ChatGLM:3.0
transformers:4.26.1

@worm128
Copy link
Author

worm128 commented Nov 13, 2023

是否可以将 work_embedding 传入的 input_ids 打印出来?怎么看起来像是 input_ids 超过 vocab size 了? 以及是否可以提供一下输入的对话历史?

补充一下,我刚才下载了chatglm2模型,发现response, history = model.chat(tokenizer, "你好")没有报错,所以可以排除环境因素导致的错误,更多是chatglm3上的问题

@Btlmd
Copy link
Member

Btlmd commented Nov 14, 2023

怀疑为对话格式问题导致模型输出了未定义的 token。
请问是否可以将 input_ids.tolist() 的结果打印出来,类似于 #202,在 #202 中反映了类似的超出词表的问题,当时是发现模型的 tokenization 输入有误造成。

另外,ChatGLM2 和 ChatGLM3 的 model.chattokenzier 实现是不同的。

@worm128
Copy link
Author

worm128 commented Nov 16, 2023

怀疑为对话格式问题导致模型输出了未定义的 token。 请问是否可以将 input_ids.tolist() 的结果打印出来,类似于 #202,在 #202 中反映了类似的超出词表的问题,当时是发现模型的 tokenization 输入有误造成。

另外,ChatGLM2 和 ChatGLM3 的 model.chattokenzier 实现是不同的。

我的代码很简单,就是样例代码,有涉及对话格式的吗? input_ids.tolist()这个input_ids是在内部类库报错的,我不知道哪里能引用这个input_ids对象
tokenizer = AutoTokenizer.from_pretrained("ChatGLM2/THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("ChatGLM2/THUDM/chatglm2-6b", trust_remote_code=True).cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好")

@ycjcl868
Copy link

遇到相同问题

index >= -sizes[i] && index < sizes[i] && "index out of bounds" failed.`

@worm128
Copy link
Author

worm128 commented Nov 17, 2023

怀疑为对话格式问题导致模型输出了未定义的 token。 请问是否可以将 input_ids.tolist() 的结果打印出来,类似于 #202,在 #202 中反映了类似的超出词表的问题,当时是发现模型的 tokenization 输入有误造成。

另外,ChatGLM2 和 ChatGLM3 的 model.chattokenzier 实现是不同的。

你好,这个问题我始终解决不了,不知道是不是第三方py包引起的错误,你们没有重现这错误吗?

@evyy1234
Copy link

我也出现了这个问题,时不时就会出现

@worm128
Copy link
Author

worm128 commented Nov 19, 2023

我也出现了这个问题,时不时就会出现

我是100%重现,不是偶现

@zRzRzRzRzRzRzR
Copy link
Member

该问题已经被记录为bad case,应该是模型层面的问题,如果与 #393 相似,可以在其下补充,或者提出一个新的bad case

@zRzRzRzRzRzRzR zRzRzRzRzRzRzR closed this as not planned Won't fix, can't repro, duplicate, stale Nov 21, 2023
@Btlmd
Copy link
Member

Btlmd commented Nov 22, 2023

是否有人可以给出一组失败时的 input_ids.tolist() 结果,便于复现?没有相同的 input_ids 序列,我无法复现该问题。

@worm128
Copy link
Author

worm128 commented Dec 12, 2023

input_ids

是否可以写一个例子,input_ids是底层对象,我不知道怎样调用 input_ids.tolist()

@worm128
Copy link
Author

worm128 commented Dec 12, 2023

是否有人可以给出一组失败时的 input_ids.tolist() 结果,便于复现?没有相同的 input_ids 序列,我无法复现该问题。

你用window11测试一下glm3,我觉得是100%出现的问题,你们都是在ubuntu测试的?

@LittleGreenYuan
Copy link

似乎,到现在还是没有解决这个问题的一些手段。

@yawzhe
Copy link

yawzhe commented Jan 30, 2024

我在4090上出现的,a6000没有出现

@yawzhe
Copy link

yawzhe commented Jan 30, 2024

4090上单张卡启动没问题,多张卡启动有问题

@Yeez-lee
Copy link

Yeez-lee commented Feb 6, 2024

4090上单张卡启动没问题,多张卡启动有问题

我也出来了一样的问题 单卡A100行 多卡就不行了

@Doglwl
Copy link

Doglwl commented Mar 15, 2024

我也出现了这个问题了,api调用次数多了就会直接报错了。

@Doglwl
Copy link

Doglwl commented Mar 15, 2024

我也出现了这个问题了,api调用次数多了就会直接报错了。

需要重启后才能正常使用模型,是因为输入的token过大吗?我们是用对话文本做提炼的,输入数量过大

@12915494174
Copy link

我也出现了这个问题了,api调用次数多了就会直接报错了。

需要重启后才能正常使用模型,是因为输入的token过大吗?我们是用对话文本做提炼的,输入数量过大

你好,该问题您有解决的方案吗?我也遇到了。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants