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

关于在Windows环境下编译CUDA版本出现的问题和一些应该去标明环境的细节 #343

Open
XiaoQiu2451 opened this issue Sep 1, 2024 · 4 comments

Comments

@XiaoQiu2451
Copy link

花了大概两天的时间,终于把ChatGLM.cpp的CUDA环境编译成功了,我觉得应该要指出一些问题来
系统环境:
Windows 11 Pro
Python 3.10
CMake 3.30
CUDA 12.3 ->12.6

过程:
首先直接编译,注意到第一个问题就是在cmd下直接使用set CMAKE_ARGS="-DGGML_METAL=ON" 在cmd中的得到的是'"-DGGML_METAL=ON"'的str值
在setup.py 60line中并没有直接对item进行strip操作,导致传进cmake_args的参数是一个带有引号的参数,导致编译的时候不是按照cuda的版本编译的,应该修改

修改之后,注意到第二个问题是版本问题。README中没有提及,但是要编译CUDA版本,对CUDA要求至少是要12.4以上,所以我才从12.3版本升级到了12.6版本
这里插一个小插曲,应该是NVIDIA的锅。CUDA Toolkit没有正确处理MSBuildExtensions,导致出现No CUDA toolset found的错误。不知道这是个例问题还是版本问题。解决方法可以看https://stackoverflow.com/a/77085810

升级之后,注意到nvcc不支持flag -Wno-expansion-to-defined。这个是在CMakeList 11line出现的。作者标明了# suppress ggml warnings。具体我没怎么了解这个flag是否是版本差异还是OS差异,但至少在Windows下的CUDA 12.6版本是没有这个flag的。

在踩了这些坑之后总算是编译出来了,当然后面注意到GGML在疯狂的显示warning,应该和前面去除的flag有关,但至少能跑。还是希望作者能够出cuda的whl,不然整编译环境实在是不方便我们这些没有学习C++。

@XiaoQiu2451
Copy link
Author

打错了 是-DGGML_CUDA=ON

@HoneyWhiteCloud
Copy link

一样的过程,历经千辛万苦,但到编译chatglm.cpp的步骤时出现报错,实在不知道如何解决:
image
image

@HoneyWhiteCloud
Copy link

一样的过程,历经千辛万苦,但到编译chatglm.cpp的步骤时出现报错,实在不知道如何解决: image image

将编译GPU生成的build文件夹拷贝到临时文件夹后重新编译在CPU上的main.exe,能够正常运行,随后替换为译GPU生成的build文件夹重新拷贝到chatglm.cpp文件夹中并替换掉原先用于CPU的build文件夹后执行cmake -B build -DGGML_CUDA=ON && cmake --build build -j --config Release命令即可正常输出用于cuda的main.exe,但速度相比于CPU快不了多少。
image

@jiayuanst
Copy link

jiayuanst commented Jan 28, 2025

除夕夜终于搞定了,Windows 11 Pro
Python 3.12
CMake 3.31
CUDA 12.2 ->12.6 ->12.4

前面都按说明该装的环境装好,版本对应好,vs2022只装C++那个

1、之前win10的命令行下的set是可以有引号的,文档中没有特别说明,也没说用啥版本的windows,让人很是困惑。
反正win11用这个就对了:set CMAKE_ARGS=-DGGML_CUBLAS=ON -DCUDA_ARCHITECTURES='89'
2、前面确实看到报错中有一个CUDA需要>=12.4的,我也是看了你这个升级到了12.6,但后面还是一直报错,不确定是不是版本高了,又降回了12.4,但还是没解决。反正CUDA>=12.4就可以了
3、关于** -Wno-expansion-to-defined **报错,我之前一直以为是我环境问题,改完了这个之后让我茅塞顿开,顺便又改好了下一个问题。这个只需要修改chatglm.cpp下的CMakeLists.txt就可以,把有-Wno-expansion-to-defined的这一行注释掉,就能解决这个报错。
4、CUDA编译的main.exe运行时候会有类似:

ggml_gallocr_needs_realloc: graph has different number of nodes
ggml_gallocr_alloc_graph: reallocating buffers automatically
ggml_gallocr_reserve_n: reallocating CUDA0 buffer from size 0.00 MiB to 5.03 MiB

这样的报错,受到前面一点的启发,直接去修改chatglm.cpp\third_party\ggml\src\ggml-alloc.c,把会报错的所有输出注释掉,类似:

#ifndef NDEBUG
        fprintf(stderr, "%s: graph has different number of nodes\n", __func__);
#endif

可能在哪里定义NDEBUG也可以,但是我用chatgpt告诉我的方法没成功,干脆直接注释代码,改完代码再编译就没有上述报错了。
5、其他问题,我这个win11的区域开始设置的是中国,然后出来的报错有中文的地方全是乱码,区域改成英文就好了。还有个目录不能超过260字符的报错,改区域之后能一眼看懂具体的报错网上搜索一下就解决了。

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

3 participants