在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
一、概述
现在已经是大模型时代。
个人认为,deepseek
效果惊艳,大模型已进入实用阶段。
有些电脑,由于种种原因,还在用 Windows 7, Windows XP 等操作系统。
为了让这些电脑用上大模型,本教程在 llama.cpp
的基础上做了一点修改,使得 Windows 7 x64 可用 deepseek-r1
模型,实测有效。
二、面向普通用户
资源下载
百度网盘:https://pan.baidu.com/s/1NShm6Qi9bDgl6jI-IsEr1A?pwd=6es1
迅雷网盘:https://pan.xunlei.com/s/VOIfPUb8lCS71jAjBEnXmRg9A1?pwd=nze7#
可执行程序及源码:https://gitee.com/goldenalien/llama.cpp/releases/tag/llama.cpp.win7.20250208
简单用法
-
普通用户只需下载
llama-server.win7.20250208.7z
,该文件只含llama-server.exe
-
下载
deepseek-r1:1.5b
模型,即/models/sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
-
在CMD终端,输入
c:\my_ai_tools\llama-server.exe --model c:\mymodels\sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
,路径按实际情况设定。 详细参数,可输入llama-server --help
-
打开firefox或chrome等浏览器,输入
127.0.0.1:8080
,OK! -
注意:IE 浏览器打不开!
三、面向开发者
资源说明
可执行程序
llama-server.win7.20250208.7z
,精简版,只有llama-server.exe
llama.cpp.win7.20250208.7z
,完全版,所有llama*.exe
模型文件
/models/sha256-*
,从ollama提取的gguf文件,也可以从其他途径获得
名称 | ollama ID | 大小GB | OLLAMA_MODELS/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 |
源代码
/source/llama.cpp.git.20250208.7z
,原版GIT仓库,含所有历史版本,20250208备份/source/llama.cpp.2025-02-08.4d3465c5aeca8be29cac77f1535c35f4fb274eca.zip
,20250208代码,commit版本号为4d3465c5aeca8be29cac77f1535c35f4fb274eca
开发工具
/dev-tools/w64devkit-x64-2.0.0.exe
/dev-tools/cmake-3.31.5-windows-x86_64.msi
/dev-tools/Git-2.45.2-64-bit.exe
/dev-tools/Firefox 18.5.0.0.exe
开发过程
准备工具
- Windows 7 x64 操作系统
w64devkit-x64-2.0.0.exe
https://github.com/skeeto/w64devkitcmake-3.31.5-windows-x86_64.msi
https://cmake.org/download/Git-2.45.2-64-bit.exe
https://git-scm.com/downloads/winFirefox 18.5.0.0.exe
【可选】llama.cpp
源代码,本案例取自 2025.02.08的 commit:4d3465c5aeca8be29cac77f1535c35f4fb274eca
操作步骤
- 打开Windows 7 x64操作系统
- 按默认设置,安装 w64devkit, cmake, GIt, firefox。注意,该添加到PATH的添加。
- 解压源代码
llama.cpp
,按下图修改/examples/server/httplib.h
, 第3012到3057行,也就是把 if else 注释掉,只保留 else 部分的代码。
#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
改为
// #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
-
找到安装的
/w64devkit/w64devkit.exe
,双击运行,cd
到llama.cpp
所在的目录
- 输入关键命令
cmake . -G "MinGW Makefiles"
-
然后输入关键命令
cmake --build . --config Release
,等待编译完成。编译后的程序在 /bin 目录。
测试
- 从
ollama
的OLLAMA_MODELS/blobs
找几个模型文件,形如SHA256-*
,注意看文件大小 - 在win7 输入
llama-server --model sha512-xxxxxxxxxxxxxxxxxxxxxx
, 默认服务网址为127.0.0.1:8080
, 终端有乱码,不影响使用。 - 用firefox打开网址,即可对话