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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件:RabbitMQ镜像集群部署配置全流程

目录 1、特点 2、RabbitMQ的消息传递模式 2.1、简单模式&#xff08;Simple Mode&#xff09; 2.2、工作队列模式&#xff08;Work Queue Mode&#xff09; 2.3、发布/订阅模式&#xff08;Publish/Subscribe Mode&#xff09; 2.4、路由模式&#xff08;Routing Mode&am…

【MySQL — 数据库基础】深入解析 MySQL 的联合查询

1. 插入查询结果 语法 insert into table_name1 select* from table_name2 where restrictions ;注意&#xff1a;查询的结果集合&#xff0c;列数 / 类型 / 顺序 要和 insert into 后面的表相匹配&#xff1b;列的名字不要求相同&#xff1b; create table student1(id int , …

算法学习笔记之数学基础

例1&#xff08;最小公倍数与最大公约数&#xff09; 计算最小公倍数 公式&#xff1a; LCM(A,B) A*B/GCD(A,B) A与B的最小公倍数等于A*B除以A与B的最大公约数 计算最大公约数&#xff1a;辗转相除法 原理&#xff1a;设A与B的最大公约数为x&#xff0c;则A是x的倍数&am…

通过操作系统中的IO模型理解Java中的BIO,NIO,AIO

操作系统中的三种IO模型 阻塞I/O 先来看看阻塞 I/O&#xff0c;当用户程序执行 read&#xff0c;线程会被阻塞 一直等到内核数据准备好&#xff0c;并把数据从内核缓冲区拷贝到应用程序的缓冲区中&#xff0c;当拷贝过程完成&#xff0c;read 才会返回 注意&#xff1a;阻塞…

多项式插值(数值计算方法)Matlab实现

多项式插值&#xff08;数值计算方法&#xff09;Matlab实现 一. 原理介绍二. 程序设计1. 构建矩阵2. 求解矩阵方程3. 作出多项式函数4. 绘制插值曲线5. 完整代码 三. 图例 一. 原理介绍 关于插值的定义及基本原理可以参照如下索引 插值原理&#xff08;数值计算方法&#xff…

SpringMVC请求执行流程源码解析

文章目录 0.SpringMVC九大内置组件1.processRequest方法1.请求先到service方法2.然后不管是get还是post都会跳转到processRequest方法统一处理 2.doService方法3.doDispatch方法1.代码2.checkMultipart 4.核心流程 0.SpringMVC九大内置组件 1.processRequest方法 1.请求先到se…

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中&#xff0c;在完成第一个模块的过程中&#xff0c;我经常感到困惑&#xff0c;到底是延时了多少个时钟&#xff1f;今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南&#xff1a;JavaGuide &#xff08;Github 收获148k Star&#xff09;。这是我在大三开始准备秋招面试的时候创建的&#xff0c;目前已经持续维护 6 年多了&#xff0c;累计提交了 5600 commit &#xff0c;共有 550 多位贡献者共同参与…

蓝桥杯-洛谷刷题-day5(C++)(为未完成)

1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"&#xff1…

MySQL - 索引 - 介绍

索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;

2021年全国研究生数学建模竞赛华为杯E题信号干扰下的超宽带(UWB)精确定位问题求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 E题 信号干扰下的超宽带(UWB)精确定位问题 原题再现&#xff1a; 一、背景   UWB&#xff08;Ultra-Wideband&#xff09;技术也被称之为“超宽带”&#xff0c;又称之为脉冲无线电技术。这是一种无需任何载波&#xff0c;通过发送纳秒…

安装WPS后,导致python调用Excel.Application异常,解决办法

在使用xlwings编辑excel文件时&#xff0c;默认调用的是“Excel.Application”&#xff0c;如果安装过wps&#xff0c;会导致该注册表为WPS&#xff0c;会导致xlwings执行异常 因为安装过WPS&#xff0c;导致与Excel不兼容的问题&#xff0c;想必大家都听说过。有些问题及时删…

STM32智能小车(循迹、跟随、避障、测速、蓝牙、wifi、4g、语音识别)总结

前言 有需要帮忙代做51和32小车或者其他单片机项目&#xff0c;课程设计&#xff0c;报告&#xff0c;PCB原理图的小伙伴&#xff0c;可以在文章最下方加我V交流咨询&#xff0c;本篇文章的小车所有功能实现的代码还有硬件清单放在资源包里&#xff0c;有需要的自行下载即可&a…

机器学习所需要的数学知识【01】

总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件

singleTaskAndroid的Activity启动模式知识点总结

一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言&#xff1a; Activity作为四大组件之一&#xff0c;也可以说Activity是其中最重要的一个组件&#xff0c;其负责调节APP的视图&#xff…

Java中使用EasyExcel

Java中使用EasyExcel 文章目录 Java中使用EasyExcel一&#xff1a;EasyExcel介绍1.1、核心函数导入数据导出数据 1.2、项目实际应用导入数据导出数据 1.3、相关注解ExcelProperty作用示例 二&#xff1a;EasyExcel使用2.1、导入功能2.2、导出功能 三&#xff1a;EasyExcel完整代…

WinForm 防破解、反编译设计文档

一、引言 1.1 文档目的 本设计文档旨在阐述 WinForm 应用程序防破解、反编译的设计方案&#xff0c;为开发团队提供详细的技术指导&#xff0c;确保软件的知识产权和商业利益得到有效保护。 1.2 背景 随着软件行业的发展&#xff0c;软件破解和反编译现象日益严重。WinForm…

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境&#xff0c;如果没有安装&#xff0c;先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装&#xff0c;终端输入命令:brew -v Mac安装HomeB…

AN 433:源同步接口的约束与分析

文章目录 简介时钟和数据的关系SDR&#xff08;单数据速率&#xff09;和 DDR&#xff08;双数据速率&#xff09;接口约束默认时序分析行为 源同步输出输出时钟输出时钟约束时钟电路和约束示例 以系统为中心的输出延迟约束输出最大延时输出最小延时 以系统为中心的输出时序例外…