解决 ChatGLM.CPP+clBlast 编译错误(也适用于SD.CPP)

2023-10-13 09:37:47 浏览数 (2)

首先安装 OpenCL 和 clblast:

代码语言:javascript复制
vcpkg install opencl clblast

下载GitHub 上的源码:

代码语言:javascript复制
git clone --recurse-submodules https://github.com/li-plus/chatglm.cpp
cd chatglm.cpp

这个项目 GGML 子仓库中, third_party/ggml/src/CMakeList.txt 有个错误。打开并找到 178-183 行:

代码语言:javascript复制
	find_path(CLBLAST_INC NAMES cblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS})
	find_library(CLBLAST_LIB NAMES clblast)
	if (CLBLAST_LIB)
		message(STATUS "clBLAST found")

		set(GGML_EXTRA_LIBS  ${GGML_EXTRA_LIBS}  ${CLBLAST_LIB})

可以看到头文件名称写错(应该是clblast.h)。然后没有添加CLBLAST_INC到总的包含路径里面。并且 clBlast 一来 OpenCL,也没有添加 OpenCL 的静态库,会导致找不到各种clxxxx函数。

改成:

代码语言:javascript复制
    find_path(CLBLAST_INC NAMES clblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS})
	find_library(CLBLAST_LIB NAMES clblast)
	find_library(OPENCL_LIB NAMES OpenCL)
	if (CLBLAST_LIB AND OPENCL_LIB AND CLBLAST_INC)
		message(STATUS "clBLAST found")

		set(GGML_EXTRA_INCS  ${GGML_EXTRA_INCS}  ${CLBLAST_INC})
		set(GGML_EXTRA_LIBS  ${GGML_EXTRA_LIBS}  ${CLBLAST_LIB}  ${OPENCL_LIB})

然后执行 CMake 命令:

代码语言:javascript复制
cmake -B build -DGGML_CLBLAST=ON
cmake --build build -j --config Release

如果还是出现【clblast not found】,说明 CMake 并没有找到 VCPKG 安装的库文件。需要手动指定:

代码语言:javascript复制
cmake -B build -DGGML_CLBLAST=ON -DCMAKE_PREFIX_PATH="<cmake_lib_path>;<cmake_inc_path>"

<cmake_lib_path><cmake_inc_path>换成 VCPKG 的存储路径,我的开发环境中大概是c:/vcpkg/installed/x64-windows/libc:/vcpkg/installed/x64-windows/include

0 人点赞