OSError: /lyrachatglmtest/lyraChatGLM/ftlib/libth_transformer_sm80.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

#34
by xtaos - opened

A100部署时报这个错误

OSError: /lyrachatglmtest/lyraChatGLM/ftlib/libth_transformer_sm80.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

请问有遇见的吗

Tencent Music Entertainment Lyra Lab org

Hi, @xtaos ,我看了你这个 帖子和之前的帖子。 看起来都像是 封装的 动态扩展链接库 so 的问题

  1. 你看下是否是使用的 docker 环境
  2. 确认下下载的 so 文件完成

the same error on different servers

同样的问题,不管是仓库更新cuda11版本前后都报:OSError: /home/otto/langchain-ChatGLM/lyraChatGLM/lyraChatGLM/ftlib/libth_transformer_sm70_cu11.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

配置如下:
GPU:V100
nvidia-driver:NVIDIA-Linux-x86_64-515.105.01.run
cuda:11.7
python:3.8
pytorch: 2.0.1
排除了conda自动装备多种版本torch的问题,也试着加了LD_LIBRARY_PATH,但是都没有用。项目切换调用普通ChatGLM是正常的。
有人解决了问题吗?

同问,一模一样的问题,我torch也是单一版本没有安装多版本:
GPU:3090
DRIVER:525.116.04
cuda:11.8
python:3.10.11
pytorch:2.0.1+cu118

Tencent Music Entertainment Lyra Lab org

@tritonchen @dust1or2
c++动态库的环境配置过于复杂,如果可以的话,可以先尝试使用我们readme中推荐的两个docker镜像来跑我们的加速版模型。如果实在是有需求想要使用自己的环境跑的话,我们之后会在readme中更新我们所使用的所有环境依赖

@tritonchen @dust1or2
c++动态库的环境配置过于复杂,如果可以的话,可以先尝试使用我们readme中推荐的两个docker镜像来跑我们的加速版模型。如果实在是有需求想要使用自己的环境跑的话,我们之后会在readme中更新我们所使用的所有环境依赖

确实比较复杂,我尝试在本地自己编译了一下ft,生成的so报新错了:
undefined symbol: _ZN17fastertransformer27getInitLongformerCubStorageI6__halfEEmi

@tritonchen @dust1or2
c++动态库的环境配置过于复杂,如果可以的话,可以先尝试使用我们readme中推荐的两个docker镜像来跑我们的加速版模型。如果实在是有需求想要使用自己的环境跑的话,我们之后会在readme中更新我们所使用的所有环境依赖

我尝试使用nvcr.io/nvidia/pytorch:22.12-py3镜像跑了一下demo,出现了和 #32 类似的报错。

[FT][ERROR] [FT][ERROR] CUDA runtime error: no kernel image is available for execution on the device /app/ChatGLM6BAccelerate/src/fastertransformer/kernels/sampling_topp_kernels.cu:1077 

Traceback (most recent call last):
  File "demo.py", line 20, in <module>
    output_texts = model.generate(prompts, output_length=max_output_length,top_k=30, top_p=0.85, temperature=0.35, repetition_penalty=1.2, do_sample=False)
  File "/lyraChatGLM/lyraChatGLM/lyra_glm.py", line 145, in generate
    outputs = self.model(start_ids=input_token_ids,
  File "/usr/local/lib/python3.8/dist-packages/torch/nn/modules/module.py", line 1423, in _call_impl
    return forward_call(*input, **kwargs)
  File "/lyraChatGLM/lyraChatGLM/model.py", line 158, in forward
    outputs = self.model.forward(start_ids,
RuntimeError: [FT][ERROR]  Assertion fail: /app/ChatGLM6BAccelerate/src/fastertransformer/th_op/glm/GlmOp.h:462 

我的CUDA版本是11.7,显卡是Titan RTX。

同样的问题,不管是仓库更新cuda11版本前后都报:OSError: /home/otto/langchain-ChatGLM/lyraChatGLM/lyraChatGLM/ftlib/libth_transformer_sm70_cu11.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

配置如下:
GPU:V100
nvidia-driver:NVIDIA-Linux-x86_64-515.105.01.run
cuda:11.7
python:3.8
pytorch: 2.0.1
排除了conda自动装备多种版本torch的问题,也试着加了LD_LIBRARY_PATH,但是都没有用。项目切换调用普通ChatGLM是正常的。
有人解决了问题吗?

这个报错OSError: /lyrachatglmtest/lyraChatGLM/ftlib/libth_transformer_sm80.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE的原因是pytorch的C++ ABI是Pre-cxx11 ABI,但是这个项目的动态库用的是cxx11 ABI的pytorch(注意是python的pytorch包,仅仅是Libtorch是不够的)。
如果确实不方便用docker的话,就必须自己从头编译pytorch了。可以参考nvidia提供的docker中各个库的信息,从github上下载对应版本的pytorch的commit,然后自己编译。
不过有几个注意点:

  1. python必须是3.8
  2. 如果是cuda 12,pytorch的1.14.0a0+44dac51这个版本是需要自己修改代码的(主要是cusparse相关的代码),参照最新版本的代码覆盖就好
  3. 需要强制开启cxx11 ABI,参考最近Pytorch在githbu上的文档export _GLIBCXX_USE_CXX11_ABI=1

测试了几个环境3090+CUDA 12,V100+CUDA11.3都能正常运行。

Sign up or log in to comment