在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_WIN8hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ,OPEN_EXISTING, NULL);
#elsehFile_ = ::CreateFileW(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
#endifif (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-2316520721if (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_WIN8hMapping_ =::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL);
#elsehMapping_ = ::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_WIN8addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0);
#elseaddr_ = ::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);
// #elsehFile_ = ::CreateFileW(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// #endifif (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-2316520721if (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);
// #elsehMapping_ = ::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);
// #elseaddr_ = ::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打开网址,即可对话
相关文章:

在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
一、概述 现在已经是大模型时代。 个人认为,deepseek效果惊艳,大模型已进入实用阶段。 有些电脑,由于种种原因,还在用 Windows 7, Windows XP 等操作系统。 为了让这些电脑用上大模型,本教程在 llama.c…...
力扣146 - LRU缓存
视频讲解 哈希 双向链表 为什么要用双向链表? 快速删除节点(O(1)) 如果是单链表的话,删除一个节点时,需要从头遍历,找到前驱节点,才能修改 prev->next,导致 O(n)…...
C++ 算法竞赛STL以及常见模板
目录 STL /*═══════════════ Vector ═══════════════*/ /*════════════════ Pair ════════════════*/ /*══════════════ String ════════════════*/ /*══════════…...
微信小程序将markdown内容转为pdf并下载
要在微信小程序中将Markdown内容转换为PDF并下载,您可以使用以下方法: 方法一:使用第三方API服务 选择第三方API服务: 可以选择像 Pandoc、Markdown-PDF 或 PDFShift 这样的服务,将Markdown转换为PDF。例如,PDFShift 提供了一个API接口,可以将Markdown内容转换为PDF格式…...

AI绘画软件Stable Diffusion详解教程(7):图生图基础篇(改变图像风格)
我们在使用AI魔盒不停的绘制一幅幅图像时,会有这样的疑问:为什么生成的图像随机性这么强?我们如何按照自己的构图创作作品?为什么提示词生成的图像细节不够?如何把手绘的风格转换成另一种风格,或者说把自己…...
ES映射知识
映射 映射类似于关系型数据库的Schema(模式)。 映射来定义字段列和存储的类型等基础信息。 {"mappings": {"properties": {"username": {"type": "keyword","ignore_above": 256 // 忽略…...

蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
文章目录 1.题目解析1.1 分而治之,藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言:STM32G431RBT6实现嵌入式组第七届题目解析源码&…...

SpringBoot项目配置文件
SpringBoot项目提供了多种属性配置方式(properties、yaml、yml) yml配置文件 使用Apifox可以方便开发接口、前端测试等 工程搭建: 1.创建SpringBoot工程,并引入web开发起步依赖、mybatis、mysql驱动、lombok 2.创建数据库表&am…...

PythonWeb开发框架—Flask框架之flask-sqlalchemy、序列化和反序列化使用详解
1.安装依赖库 pip install flask-sqlalchemy pip install pymysql 2.连接数据库配置 from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__) #创建 Flask 应用实例#配置数据库连接 app.config[SQLALCHEMY_DATABASE_URI]mysql://root:stud…...
如何监控 Pod 的 CPU/内存使用率,prometheus+grafana
一、监控 Pod 的 CPU/内存使用率的方法 1. 使用 kubectl top 命令(临时检查) # 查看所有 Pod 的资源使用率(需安装 Metrics Server) kubectl top pods --all-namespaces # 查看指定命名空间的 Pod kubectl top pods -n <n…...
Spring Batch 概览
Spring Batch 是什么? Spring Batch 是 Spring 生态系统中的一个轻量级批处理框架,专门用于处理大规模数据任务。它特别适合企业级应用中需要批量处理数据的场景,比如数据迁移、报表生成、ETL(Extract-Transform-Load)…...

用Deepseek写一个五子棋微信小程序
在当今快节奏的生活中,休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏,不仅规则简单,还能锻炼思维。最近,我借助 DeepSeek 的帮助,开发了一款五子棋微信小程序。在这篇文章中,我将…...
AF3 squeeze_features函数解读
AlphaFold3 data_transforms 模块的 squeeze_features 函数的作用去除 蛋白质特征张量中不必要的单维度(singleton dimensions)和重复维度,以使其适配 AlphaFold3 预期的输入格式。 源代码: def squeeze_features(protein):&qu…...

Python 远程抓取服务器日志最后 1000行
哈喽,大家好,我是木头左! 一、神奇的 Python 工具箱 1. SSH 连接的密钥——paramiko paramiko 库提供了丰富的方法来处理 SSH 连接的各种细节。从创建连接对象,到执行远程命令,再到获取命令输出,它都能有…...

vue3+screenfull实现部分页面全屏(遇到的问题会持续更新)
需求:除了左侧菜单,右侧主体部分全部全屏 首先下载screenfull全屏插件 npm install screenfull --save页面引入 import screenfull from screenfull;我这里是右上角全屏图标 <el-iconref"elIconRef"color"#ffffff"size"2…...
Ubuntu 下 nginx-1.24.0 源码分析 (1)
main 函数在 src\core\nginx.c int ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;ngx_log_t *log;ngx_uint_t i;ngx_cycle_t *cycle, init_cycle;ngx_conf_dump_t *cd;ngx_core_conf_t *ccf;ngx_debug_init(); 进入 main 函数 最…...

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...

探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评
随着边缘计算和人工智能技术的迅速发展,性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件,凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力,引起了广泛关注。本文将从配置性…...

数据结构 常见的排序算法
🌻个人主页:路飞雪吖~ 🌠专栏:数据结构 目录 🌻个人主页:路飞雪吖~ 一、插入排序 🌟直接插入排序 🌟希尔排序 二、选择排序 🌟选择排序 🌟堆排序…...
ES索引知识
索引是数据的载体,存储了文档和映射的信息 索引是具有相同结构的文档的合集体。 设置索引,不仅仅是设置索引名字,还有索引的一些配置,比如:分片和副本,刷新频率,搜索结果的最大参数,…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...