其他工具

关注公众号 jb51net

关闭
软件教程 > 其他工具 >

DeepSeek R1最全本地部署教程 适用于Mac/Windows/Linux平台

IT运维技术圈

说到本地部署大模型,就不得不提到 Ollama。Ollama 是一个开源项目,旨在简化大语言模型(LLM)在本地环境中的部署和使用。它为用户提供了一个简单易用的接口,使得即使没有深厚技术背景的用户也能轻松地在自己的设备上运行和管理大模型。本篇文章将以部署国产最新崛起的 AI 大模型 DeepSeek R1 为例,手把手教你如何利用 Ollama 在本地环境中快速搭建和运行这些先进的 AI 模型。

一、DeepSeek R1 简介

DeepSeek R1 是一款开源 AI 模型,其性能可与 OpenAI 的 GPT-4 和 Claude 3.5 Sonnet 等顶级模型媲美,尤其在数学、编程和推理等任务上表现出色。最重要的是,它是免费、私密的,可以在本地硬件上离线运行。

DeepSeek R1 提供多个参数规模的版本,从轻量级的 1.5B 参数模型到高性能的 70B 版本。它基于 Qwen 7B 架构的精简优化版本,既保持强大性能,又具备更高的计算效率。

其主要亮点包括:

二、为什么选择本地部署?

本地运行 AI 模型有以下优势:

三、硬件要求

推荐阅读:一文读懂DeepSeek-R1本地部署配置要求

四、安装步骤

步骤 1:安装 Ollama

Ollama 是一款本地 AI 运行工具,可帮助用户轻松运行 DeepSeek R1。

下载地址:https://ollama.com/download

安装完成后,Ollama 提供了在终端直接运行 AI 模型的功能。

Ollama 简介

Ollama 是一个专注于简化大语言模型(LLM)本地部署的开源工具。它的设计目标是让用户能够以最少的配置和操作,轻松在本地设备上运行和管理各种大模型。无论是开发者、研究者,还是普通用户,都可以通过 Ollama 快速体验大语言模型的强大能力,而无需依赖云端服务或复杂的部署流程。

GitHub:https://github.com/ollama/ollama

Ollama 核心特点

Ollama 的适用场景

Ollama 安装

Ollama 的安装也特别的简单,基本上只需要鼠标点点点即可,以下是具体的安装步骤:

1、打开 Ollama 官网:https://ollama.com/download,根据自己的操作系统下载不同的安装程序包。

2、下载完成后,双开打开点击 “install” 即可,然后就是耐心等待几分钟。

3、经过了几分钟,你可能发现安装的界面不见了,不要慌这是正常的。接下来就是打开 CMD 命令窗口 (通过 Win + R 键可打开);

当出现运行窗口时,输入 cmd 点击确定即可,在命令窗口中再输入 ollama 如果输出结果跟我一样,那就表示成功安装了。

这里输出的是 ollama 命令的用法的,具体如下:

用法:
ollama [flags]
ollama [命令]
可用命令:
serve 		启动 ollama
create 		从 Modelfile 创建模型
show 		显示模型信息
run 		运行模型
stop 		停止正在运行的模型
pull 		从注册表拉取模型
push 		将模型推送到注册表
list 		列出模型
ps 			列出正在运行的模型
cp 			复制模型
rm 			删除模型
help 		获取命令帮助
标志:
-h, --help 	显示帮助信息
-v, --version 	显示版本信息
使用 "ollama [命令] --help" 获取有关命令的更多信息。

Open - Webui 安装

什么是 Open WebUI ?

Open WebUI 是一个开源的、基于 Web 的用户界面(UI)框架,专为与大语言模型(LLM)交互而设计。它提供了一个直观、友好的图形界面,使用户能够通过浏览器轻松地与本地或远程部署的大语言模型进行交互,而无需依赖复杂的命令行工具。Open WebUI 支持多种功能,包括聊天、模型管理、历史记录查看等,极大地提升了用户的使用体验。

为什么将 Open WebUI 与 Ollama 结合使用?

Ollama主要是通过命令进行操作,对于不熟悉命令行的用户来说可能不够友好。而 Open WebUI 正好弥补了这一不足,它为用户提供了一个直观的图形界面,使得与 Ollama 部署的模型交互变得更加简单和高效。

Open - Webui 安装

Open - Webui 提供了多种安装方式,这里我用的是 Python pip。

如果你还没有安装 Python,可以查看下面这篇安装教程。注意:请确保安装的是 Python 3.11 版本避免兼容性问题。

Python安装教程:https://blog.csdn.net/Palpitate_2024/article/details/145406375?spm=1001.2014.3001.5501

通过 Python pip 安装

打开 CMD 命令窗口,执行以下命令即可安装。

pip install open-webui

安装完成后,执行以下命令即可运行。

open-webui serve

这将启动 Open WebUI 服务器,可以通过 http://localhost:8080 进行访问;首次启动后,需要注册一个管理账号;点击注册即可。

模型下载 - 两种方式

  • 您应该至少有 8 GB 的 RAM 来运行 7B 模型,16 GB 的 RAM 来运行 13B 模型,32 GB 的 RAM 来运行 33B 模型。
  • 您应该至少有 8 GB 的 RAM 来运行 7B 模型,16 GB 的 RAM 来运行 13B 模型,32 GB 的 RAM 来运行 33B 模型。
  • 您应该至少有 8 GB 的 RAM 来运行 7B 模型,16 GB 的 RAM 来运行 13B 模型,32 GB 的 RAM 来运行 33B 模型。

5.1 直接使用 Ollama 下载

打开 Ollama 模型列表:https://ollama.com/search

在模型列表中,找到我们要下载的 Deep Seek -r1;

当然这里的模型都是可以下载的,比如千问,Gemma 2,Llama 3.3等,下载方法都是一样的。

这里我要安装的是 14B,选择好下载的模型后复制右边的安命令到 Cmd 中执行即可。

这里安装的时间取决于网速,耐心等待即可;安装完成后,我们再去 open webui 刷新一下就可以愉快的玩耍了。

5.2 使用 Open Webui 下载

打开 Open Webui 后,在模型搜索处输入需要下载的模型名称以及模型型号即可。

这里我的以千问的 2.5 7 B大模型为例,在搜索框输入需要下载的模型点击 从"Ollama.com" 拉取即可。

步骤 2:下载 DeepSeek R1 模型

在终端中运行以下命令,根据你的硬件选择合适的模型:

# 下载 1.5B 版本(适用于 CPU 及低配 GPU)
ollama run deepseek-r1:1.5b

# 下载 8B 版本
ollama run deepseek-r1:8b

# 下载 14B 版本
ollama run deepseek-r1:14b

# 下载 32B 版本
ollama run deepseek-r1:32b

# 下载 70B 版本(最高性能)
ollama run deepseek-r1:70b

如果你不确定选择哪个版本,可以运行默认指令:

ollama run deepseek-r1

默认情况下,该指令会下载 7B 版本。

模型下载速度取决于网络状况,可能需要几分钟到几十分钟不等。

步骤 3:安装 Chatbox(可选)

为了获得更好的交互体验,可以安装 Chatbox 作为 GUI 界面。

下载地址:https://chatboxai.app/en#

安装完成后,进行以下配置:

五、功能演示

成功安装后,你可以测试 DeepSeek R1 的能力。例如,让它生成一个用 Python 编写的贪吃蛇游戏代码。

输入 Prompt:

帮我用python写个贪吃蛇的游戏

示例代码(优化修正版本):

import turtle
import time
import random
# 窗口设置
window = turtle.Screen()
window.title("贪吃蛇 by Python")
window.bgcolor("black")
window.setup(width=600, height=600)
window.tracer(0)  # 关闭自动刷新
# 蛇头
snake_head = turtle.Turtle()
snake_head.speed(0)
snake_head.shape("square")
snake_head.color("white")
snake_head.penup()
snake_head.goto(0, 0)
snake_head.direction = "stop"
# 食物
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)
segments = []  # 蛇身体段
score = 0  # 得分
# 得分显示
pen = turtle.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("得分: 0", align="center", font=("Arial", 24, "normal"))
# 移动函数
def move():
    if snake_head.direction == "up":
        y = snake_head.ycor()
        snake_head.sety(y + 20)
    if snake_head.direction == "down":
        y = snake_head.ycor()
        snake_head.sety(y - 20)
    if snake_head.direction == "left":
        x = snake_head.xcor()
        snake_head.setx(x - 20)
    if snake_head.direction == "right":
        x = snake_head.xcor()
        snake_head.setx(x + 20)
# 方向控制函数
def go_up():
    if snake_head.direction != "down":
        snake_head.direction = "up"
def go_down():
    if snake_head.direction != "up":
        snake_head.direction = "down"
def go_left():
    if snake_head.direction != "right":
        snake_head.direction = "left"
def go_right():
    if snake_head.direction != "left":
        snake_head.direction = "right"
# 键盘绑定
window.listen()
window.onkeypress(go_up, "w")
window.onkeypress(go_down, "s")
window.onkeypress(go_left, "a")
window.onkeypress(go_right, "d")
# 碰撞检测
def check_collision():
    # 边界检测
    if snake_head.xcor() > 290 or snake_head.xcor() < -290:
        return True
    if snake_head.ycor() > 290 or snake_head.ycor() < -290:
        return True
    # 身体碰撞检测
    for segment in segments:
        if snake_head.distance(segment) < 20:
            return True
    return False
# 主游戏循环
while True:
    window.update()
    # 检查是否吃到食物
    if snake_head.distance(food) < 20:
        # 移动食物到随机位置
        x = random.randint(-290, 290)
        y = random.randint(-290, 290)
        food.goto(x, y)
        # 增加身体段
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)
        # 增加得分
        score += 10
        pen.clear()
        pen.write(f"得分: {score}", align="center", font=("Arial", 24, "normal"))
    # 移动身体段(从后往前)
    for index in range(len(segments)-1, 0, -1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x, y)
    # 移动第一个身体段到头部位置
    if len(segments) > 0:
        x = snake_head.xcor()
        y = snake_head.ycor()
        segments[0].goto(x, y)
    move()
    # 碰撞检测
    if check_collision():
        time.sleep(1)
        snake_head.goto(0, 0)
        snake_head.direction = "stop"
        # 隐藏身体段
        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()
        score = 0
        pen.clear()
        pen.write(f"得分: {score}", align="center", font=("Arial", 24, "normal"))
    time.sleep(0.1)

运行这个程序前需要确保:

操作说明:

游戏特点:

你可以根据需求进一步添加以下功能:

六、总结

通过本教程,你已经成功在本地部署了 DeepSeek R1,无论你是 AI 爱好者、开发者,还是仅仅对本地 AI 感兴趣,都可以尝试运行并训练自己的专属 AI 资料库。

借助 Ollama 和 Chatbox 等工具,本地运行 AI 变得更加简单和高效。现在就开始探索吧!