
项目实训纪实(二)——DeepSeek本地化部署+配置+可视化WebUI+测试
DeepSeek 是一个专为高效推理设计的 AI 平台,它支持各种大规模语言模型的本地化部署。在本教程中,我们将详细介绍如何在本地环境中部署 DeepSeek 模型,并配置一个可视化的 Web UI——ChatBox,以便与模型进行交互。
第一步:安装 Ollama
Ollama 是一款支持多种 AI 模型的开源平台,它允许用户在本地或远程运行 DeepSeek 这样的模型。Ollama 提供了高效的推理和管理功能,适用于在本地机器上进行 AI 模型部署。
-
访问 Ollama 官网下载页面:Download Ollama on macOS
-
根据你操作系统的版本下载对应的 Ollama 安装包,并完成安装。
第二步:搜索并配置 DeepSeek 模型
在安装完成 Ollama 后,启动它并通过其界面或命令行工具来下载并配置 DeepSeek 模型。
配置模型:
-
打开 Ollama,搜索 DeepSeek 模型。
-
下载您所需要的模型版本,例如 deepseek-r1:1.5b。
-
确保您的显卡满足模型的显存需求(例如:DeepSeek-r1:1.5b 至少需要 8GB 显存)。
-
记住右上角的运行命令
模型版本 | CPU | 内存 | GPU | GPU型号示例 |
---|---|---|---|---|
1.5B | 4核+ | 8GB+ | 非必需,可选4GB+ | 如GTX 1650/RTX2060 |
7B | 8核+ | 16GB+ | 8GB+ | 如RTX 3070/4060 |
8B | 8核+ | 16GB+ | 8GB+ | 如RTX 3070/4060 |
14B | 12核+ | 32GB+ | 16GB+ | 如RTX 4090/A5000 |
32B | 16核+ | 64GB+ | 24GB+ | 如A100 40GB |
70B | 32核+ | 128GB+ | 多卡 | 如2xA100 80GB |
671B | 64核+ | 512GB+ | 多卡 | 如8xA100/H100 |
第三步:在终端执行命令启动模型
在终端中执行以下命令来启动 DeepSeek 模型(来自于上一步的):
ollama run deepseek-r1:1.5b
执行此命令后,模型将开始加载并运行。请耐心等待,直到加载完成。
安装完成后就可以在命令行中使用deepseek模型了!
以下是一些常用的 Ollama 命令,用于管理模型:
命令 | 描述 |
---|---|
/bye |
退出模型 |
ollama list |
列出所有可用的模型 |
ollama run <model> |
启动指定的模型 |
ollama ps |
查看当前运行中的模型 |
例如,要退出当前模型,可以输入:
>>> /bye
或者要查看当前所有已安装的模型,可以使用:
C:\Users\chk> ollama list
可视化部署 Web UI - ChatBox 配置
ChatBox 是一个用于与 AI 模型进行交互的可视化界面,它能够通过简洁的界面让用户更方便地使用 DeepSeek 模型。接下来,我们将介绍如何将 ChatBox 连接到 Ollama 服务,并进行配置。
第一步:下载 ChatBox AI
-
访问 ChatBox 官网。
-
下载并安装 ChatBox AI 客户端。
-
安装完成后,启动 ChatBox 客户端。
设置中文语言:
-
在 ChatBox 客户端中,进入设置界面。
-
选择语言设置,选择 中文。
第二步:将 ChatBox 连接到远程 Ollama 服务
1. 配置 Windows 环境变量
为了使 Ollama 服务能在您的本地网络中访问,您需要按下面的方式配置以下环境变量:
-
退出 Ollama 服务。
-
打开 Windows 设置 或 控制面板,搜索“环境变量”。
-
编辑用户环境变量,创建或编辑以下变量:
-
OLLAMA_HOST
设置为0.0.0.0
。
-
-
保存设置并重新启动 Ollama。
2. 配置 Ollama 服务的 IP 地址
配置完成后,您可以在本地网络中访问 Ollama 服务。查找您的电脑 IP 地址(通常形式为 192.168.X.X
):
ipconfig
在 ChatBox 客户端中,设置 API Host 为:
http://192.168.X.X:11434
3. 在防火墙中配置端口
如果您的计算机使用防火墙,可能需要允许 Ollama 服务使用 11434 端口。根据您的操作系统设置相应的防火墙规则,以确保没有阻止连接。
4. 配置模型
完成上述设置后,您可以在 ChatBox 中选择并配置要使用的模型。如果上述步骤都成功,可以看到已经下载的模型,选择即可。
第三步:效果演示
配置完成后,启动 ChatBox,并尝试与 DeepSeek 模型进行对话。
运行成功!
本地DeepSeek测试结果
1. 精准的算法问题求解
传统评测平台仅能判断代码是否正确,而DeepSeek可以:
-
分步解析题目:将复杂问题(如最短路径、背包问题)拆解为可理解的子任务。
-
提供多种解法:不仅输出代码,还能对比贪心、动态规划等不同算法的优劣。
案例:
当用户提交一道“二叉树层序遍历”问题时,DeepSeek会先解释BFS的思想,再给出代码实现,并提示队列优化的可能。
以下是一个场景演示:
用户提交代码如下:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrder(root):
if not root:
return []
result = []
queue = [root]
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.pop(0)
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result
Deepseek的回复:
广度优先搜索(BFS)原理说明:
层序遍历是典型的BFS应用,其核心思想是:
1. 从根节点开始,按层级依次访问
2. 使用队列数据结构维护待访问节点
3. 每次处理一层的所有节点
4. 将子节点按顺序加入队列
时间复杂度:O(n),需要访问每个节点一次
空间复杂度:O(n),队列最大存储量为最后一层的节点数
代码优化建议
您的实现基本正确,但存在可优化点:
1. 使用list.pop(0)操作的时间复杂度为O(n)
2. 可以改用collections.deque提升队列操作效率
优化方案:
from collections import deque
def levelOrder_optimized(root):
if not root:
return []
result = []
queue = deque([root]) # 使用双端队列
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft() # O(1)时间复杂度的出队操作
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result
2. 智能代码优化与性能分析
DeepSeek能检测代码中的潜在缺陷:
-
时间复杂度分析:自动识别嵌套循环导致的性能瓶颈。
-
空间优化建议:例如提醒用滚动数组替代二维DP表。
-
代码风格改进:如变量命名规范性、冗余逻辑简化。
以下是一个场景展示:
用户提交代码(斐波那契数列):
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
DeepSeek反馈:
1. 时间复杂度分析:
- 当前递归实现:O(2^n) 指数级复杂度
- 递归树存在大量重复计算(如fib(3)被计算多次)
2. 优化建议:
a) 记忆化搜索(Top-down DP):
```
memo = {}
def fib(n):
if n in memo: return memo[n]
if n <= 1: return n
memo[n] = fib(n-1) + fib(n-2)
return memo[n]
```
→ 时间复杂度优化为O(n)
b) 迭代法(Bottom-up DP):
```
def fib(n):
if n <= 1: return n
a, b = 0, 1
for _ in range(2, n+1):
a, b = b, a+b
return b
```
→ 空间复杂度优化为O(1)
3. 数学与逻辑推理的强支持
对于涉及数学证明的算法题(如数论、组合数学),DeepSeek的强大逻辑推理能力机制使其能够:
-
推导数学公式(如斐波那契数列的矩阵快速幂解法)。
-
结合符号计算验证答案的正确性。
以下是一个场景演示:
用户提问:
"如何高效计算a^b mod m?"
DeepSeek反馈:
1. 数学原理推导:
- 基于幂的二进制分解:
a^b = a^(2^k) × a^(2^(k-1)) × ... × a^1
- 模运算性质:
(x × y) mod m = [(x mod m) × (y mod m)] mod m
2. 算法实现(Python)
def fast_pow(a, b, m):
result = 1
a = a % m
while b > 0:
if b % 2 == 1:
result = (result * a) % m
a = (a * a) % m
b = b // 2
return result
3. 复杂度证明:
- 时间复杂度:O(log b)
- 空间复杂度:O(1)
DeepSeek提供的具体复杂度证明:
4. 低资源需求,高并发适配
-
在测试中,DeepSeek R1 的响应速度比同参数规模模型快20%,显存占用降低15%。
-
支持量化部署,可在消费级GPU(如我们组使用的RTX 4070)上流畅运行,降低平台硬件成本。
5.不足之处
-
DeepSeek的代码风格较为工程化,多使用类等面向对象编程方法,和算法学习者的需要不符合。
-
DeepSeek生成的代码较为多变,没有统一的码风,不利于初学者形成编程范式。
总结
通过本教程,您已经学会了如何手动部署 DeepSeek 模型并将其与 ChatBox 连接。通过这些步骤,您可以在本地环境中高效地运行 DeepSeek 模型,进行多轮对话和推理任务。
对于我们的项目而言,该工作是项目的基础性工作,是后续微调+RAG工作的必要工作
更多推荐
所有评论(0)