Closed NewJerseyStyle closed 1 year ago
看起来是编译出来的接口没有对应的定义 头文件可能没有被包含
我在所有原本导入 fastllm-cuda.cuh
的地方都加入了 ROCm 的头
#indef USE_ROCM
#include "fastllm-cuda.h" // hipfy fastllm-cuda.cuh > fastllm-cuda.h
#endif
其他原有的包含都没有修改,而fastllm-cuda.h
头文件和fastllm-cuda.cpp
里的函数看起来也是对应的
用过 objdump
和 addr2line
都没有得到有意义的资料
看不出原因来,也不知道可以用什么方向再去解决
我發現自己漏掉一些代碼的 marco
定義,沒有在 USE_ROCM
時啟用它們,同時我根據 llama.cpp 的 CMakteLists.txt
更新了我的 CMakeLists.txt
現在情況變得清晰了
...
basellm.cpp:(.text+0x19f8): undefined reference to `FastllmCudaClearBigBuffer'
/usr/bin/ld: CMakeFiles/fastllm.dir/src/models/basellm.cpp.o:basellm.cpp:(.text+0x5cfd): more undefined references to `FastllmCudaClearBigBuffer' follow
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/webui.dir/build.make:119: webui] Error 1
make[1]: *** [CMakeFiles/Makefile2:199: CMakeFiles/webui.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
跟隨著出現錯誤的地址慢慢追溯和修正應該就可以了吧……
結果將上述的問題都解決過之後,又回到了原點……
/workspace/fastllm/build# make -j
...
[ 89%] Built target fastllm_tools
/usr/bin/ld: CMakeFiles/fastllm.dir/src/models/chatglm.cpp.o: in function `fastllm::basellm::basellm()':
chatglm.cpp:(.text._ZN7fastllm7basellmC2Ev[_ZN7fastllm7basellmC2Ev]+0xb0): undefined reference to `_ZL4sqrtIiEN15__hip_enable_ifIXsr3std14numeric_limitsIT_EE10is_integerEdE4typeES1_'
/usr/bin/ld: CMakeFiles/fastllm.dir/src/models/chatglm.cpp.o: in function `fastllm::basellm::basellm()':
chatglm.cpp:(.text._ZN7fastllm7basellmC2Ev[_ZN7fastllm7basellmC2Ev]+0xb0): undefined reference to `_ZL4sqrtIiEN15__hip_enable_ifIXsr3std14numeric_limitsIT_EE10is_integerEdE4typeES1_'
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/main.dir/build.make:125: main] Error 1
make[2]: *** [CMakeFiles/benchmark.dir/build.make:125: benchmark] Error 1
/usr/bin/ld: make[1]: *** [CMakeFiles/Makefile2:119: CMakeFiles/main.dir/all] Error 2
CMakeFiles/fastllm.dir/src/models/chatglm.cpp.o: in function `make[1]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:197: CMakeFiles/benchmark.dir/all] Error 2
fastllm::basellm::basellm()':
chatglm.cpp:(.text._ZN7fastllm7basellmC2Ev[_ZN7fastllm7basellmC2Ev]+0xb0): undefined reference to `_ZL4sqrtIiEN15__hip_enable_ifIXsr3std14numeric_limitsIT_EE10is_integerEdE4typeES1_'
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/quant.dir/build.make:125: quant] Error 1
make[1]: *** [CMakeFiles/Makefile2:145: CMakeFiles/quant.dir/all] Error 2
/usr/bin/ld: CMakeFiles/fastllm.dir/src/models/chatglm.cpp.o: in function `fastllm::basellm::basellm()':
chatglm.cpp:(.text._ZN7fastllm7basellmC2Ev[_ZN7fastllm7basellmC2Ev]+0xb0): undefined reference to `_ZL4sqrtIiEN15__hip_enable_ifIXsr3std14numeric_limitsIT_EE10is_integerEdE4typeES1_'
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/webui.dir/build.make:125: webui] Error 1
make[1]: *** [CMakeFiles/Makefile2:171: CMakeFiles/webui.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
打算先放棄一下,結果發現 CPU 編譯也出現問題,那麼很有可能之前的思路有問題,因為之前以為是 ROCm 和 GGML 部分我修改錯了哪裡,但如果修改之前可以正常編譯的 CPU 版本現在不能成功編譯而也出現 Linker Error 的話,說明很可能是我在非 GPU 部分的代碼有哪裡改錯了。盲點突破了麼!?
可能我實在太弱了 Orz 我終於是放棄了
虽然技术不精,但为了荷包君的健康只好献丑:试图用 HIPCC 在 ROCm 平台进行编译
编译好象是成功了,但是遇到连接器的故障,但是因为技术太差找不到原因卡住在这个地方
https://github.com/NewJerseyStyle/fastllm/pull/1#issuecomment-1694406325