项目实训纪实(二)——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 | 启动指定的模型 |
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
-