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

DeepSeek-R1国产化系统gpu驱动+cuda+ollama+webui可视化离线私有化部署

1.概述

        网上大部分教程都是在线部署,完全离线私有化部署的文章不多,本文介绍从GPU驱动、cuda、ollama、deepseek模型和open webui等完全离线安装几个方面,让小白0基础也可以私有化部署大模型deepseek-R1。

我使用的设备是银河麒麟V10操作系统,海光CPU,内存128G,三张英伟达T4显卡(每张显存16G)。这里说一下国产化海光芯片c86架构就是源自于x86架构,与intel和amd等x86架构cpu使用并没有区别。

模型分别部署了deepseek-R1-32B-Q4、32B-Q8和70B-Q4,Q4是量化4位整数,量化数字越大精度越高模型越大,当然效果也越好。亲测了用单张T4显卡部署deepseek 32B-Q4速度较卡,所以显存最好大于16G。

2.GPU驱动安装

显卡硬件安装后,使用命令lspci | grep NVIDIA 查看是否存在GPU设备,lspci命令可查看所有连接PCI总线的设备。

但还需要安装显卡驱动,操作系统才能使用显卡。nvidia-smi命令若没有输出则未安装驱动。

下载 NVIDIA 官方驱动 | NVIDIA

这里有个坑,操作系统选择时,麒麟系统不可以选择Linux 64-bit KylinOS 10,否则安装后nvidia-smi命令仍然无法使用。

[root@localhost ~]# sudo modprobe nvidia             #手动加载驱动内核
modprobe: FATAL: Module nvidia not found in directory /lib/modules/4.19.90-89.11.v2401.ky10.x86_64
表示当前系统的内核中找不到 NVIDIA 驱动模块。这可能是因为 NVIDIA 驱动没有正确编译或加载,或者驱动版本与当前内核不兼容。

操作系统应该直接选择Linux 64-bit 这个版本。

下载并运行驱动文件NVIDIA-Linux-x86_64-570.86.15.run


chmod 755 NVIDIA-Linux-x86_64-570.86.15.run
sudo ./NVIDIA-Linux-x86_64-570.86.15.run

安装过程中一些选项的选择:

1. Multiple kernel module types are available for this systems. Which would you like to use?  MIT/GPL    NVIDIA Proprietary
2. An alternate method of installing the NVIDIA driver was detected.(This is usually a package provided by your distributor.) A driver installed via that method may integrate better with you system than a driver installed by
naidia-installer

3. Please review the message provided by the maintainer of this alternate installation method and decide how to proceed:                                                                                      

Continue installation Abort installtion

4. The NVIDIA driver provided by Ubuntu can be installed by launching the "Software & Updates" application,and by selecting the NVIDIA driver from the "Additional Drivers" tab.
Continue installation

5. Would you like to register the kernel module source with DKMS? This will allow DKMS....      Yes

6. Install NVIDIA's 32-bit compatibility libraries?  NO

7. Would you like to run the nvidia-xconfig utility to automatically update you X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up.
Yes

出现下面字样,说明安装成功,安装后重启操作系统。

Your X configuration file has been successfully updated. Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version:570.86.15) is now complete.

安装后用nvidia-smi命令可以看到GPU信息。

lshw -c video | grep configuration   # 查看显卡驱动driver是否是nvidia

3.安装cuda

GPU使用CUDA + cuDNN 来加速计算,所以安装cuda和cudnn。

nvidia-smi 命令查看驱动支持的cuda最高版本

前往 Nvidia 的 CUDA 官网:https://developer.nvidia.com/cuda-toolkit-archive 下载对应版本cuda

这里的操作系统就选择麒麟v10

$ sudo sh cuda_12.8.0_570.86.10_linux.run

选择 “accept” 

笔者服务器已经安装过 Nvidia 显卡驱动了,因此不需要再安装了。如果你尚未安装驱动,可以顺便一起安装了。摁一下空格取消 Driver 安装,直接选择 Install 安装:

安装成功:

cuda安装目录在/usr/local/cuda-12.8

接下来配置环境变量,直接在 Linux 命令行输入以下命令:

sudo vim ~/.bashrc

在末尾添加

export PATH=/usr/local/cuda-12.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-12.8

使系统环境变量生效

source ~/.bashrc
sudo ldconfig

使用命令 nvcc -V 输出cuda版本号则安装成功。

4.安装cudnn

需要根据cuda版本来安装对应的cudnn版本

cuDNN Archive | NVIDIA Developer

tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive/
sudo cp lib/* /usr/local/cuda-12.8/lib64/
sudo cp include/* /usr/local/cuda-12.8/include/
sudo chmod a+r /usr/local/cuda-12.8/lib64/*
sudo chmod a+r /usr/local/cuda-12.8/include/*

验证cuDNN安装成功

cat /usr/local/cuda-12.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

5.安装ollama

Ollama 是一个开源的大型语言模型服务工具,可以帮助用户快速在本地运行大模型。

https://ollama.com/download/ollama-linux-amd64.tgz

sudo tar -C /usr -xzf ollama-linux-amd64.tgz   #解压安装

 添加systemctl服务启动文件,创建文件:/etc/systemd/system/ollama.service

[Unit]
Description=Ollama Service
After=network-online.target[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
Environment="OLLAMA_MODELS=/opt/llm_work/deepseek-r1/models"
Environment="OLLAMA_HOST=0.0.0.0"[Install]
WantedBy=default.target

上边文件中指定OLLAMA_MODELS位置,还需要设置AI模型目录的权限:

chmod +777 /opt/llm_work/deepseek-r1/models

 需要外网访问记得开放防火墙11434端口。

sudo systemctl daemon-reload       #服务配置生效
sudo systemctl enable ollama        #开机启动
sudo systemctl start ollama           #启动ollama
sudo systemctl status ollama        #查看ollama运行状态

ollama -v  #查看ollama版本

[root@localhost ~]# ollama -v
ollama version is 0.5.11

6.离线安装deepseek模型

在https://huggingface.co/models或魔搭社区下载模型的GGUF格式文件,实现单独文件直接放到ollama模型目录下即可运行。

显存16G可以下载32B的量化Q4的,可以运行就是比较卡,可以根据自己显存大小选择不同的模型大小。

在模型目录/opt/llm_work/deepseek-r1/models/blobs(blobs是ollama运行时自动创建的,也可手动创建)下创建文件Modelfile,

Modelfile内容是根据ollama官方模版设置的

Modelfile文件内容如下:

FROM ./DeepSeek-R1-Distill-Qwen-32B-Q4_0.gguf

TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<|User|>{{ .Content }}
{{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
{{- end }}
"""

PARAMETER stop <|begin▁of▁sentence|>
PARAMETER stop <|end▁of▁sentence|>
PARAMETER stop <|User|>
PARAMETER stop <|Assistant|>
 

最重要的是第一行,FROM + 你的模型文件。

ollama create model-name -f Modelfile        # model-name是自定义的模型名

创建成功后可以使用下面命令检查Ollama中是否已有模型。

ollama list

使用命令 ollama run model-name 启动模型,就可以在命令行中使用deepseek了,按Ctrl+d可以退出对话。

还可以调用大模型API接口:

curl http://localhost:11434/api/generate -d "{\"model\": \"deepseek-r1-32B-Q4:latest\",\"prompt\": \"你是谁\",\"stream\":flase}"

"stream":true 是流式返回,flase是全部生成后一次性返回。

7.离线安装open webui

只部署deepseek只能在命令行中使用大模型,通过部署Open WebUI可以通过网页来方便使用大模型。部署open webui需要用到docker,需要先在联网环境中下载镜像,再导入到离线环境中。

open-webui官方安装文档:https://github.com/open-webui/open-webui

(1)离线安装docker

下载安装包 https://download.docker.com/linux/static/stable/x86_64/

tar -zxvf docker-24.0.6.tgz

将解压之后的docker文件移到 /usr/bin目录下

sudo cp docker/* /usr/bin/

注册成服务

vim /etc/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target

chmod +x /etc/systemd/system/docker.service  # 配置权限

systemctl daemon-reload  # 配置生效

systemctl enable docker.service # 设置开机启动

systemctl start docker  # 启动docker

配置国内镜像源,镜像源可能不好使,则需要翻墙下载镜像。

vi /etc/docker/daemon.json# 内容如下:
{"registry-mirrors": ["https://xx4bwyg2.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}{}# 退出并保存
:wq# 使配置生效
systemctl daemon-reload# 重启Docker
systemctl restart docker

(2)下载镜像

在联网环境中下载镜像

docker pull ghcr.io/open-webui/open-webui:main

docker images  #列出本地镜像

将下载的镜像导出为open-webui.tar包,然后导入到离线环境中

docker save -o open-webui.tar <镜像名称>  

(3)离线安装

在离线环境中导入open-webui.tar文件

docker load -i open-webui.tar      离线导入镜像

docker images  #列出本地镜像
docker ps -a     #查看所有容器和运行状态

docker run      #用于首次创建并运行容器
docker start    #启动已存在的容器

启动open-webui容器

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

启动后在浏览器访问http://localhost:3000 ,初次登录注册账号。

然后就可以用网页来使用deepseek对话了。ollama和open webui还支持部署其他大模型,也可以上传文件,开始使用吧。

相关文章:

DeepSeek-R1国产化系统gpu驱动+cuda+ollama+webui可视化离线私有化部署

1.概述 网上大部分教程都是在线部署&#xff0c;完全离线私有化部署的文章不多&#xff0c;本文介绍从GPU驱动、cuda、ollama、deepseek模型和open webui等完全离线安装几个方面&#xff0c;让小白0基础也可以私有化部署大模型deepseek-R1。 我使用的设备是银河麒麟V10操作系统…...

数据集/API 笔记:新加坡风速 API

data.gov.sg 数据范围&#xff1a;2016年12月 - 2025年3月 API 查询方式 curl --request GET \--url https://api-open.data.gov.sg/v2/real-time/api/wind-speedcurl --request GET \--url "https://api-open.data.gov.sg/v2/real-time/api/wind-speed?date2024-07-16…...

transformer架构解析{掩码,(自)注意力机制,多头(自)注意力机制}(含代码)-3

目录 前言 掩码张量 什么是掩码张量 掩码张量的作用 生成掩码张量实现 注意力机制 学习目标 注意力计算规则 注意力和自注意力 注意力机制 注意力机制计算规则的代码实现 多头注意力机制 学习目标 什么是多头注意力机制 多头注意力计算机制的作用 多头注意力机…...

【C++】switch 语句编译报错:error: jump to case label

/home/share/mcrockit_3588/prj_linux/../source/rkvpss.cpp: In member function ‘virtual u32 CRkVpss::Control(u32, void*, u32)’: /home/share/mcrockit_3588/prj_linux/../source/rkvpss.cpp:242:8: error: jump to case label242 | case emRkComCmd_DBG_SaveInput:|…...

linux中使用firewall命令操作端口

一、开放端口 1. 开放一个端口 sudo firewall-cmd --zonepublic --add-port8443/tcp --permanent sudo firewall-cmd --reload 2. 开放一组连续端口 sudo firewall-cmd --zonepublic --add-port100-500/tcp --permanent sudo firewall-cmd --reload 3. 一次开放多个不连续…...

C++第六节:stack和queue

本节目标&#xff1a; stack的介绍与使用queue的介绍与使用priority_queue的介绍与使用容器适配器模拟实现与结语 1 stack&#xff08;堆&#xff09;的介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;只能从容器的一端进行元素的插…...

算法 并查集

目录 前言 一 并查集的思路 二 并查集的代码分析 三 实操我们的代码 四 并查集的代码优化 总结 前言 并查集主要是用来求解集合问题的&#xff0c;用来查找集合还有就是合并集合&#xff0c;可以把这个运用到最小生成树里面 一 并查集的思路 1 并查集的相关的操作…...

yarn application命令中各参数的详细解释

yarn application 命令用于管理和监控 YARN 上运行的应用程序&#xff0c;下面为你详细解释该命令中各参数的含义和用途&#xff1a; 通用参数 -help [command] 作用&#xff1a;显示 yarn application 命令的帮助信息。如果指定了 command&#xff0c;则显示该子命令的详细使…...

算法之数据结构

目录 数据结构 数据结构与算法面试题 数据结构 《倚天村 • 图解数据结构》 | 小傅哥 bugstack 虫洞栈 ♥数据结构基础知识体系详解♥ | Java 全栈知识体系 线性数据结构 | JavaGuide 数据结构与算法面试题 数据结构与算法面试题 | 小林coding...

Android 图片压缩详解

在 Android 开发中,图片压缩是一个重要的优化手段,旨在提升用户体验、减少网络传输量以及降低存储空间占用。以下是几种主流的图片压缩方法,结合原理、使用场景和优缺点进行详细解析。 效果演示 直接先给大家对比几种图片压缩的效果 质量压缩 质量压缩:根据传递进去的质…...

迷你世界脚本计时器接口:MiniTimer

计时器接口&#xff1a;MiniTimer 彼得兔 更新时间: 2023-04-26 20:24:50 具体函数名及描述如下: 序号 函数名 函数描述 1 isExist(...) 判断计时器是否存在 2 createTimer(...) 添加计时器 3 deleteTimer(...) 删除计时器 4 startBackwardTimer(.…...

JavaScript的变量以及数据类型

JS变量 变量的声明 四种声明方式 1. <script>var abc;abc"变量声明1";alert(abc);</script>2. <script>var abc"变量声明2";alert(abc);</script><script>var abc1,abc2;abc1"变量声明3.1";abc2"变量声明3…...

私有云基础架构

基础配置 使用 VMWare Workstation 创建三台 2 CPU、8G内存、100 GB硬盘 的虚拟机 主机 IP 安装服务 web01 192.168.184.110 Apache、PHP database 192.168.184.111 MariaDB web02 192.168.184.112 Apache、PHP 由于 openEuler 22.09 系统已经停止维护了&#xff…...

在 Windows 和 Linux 系统上安装和部署 Ollama

引言 Ollama 是一个强大的本地大语言模型&#xff08;LLM&#xff09;运行工具&#xff0c;允许用户轻松下载和运行不同的 AI 模型&#xff0c;如 LLaMA、Mistral 和 Gemma。无论是开发者还是研究人员&#xff0c;Ollama 都提供了一种简单而高效的方式来在本地环境中部署 AI 模…...

从零开始学习Slam--数学概念

正交矩阵 矩阵的转置等于它的逆矩阵&#xff0c;这样的矩阵称之为正交矩阵 即&#xff1a; Q T Q I Q^T Q I QTQI&#xff0c; 这样的矩阵列向量都是单位向量且两两正交。 旋转矩阵属于特殊的正交群&#xff0c;即SO(n)&#xff0c;这里n通常是3&#xff0c;所以SO(3)就是…...

【零基础到精通Java合集】第十五集:Map集合框架与泛型

课程标题:Map集合框架与泛型(15分钟) 目标:掌握泛型在Map中的键值类型约束,理解类型安全的键值操作,熟练使用泛型Map解决实际问题 0-1分钟:泛型Map的意义引入 以“字典翻译”类比泛型Map:明确键和值的类型(如英文→中文)。说明泛型Map的作用——确保键值对的类型一…...

从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全

2025年1月&#xff0c;小米因车辆“授时同步异常”召回3万余辆小米SU7&#xff0c;成为其造车历程中的首个重大安全事件。 从小米SU7召回事件剖析&#xff0c;授时同步何以成为智能驾驶的命门&#xff1f; 2024年11月&#xff0c;多名车主反馈SU7标准版的智能泊车辅助功能出现…...

Visual Studio Code 如何编写运行 C、C++ 程序

目录 安装 MinGW-w64 编译器&#xff08;推荐&#xff09;在 VS Code 中配置 C 开发环境 参考链接 在vs code上运行c脚本&#xff0c;报了下面的错误&#xff0c;我仅仅安装了vs code及在商店里下载了插件&#xff0c;其它配置操作没有做&#xff0c;直接对一个脚本进行运行&am…...

动静态库-Linux 学习

在软件开发中&#xff0c;程序库是一组预先编写好的程序代码&#xff0c;它们存储了常用的函数、变量和数据结构等。这些库可以帮助开发者节省大量的时间和精力&#xff0c;避免重复编写相同的代码。当我们在 Linux 系统中开发程序时&#xff0c;经常会用到两种类型的程序库&am…...

【Hudi-SQL DDL创建表语法】

CREATE TABLE 命令功能 CREATE TABLE命令通过指定带有表属性的字段列表来创建Hudi Table。 命令格式 CREATE TABLE [ IF NOT EXISTS] [database_name.]table_name[ (columnTypeList)]USING hudi[ COMMENT table_comment ][ LOCATION location_path ][ OPTIONS (options_lis…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...