首先安装 OpenCL 和 clblast:
vcpkg install opencl clblast
下载GitHub 上的源码:
git clone --recurse-submodules https://github.com/li-plus/chatglm.cpp
cd chatglm.cpp
这个项目 GGML 子仓库中, third_party/ggml/src/CMakeList.txt 有个错误。打开并找到 178-183 行:
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
函数。
改成:
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 命令:
cmake -B build -DGGML_CLBLAST=ON
cmake --build build -j --config Release
如果还是出现【clblast not found】,说明 CMake 并没有找到 VCPKG 安装的库文件。需要手动指定:
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/lib
和c:/vcpkg/installed/x64-windows/include
。