当前位置: 首页 > news >正文

在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

简单用法

  1. 普通用户只需下载 llama-server.win7.20250208.7z,该文件只含 llama-server.exe

  2. 下载 deepseek-r1:1.5b模型,即 /models/sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc

  3. 在CMD终端,输入c:\my_ai_tools\llama-server.exe --model c:\mymodels\sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc,路径按实际情况设定。 详细参数,可输入 llama-server --help

    在这里插入图片描述

  4. 打开firefox或chrome等浏览器,输入 127.0.0.1:8080,OK!

  5. 注意:IE 浏览器打不开!

    在这里插入图片描述

三、面向开发者

资源说明

可执行程序

  • llama-server.win7.20250208.7z,精简版,只有 llama-server.exe
  • llama.cpp.win7.20250208.7z,完全版,所有llama*.exe

模型文件

  • /models/sha256-*,从ollama提取的gguf文件,也可以从其他途径获得
名称ollama ID大小GBOLLAMA_MODELS/blobs
deepseek-r1:1.5ba42b25d8c10a1.04sha256-aabd4debf0c8f08881923f2c25fc0fdeed24435271c2b3e92c4af36704040dbc
deepseek-r1:8b28f8fd6cdc674.58sha256-6340dc3229b0d08ea9cc49b75d4098702983e17b4c096d57afbbf2ffc813f2be
deepseek-r1:14bea35dfe181828.37sha256-6e9f90f02bb3b39b59e81916e8cfce9deb45aeaeb9a54a5be4414486b907dc1e
deepseek-r1:32b38056bbcbb2d18.4sha256-6150cb382311b69f09cc0f9a1b69fc029cbd742b66bb8ec531aa5ecf5c613e93
deepseek-r1:70b0c1615a8ca3239.5sha256-4cd576d9aa16961244012223abf01445567b061f1814b57dfef699e4cf8df339
qwen2.5-coder:7b2b04965143374.36sha256-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/w64devkit
  • cmake-3.31.5-windows-x86_64.msi https://cmake.org/download/
  • Git-2.45.2-64-bit.exe https://git-scm.com/downloads/win
  • Firefox 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,双击运行,cdllama.cpp 所在的目录
    在这里插入图片描述- 输入关键命令 cmake . -G "MinGW Makefiles"
    在这里插入图片描述在这里插入图片描述

  • 然后输入关键命令 cmake --build . --config Release,等待编译完成。编译后的程序在 /bin 目录。
    在这里插入图片描述

测试

  • ollamaOLLAMA_MODELS/blobs 找几个模型文件,形如 SHA256-*,注意看文件大小
  • 在win7 输入 llama-server --model sha512-xxxxxxxxxxxxxxxxxxxxxx, 默认服务网址为 127.0.0.1:8080, 终端有乱码,不影响使用。
  • 用firefox打开网址,即可对话

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 进阶——第十六蓝桥杯嵌入式熟练度练习(串口的小BUG补充-字符接受不完整和字符接受错误)
  • RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具
  • Go GUI 框架, energy many-browser 示例解读
  • 大语言模型需要的可观测性数据的关联方式
  • 【MySQL例题】我在广州学Mysql 系列——有关数据备份与还原的示例
  • DeepSeek 中的 GRPO 算法全面解析
  • 力扣-二叉树-226 翻转二叉树
  • node.js+兰空图床实现随机图
  • 【HUSTOJ 判题机源码解读系列01】判题机架构、判题流程浅析
  • 一维前缀和与二维前缀和
  • C语言基本概念————讨论sqrt()和pow()函数与整数的关系
  • iOS AES/CBC/CTR加解密以及AES-CMAC
  • 《数组》学习
  • Oracle常见语法
  • 开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)
  • 【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法
  • 腿足机器人之一- 机械与电子组件概览
  • 机器学习:决策树
  • 动态网站建设实训实训心得/网站优化排名软件
  • 攻击网站的方法/百度网盘搜索免费资源
  • 我对网站开发的项目反思/如何在百度发广告
  • 西安网站建设罗鑫/核酸检测最新消息
  • 网站备案没公司/杭州制作公司网站
  • 代理龙华网站建设/网站建设推广服务