Skip to content

achillis2016/llamafile

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

llama.cpp Win7 编译工具包

概述

本工具包用于在 Windows 7 系统上编译 llama.cpp。由于 llama.cpp 主线依赖的 cpp-httplib 库从 2025.9 月起不再支持 Win8 以下系统,需要对源码做兼容性修改后才能编译。

目录结构

llama-bianyi/
├── build-win7.bat      # 一键编译脚本(双击运行)
├── start-server.bat    # llama-server 启动脚本
├── README.md           # 本说明文档
├── tools/              # 编译工具(自动下载)
│   ├── w64devkit/      # MinGW 编译器套件
│   └── cmake/          # CMake 构建工具
└── llama.cpp/          # 源码(自动 clone)
    └── bin/            # 编译输出目录

快速开始

  1. 双击运行 build-win7.bat
  2. 等待自动下载工具和源码(首次需要网络)
  3. 等待编译完成(约 15-30 分钟)
  4. 编译产物在 llama.cpp/bin/ 目录下

启动服务:

start-server.bat "D:\models\qwen2.5-7b-q4_k_m.gguf"

环境要求

  • 操作系统:Windows 7 SP1 及以上
  • 网络:首次编译需要联网下载工具和源码
  • Git:需要已安装 Git(用于 clone 源码)
  • 磁盘空间:约 2GB(工具 + 源码 + 编译产物)

Win7 兼容性修改说明

编译脚本会自动应用以下 3 处修改:

1. 修改 _WIN32_WINNT 版本号

文件llama.cpp/ggml/include/ggml.hllama.cpp/common/common.h

// 修改前
#define _WIN32_WINNT 0x0A00  // Windows 10
// 修改后
#define _WIN32_WINNT 0x0601  // Windows 7

2. 移除 cpp-httplib 的版本检查

文件llama.cpp/vendor/cpp-httplib/httplib.h

删除以下代码块:

#ifdef _WIN32
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0A00
#error "cpp-httplib doesn't support Windows 8 or lower."
#endif
#endif

3. 替换 Win8+ API 为 Win7 兼容 API

文件llama.cpp/vendor/cpp-httplib/httplib.cpp

Win8+ API Win7 替代 API
CreateFile2() CreateFileW()
CreateFileMappingFromApp() CreateFileMappingW()
MapViewOfFileFromApp() MapViewOfFile()

CPU 指令集与性能优化

这是编译过程中最容易踩坑的地方,直接影响推理速度。

关键指令集说明

指令集 作用 对 llama.cpp 的影响
AVX 256 位向量运算 基础加速,必须开启
AVX2 整数向量运算 矩阵乘法核心加速,不开会慢 3 倍
F16C 半精度浮点转换 llama.cpp 大量使用 FP16,不开会用软件模拟
FMA 融合乘加运算 一条指令完成 a*b+c,矩阵运算密集使用
BMI2 位操作指令 量化/反量化操作加速

-march=native 的作用

CMake 配置时会自动添加 -march=native,意思是编译器自动检测当前 CPU 支持的所有指令集并全部启用。所以:

  • 在编译机器上运行 → 自动获得最佳优化
  • 拷贝到其他机器运行 → 如果 CPU 不支持某些指令集会崩溃

如果你需要编译通用版本(在多台机器上运行),需要关闭 -march=native,改为手动指定指令集。

实测性能差距

在 AMD Ryzen 7 5800H 上测试同一模型:

编译配置 推理速度 差距原因
仅 AVX(无 AVX2) ~5 t/s 缺少整数向量加速
AVX + AVX2 ~10 t/s 缺少 F16C/FMA
AVX + AVX2 + F16C + FMA + BMI2 ~15 t/s 完整优化

查看 CPU 支持的指令集

# Windows(PowerShell)
Get-CimInstance -ClassName Win32_Processor | Select-Object Name

# 然后到 https://en.wikipedia.org/wiki/CPUs_lookup 查看该 CPU 支持的指令集

CMake 配置参数说明

cmake . -G "MinGW Makefiles" \
    -DLLAMA_CURL=OFF \          # 禁用 HTTP 客户端(Win7 没有 libcurl)
    -DCMAKE_CXX_COMPILER=g++ \  # 使用 MinGW 的 g++
    -DCMAKE_C_COMPILER=gcc \    # 使用 MinGW 的 gcc
    -DLLAMA_BUILD_TESTS=OFF \   # 不编译测试程序(节省时间)
    -DGGML_AVX=ON \             # 启用 AVX
    -DGGML_AVX2=ON \            # 启用 AVX2(重要!)
    -DGGML_F16C=ON \            # 启用 F16C(重要!)
    -DGGML_FMA=ON \             # 启用 FMA(重要!)
    -DGGML_BMI2=ON              # 启用 BMI2

推理性能调优

编译优化只是一方面,运行时参数也影响速度:

参数 说明 建议值
-t 线程数 设为物理核心数(如 5800H 用 -t 8
-c 上下文长度 越大越慢,按需设置(默认 2048)
-b 批处理大小 可以试 -b 512-b 1024
-ngl GPU 层数 有独显可设 -ngl 99 卸载到 GPU
--reasoning 思考模式 off 关闭可减少输出 token

llama.cpp vs llamafile

对比项 llama.cpp llamafile
编译方式 需要本地编译 单个可执行文件,免安装
CPU 指令集 编译时固定 运行时自动检测
Win7 支持 需要打补丁 原生支持
自定义程度 可修改源码 不可修改
性能 取决于编译参数 自动选择最优指令集

手动编译步骤

如果自动脚本不生效,可按以下步骤手动操作:

1. 准备工具

下载并解压:

2. 获取源码

git clone --depth 1 https://github.com/ggml-org/llama.cpp.git

3. 应用修改

按上述 3 处修改源码。

4. 配置 + 编译

# 设置 PATH(根据实际路径调整)
export PATH="/path/to/w64devkit/bin:/path/to/cmake/bin:$PATH"

# 配置
cd llama.cpp
cmake . -G "MinGW Makefiles" \
    -DLLAMA_CURL=OFF \
    -DCMAKE_CXX_COMPILER=g++ \
    -DCMAKE_C_COMPILER=gcc \
    -DLLAMA_BUILD_TESTS=OFF \
    -DGGML_AVX=ON \
    -DGGML_AVX2=ON \
    -DGGML_F16C=ON \
    -DGGML_FMA=ON \
    -DGGML_BMI2=ON

# 编译(单线程)
cmake --build . --config Release -j 1

指定版本编译

默认编译最新版。如需指定版本:

cd llama.cpp
git fetch --tags
git checkout b9095  # 替换为目标版本号

然后重新执行编译步骤。

常见问题

Q: 编译报错 'make' 不是内部或外部命令

A: PATH 中没有包含 w64devkit/bin 目录。确保 cmake 运行时能找到 mingw32-make.exe。

Q: 网络不好,clone 失败

A: 多试几次,或使用代理。也可以手动下载 zip 解压到 llama-bianyi/llama.cpp/ 目录。

Q: 编译出的 exe 在 Win7 上运行报错

A: 确认 _WIN32_WINNT 已改为 0x0601,且 httplib.cpp 中的 3 个 API 已替换。

Q: 想编译带 CUDA 支持的版本

A: 需要额外安装 CUDA Toolkit,cmake 时加参数 -DGGML_CUDA=ON

Q: 编译后推理速度慢(只有 5 t/s 左右)

A: 大概率是 AVX2 没有开启。检查 cmake 编译输出中是否有 -march=native,或手动加 -DGGML_AVX2=ON -DGGML_F16C=ON -DGGML_FMA=ON

Q: cmake 目录名不是 cmake/ 而是 cmake-x.x.x-windows-x86_64/

A: 脚本会自动重命名。如果失败,手动将目录重命名为 cmake,或更新 PATH 指向实际目录名。

About

重编译llama win7使用支持多模态模型

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 49.9%
  • C++ 36.0%
  • Vim Script 9.3%
  • CMake 4.3%
  • Roff 0.4%
  • PostScript 0.1%