如何在 WSL 中启用 OpenBLAS 构建 llama-cpp-python?
结论
在 WSL Ubuntu 中,先安装 OpenBLAS 开发包和 C/C++ 构建工具,再将 -DGGML_BLAS=ON 和 -DGGML_BLAS_VENDOR=OpenBLAS 传给 CMake,并让 pip 从源码构建。成功导入 llama_cpp 只说明 Python 包可以使用,不能证明它链接了 OpenBLAS。
llama-cpp-python 的安装说明支持通过 CMAKE_ARGS 传入 CMake 选项;llama.cpp 的构建文档也列出了相同的 OpenBLAS 选项。llama-cpp-python 安装说明, llama.cpp BLAS 构建说明
安装依赖并从源码构建
在 WSL 的 Ubuntu 终端中运行:
sudo apt update
sudo apt install -y build-essential cmake pkg-config libopenblas-dev python3-dev python3-venv
建议先创建虚拟环境,并在其中安装和验证,确保使用的是同一套 Python:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
接着传入 BLAS 选项,并让 pip 使用源码包:
CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS" \
python -m pip install --force-reinstall --no-cache-dir --no-binary=llama-cpp-python --verbose llama-cpp-python
--no-binary=llama-cpp-python 会阻止 pip 直接安装该包的预编译 wheel;--verbose 会显示构建输出,方便检查 CMake 是否检测并配置了 BLAS。如果你的 pip 版本不接受这种包名写法,可以改用 --no-binary :all:。这样也会要求相关依赖从源码安装。
你原先的第一条命令已经带有关键的 CMake 参数。第二条命令只启用了 GGML_BLAS,没有指定 OpenBLAS vendor。CMAKE_BUILD_PARALLEL_LEVEL=2 用来控制并行构建,本身不会启用 BLAS。可以将构建参数和并行度分别设置:
CMAKE_BUILD_PARALLEL_LEVEL=2 \
CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS" \
python -m pip install --force-reinstall --no-cache-dir --no-binary=llama-cpp-python --verbose llama-cpp-python
检查是否构建并链接了 OpenBLAS
查看构建日志
安装命令带有 --verbose 时,可以检查 CMake 配置输出,确认是否找到 BLAS,以及显示的 BLAS 库和头文件路径。若日志提示找不到 BLAS,先确认依赖是否安装成功:
dpkg -l libopenblas-dev
pkg-config --modversion openblas
GGML 的 CMake 配置会查找指定的 BLAS vendor。找不到 BLAS 时会报错,因此仅凭 Python 导入成功无法判断是否启用了 BLAS。GGML BLAS CMake 配置
检查 Python 扩展的动态链接
安装后,可以定位包内的共享库,再用 ldd 查看动态依赖:
python - <<'PY'
from pathlib import Path
import llama_cpp
package_dir = Path(llama_cpp.__file__).parent
for path in package_dir.rglob("*.so"):
print(path)
PY
对上一步找到的共享库运行:
ldd /path/to/the/library.so | grep -i blas
如果输出中列出 libopenblas.so,就能直接确认它动态链接了 OpenBLAS。若没有匹配结果,不能据此断定构建没有使用 BLAS:库可能是静态链接的,也可能不在你检查的共享库中。此时应结合详细构建日志确认。如果构建输出中没有 OpenBLAS 检测或链接信息,清理旧构建产物后再从源码安装,并确认 pip 使用的是预期的虚拟环境。
注意事项
即使构建中包含了 BLAS,也不代表每个推理阶段都会调用它。llama.cpp 文档指出,BLAS 可能提升较大 batch 下的 prompt processing 性能,但不一定能提升生成阶段的性能。llama.cpp BLAS 构建说明
备注:内容仅供参考。
