参考链接
在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
2G内存Windows7运行deepseek-r1:1.5b
这两个链接写的可能不够详细,有同学私信问实现过程,这里进一步解释一下。
一、准备
需要准备的大模型、工具等文件,已放到网盘,可自取。
网盘的 figures
目录是配置过程中的一些截图,可参考。
百度网盘:https://pan.baidu.com/s/1NShm6Qi9bDgl6jI-IsEr1A?pwd=6es1
迅雷网盘:https://pan.xunlei.com/s/VOIfPUb8lCS71jAjBEnXmRg9A1?pwd=nze7#
模型文件
- 找几个
GGUF
文件。- 本案例从
ollama
获得GGUF
文件,这些文件默认存储在%USERPROFILE%\.ollama\models\blobs
,文件名形如sha256-*
,文件名及模型对应关系见下表,相关文件见网盘models
目录 - 也可以去魔搭社区等网站下载
- 本案例从
名称 | ollama ID | 大小GB | blobs |
---|---|---|---|
deepseek-r1:1.5b | a42b25d8c10a | 1.04 | sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc |
deepseek-r1:8b | 28f8fd6cdc67 | 4.58 | sha256-6340dc3229b0d08ea9cc49b75d4098702983e17b4c096d57afbbf2ffc813f2be |
deepseek-r1:14b | ea35dfe18182 | 8.37 | sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1e |
deepseek-r1:32b | 38056bbcbb2d | 18.4 | sha256-6150cb382311b69f09cc0f9a1b69fc029cbd742b66bb8ec531aa5ecf5c613e93 |
deepseek-r1:70b | 0c1615a8ca32 | 39.5 | sha256-4cd576d9aa16961244012223abf01445567b061f1814b57dfef699e4cf8df339 |
qwen2.5-coder:7b | 2b0496514337 | 4.36 | sha256-60e05f2100071479f596b964f89f510f057ce397ea22f2833a0cfe029bfc2463 |
源代码
下载llama.cpp
源代码即可,无需下载GIT代码仓库
-
如果能访问Github,就从 https://github.com/ggerganov/llama.cpp 下载
-
如果Github抽风,可以去镜像站,国内一些大站也有
llama.cpp
的实时镜像 -
本例
git clone
了llama.cpp
源码库,并压缩为llama.cpp.git.7z
,见网盘source
目录
开发工具
见网盘 dev-tools
目录
w64devkit-x64-2.0.0.exe
,从 https://github.com/skeeto/w64devkit 或镜像站下载cmake-3.31.5-windows-x86_64.msiC
,从 https://cmake.org/download/ 下载Git-2.45.2-64-bit.exe
,从 https://git-scm.com/downloads/win 下载
二、编译
- 打开Windows7操作系统。建议用干净的操作系统,没有安装乱七八糟的各种软件。
- 解压 llama.cpp.git.7z 到英文目录,例如
C:\dev_demo\llama.cpp
,解压后,删除其中的.git
目录。注意,如果后续操作失败,需要删除C:\dev_demo\llama.cpp
目录,重建执行本步骤。 - 安装 w64devkit(只需解压,例如
C:\dev_demo\w64devkit
), cmake(默认设置安装), GIt(默认设置安装), 火狐浏览器(也可用其他Chrome类浏览器,IE不行)。 - 按下面代码示例,修改
C:\dev_demo\llama.cpp\examples\server\httplib.h
, 第3012到3057行,也就是把 if else 注释掉,只保留 else 部分的代码。- 注1:Win7不支持
CreateFile2
,支持CreateFileW
- 注2:Win7不支持
CreateFileMappingFromApp
,支持CreateFileMappingW
- 注3:Win7不支持
MapViewOfFileFromApp
,支持MapViewOfFile
- 注4:可以搜索
CreateFile2
快速定位代码修改位置
- 注1:Win7不支持
// #if _WIN32_WINNT >= _WIN32_WINNT_WIN8
// hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ,
// OPEN_EXISTING, NULL);
// #else
hFile_ = ::CreateFileW(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// #endif
if (hFile_ == INVALID_HANDLE_VALUE) { return false; }
LARGE_INTEGER size{};
if (!::GetFileSizeEx(hFile_, &size)) { return false; }
// If the following line doesn't compile due to QuadPart, update Windows SDK.
// See:
// https://github.com/yhirose/cpp-httplib/issues/1903#issuecomment-2316520721
if (static_cast<ULONGLONG>(size.QuadPart) >
(std::numeric_limits<decltype(size_)>::max)()) {
// `size_t` might be 32-bits, on 32-bits Windows.
return false;
}
size_ = static_cast<size_t>(size.QuadPart);
// #if _WIN32_WINNT >= _WIN32_WINNT_WIN8
// hMapping_ =
// ::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL);
// #else
hMapping_ = ::CreateFileMappingW(hFile_, NULL, PAGE_READONLY, 0, 0, NULL);
// #endif
// Special treatment for an empty file...
if (hMapping_ == NULL && size_ == 0) {
close();
is_open_empty_file = true;
return true;
}
if (hMapping_ == NULL) {
close();
return false;
}
// #if _WIN32_WINNT >= _WIN32_WINNT_WIN8
// addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0);
// #else
addr_ = ::MapViewOfFile(hMapping_, FILE_MAP_READ, 0, 0, 0);
// #endif
- 找到刚才解压的
w64devket.exe
,例如C:\dev_demo\w64devkit\w64devkit.exe
,并双击运行,弹出个黑色窗口。- 在其中输入
cd c:/dev_demo/llama.cpp
进入llama.cpp
所在的目录。注意,路径分隔符是 /。 - 输入命令
cmake . -G "MinGW Makefiles"
。正常不应报错,如果出错,可尝试在一台干净的Window7
重试。 - 然后输入命令
cmake --build . --config Release
,等待编译完成。编译过程中有几个警告,但不应该有错误。编译完成后的程序在 /bin 目录,本例为c:\dev_demo\llama.cpp\bin
。
- 在其中输入
三、运行大模型服务
- 找到编译出来的
llama-server.exe
,本例在c:\dev_demo\llama.cpp\bin\llama-server.exe
- 选择要运行的大模型
GGUF
文件,本例选deepseek-r1:1.5b
,文件名为sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
,本例放到c:\dev_demo\sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
。注意,文件名可自由命名,例如c:\dev_demo\deepseek-r1_1.5b.gguf
,本例未重命名。 - 在
c:\dev_demo\llama.cpp\bin
目录下打开CMD
终端,输入llama-server --model sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
,等待出现server is listening on http://127.0.0.1:8080
提示。如果内存不足,模型载入过程可能会出错,本例1.5b模型占用内寸不到 2GB。 - 在火狐浏览器或Chrome类浏览器,地址栏输入
http://127.0.0.1:8080
,即可开始对话。注意,第一次对话反应略慢。
补充信息
- 如果需要共享给其他人用,可以在命令中增加
--host HOST
,--port PORT
参数,例如llama-server --model sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc --host 0.0.0.0 --port 11434
,端口可自选。 - llama.cpp 支持对话与API调用,更多用法,见
/llama.cpp/examples/server/README.md