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

在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打开网址,即可对话

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/543956.html

相关文章:

  • 网络编程 day3
  • pyrender 渲染报错解决
  • Rust 中的闭包:捕获环境的匿名函数
  • PyTorch Lightning Trainer介绍
  • 【嵌入式Linux应用开发基础】open函数与close函数
  • Linux系统安装Nginx详解(适用于CentOS 7)
  • SQL-leetcode—1393. 股票的资本损益
  • 如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?
  • 计算机网络-MPLS基础概念
  • C++ ——基础进阶
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • 性能优化中的服务器与操作系统优化
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • 在亚马逊云科技上一键自动部署Falcon3大语言模型
  • 11.推荐系统的安全与隐私保护
  • 对gru的理解
  • 【C++八股】C++内存管理
  • 从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统
  • redis持久化原理相关面试题剖析
  • 期权帮 | 股指期货交易:规则速览与解读!
  • SpringBoot速成(九)获取用户信息 P9-P10
  • git - 克隆带子模块的git工程的方法
  • windows蓝牙驱动开发-支持蓝牙事件通知
  • 为什么 ARCGIS PRO ArcGISIndexingServer.exe 使用大量计算机内存?
  • UGUI下UI元素的position和localPosition
  • 计算机网络和操作系统常见面试题目(带脑图,做了延伸以防面试官深入提问)