DeepSeek系列-本地部署 DeepSeek R1 教程

一、DeepSeek R1 简介

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

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

其主要亮点包括:

  • 完全开源,可自由使用。

  • 支持本地运行,无需依赖云服务器。

  • 数据完全可控,确保隐私安全。

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

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

  • 隐私保障:有些公司保密需求很高,需要所有数据均存储在本地,避免敏感信息泄露,甚至网络都是隔离的。个人如果不想让自己的检索习惯暴露在互联网上,也可以选择本地部署;
  • 零额外成本:DeepSeek R1 免费运行,无需订阅或额外费用。当然,这仅仅是指不需要因为使用 API 付费,本地搭建的硬件成本还是要承担的;
  • 完全控制:可以进行微调和本地优化,无需外部依赖。

三、硬件要求

部署 DeepSeek R1 需要一定的硬件资源,以下是不同版本对计算机配置的基本要求:

DeepSeek R1 版本 合适的显存
1.5b(最小) CPU 或 4GB GPU
8b 8GB GPU
14b 16GB GPU
32b 24GB GPU
70b(最大) 48GB GPU

即使你的硬件资源不是很充足,也不用担心,1.5b仍然可以尝试一下。最小的1.5b 只使用CPU 也能够运行起来。

四、安装步骤

步骤 1:安装 Ollamaollama_download.png

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

  • 下载地址:https://ollama.com/download
  • 安装完成后,Ollama 提供了在终端直接运行 AI 模型的功能。

步骤 2:下载 DeepSeek R1 模型

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载 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

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

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

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

步骤 3:安装 Chatbox(可选)

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

  • 下载地址:Chatbox AI: Your AI Copilot, Best AI Client on any device, Free Download
  • 安装完成后,进行以下配置:
    • 在“配置 API 模型”选项中选择 Ollama API。
    • 设置 API 主机为:http://127.0.0.1:11434
    • 选择 DeepSeek R1 作为默认模型。
    • 保存设置。

五、功能演示

成功安装后,你可以测试 DeepSeek R1 的能力。

以下是一个简化版的大富翁游戏Python代码示例。这个版本包含基本的地产购买、租金支付和回合机制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import random

class Player:
def __init__(self, name):
self.name = name
self.position = 0
self.money = 1500
self.properties = []
self.in_jail = False

class BoardCell:
def __init__(self, cell_type, name, price=0, rent=0):
self.cell_type = cell_type # start, property, chance, community, tax, jail, free_parking
self.name = name
self.price = price
self.rent = rent
self.owner = None

def initialize_board():
return [
BoardCell("start", "起点"),
BoardCell("property", "地中海大道", 600, 50),
BoardCell("community", "社区福利"),
BoardCell("property", "北欧大道", 600, 50),
BoardCell("tax", "所得税", price=200),
BoardCell("railroad", "中央车站", 2000, 200),
BoardCell("property", "东方大道", 1000, 100),
BoardCell("chance", "机会"),
BoardCell("property", "南方大道", 1000, 100),
BoardCell("property", "西方大道", 1200, 150),
BoardCell("jail", "监狱"),
BoardCell("property", "北京路", 1400, 200),
BoardCell("utility", "电力公司", 1500, 100),
BoardCell("property", "南京路", 1400, 200),
BoardCell("property", "上海路", 1600, 250),
BoardCell("railroad", "东站", 2000, 200),
BoardCell("property", "广州路", 1800, 300),
BoardCell("community", "社区福利"),
BoardCell("property", "深圳路", 1800, 300),
BoardCell("property", "台北路", 2000, 350),
BoardCell("free_parking", "免费停车"),
BoardCell("property", "香港路", 2200, 400),
BoardCell("chance", "机会"),
BoardCell("property", "澳门路", 2200, 400),
BoardCell("property", "西藏路", 2400, 450),
BoardCell("railroad", "西站", 2000, 200),
BoardCell("property", "新疆路", 2600, 500),
BoardCell("property", "内蒙古路", 2600, 500),
BoardCell("utility", "自来水厂", 1500, 100),
BoardCell("property", "青海路", 2800, 550),
BoardCell("jail", "监狱"),
BoardCell("property", "甘肃路", 3000, 600),
BoardCell("property", "宁夏路", 3000, 600),
BoardCell("community", "社区福利"),
BoardCell("property", "陕西路", 3200, 700),
BoardCell("railroad", "北站", 2000, 200),
BoardCell("chance", "机会"),
BoardCell("property", "河南路", 3500, 800),
BoardCell("tax", "奢侈税", price=500),
BoardCell("property", "河北路", 4000, 1000)
]

def draw_chance_card(player):
cards = [
("move", "前进到起点", 0),
("money", "银行错误,获得200元", 200),
("move", "前进到中央车站", 5),
("money", "缴纳罚款100元", -100),
("jail", "直接入狱", None)
]
card = random.choice(cards)
print(f"机会卡:{card[1]}")

if card[0] == "move":
player.position = card[2]
elif card[0] == "money":
player.money += card[2]
elif card[0] == "jail":
player.in_jail = True
player.position = 10 # 监狱位置

def handle_turn(player, board, players):
print(f"\n{player.name}的回合,当前位置:{board[player.position].name}")

# 掷骰子
dice = random.randint(1, 6) + random.randint(1, 6)
print(f"掷出了 {dice} 点")

player.position = (player.position + dice) % len(board)
current_cell = board[player.position]

print(f"移动到 {current_cell.name} ({player.position})")

# 处理不同格子类型
if current_cell.cell_type == "property":
if current_cell.owner:
if current_cell.owner != player:
rent = current_cell.rent
print(f"需要支付租金 {rent} 元给 {current_cell.owner.name}")
player.money -= rent
current_cell.owner.money += rent
else:
if player.money >= current_cell.price:
buy = input(f"是否要购买 {current_cell.name}{current_cell.price}元)? (y/n) ").lower()
if buy == 'y':
player.money -= current_cell.price
current_cell.owner = player
player.properties.append(current_cell)
print(f"购买成功!剩余资金:{player.money}")

elif current_cell.cell_type == "chance":
draw_chance_card(player)

elif current_cell.cell_type == "tax":
print(f"缴纳 {current_cell.price} 元税款")
player.money -= current_cell.price

# 检查是否破产
if player.money < 0:
print(f"{player.name} 破产了!")
for prop in player.properties:
prop.owner = None
players.remove(player)

def main():
board = initialize_board()
players = [Player("玩家1"), Player("玩家2")]

while len(players) > 1:
for player in list(players): # 创建副本避免修改循环列表
if player in players: # 检查是否已被移除
handle_turn(player, board, players)
print(f"{player.name} 剩余资金:{player.money}")

# 简单胜利条件
if len(players) == 1:
print(f"\n游戏结束!胜利者:{players[0].name}")
return

if __name__ == "__main__":
main()

这个简化版本包含以下功能:

  1. 玩家轮流掷骰子移动
  2. 地产购买系统
  3. 租金支付机制
  4. 机会卡系统
  5. 税款缴纳
  6. 破产处理
  7. 基础胜利条件

主要省略的功能包括:

  • 建筑物升级系统
  • 完整的监狱机制
  • 抵押系统
  • 完整的卡片系统
  • 交易系统

你可以通过以下方式扩展这个游戏:

  1. 添加更多的机会卡和社区福利卡
  2. 实现完整的监狱机制
  3. 添加房屋和酒店系统
  4. 完善拍卖系统
  5. 添加玩家交易功能
  6. 实现完整的棋盘布局
  7. 添加图形界面

要运行游戏,只需执行代码并按照提示操作即可。玩家在遇到无主地产时可以按’y’键购买,其他情况会自动处理。游戏会持续进行直到只剩一个玩家剩余。

六、总结

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

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

欢迎关注微信公众号“小七爱折腾”,咱们一起折腾起来。

PS. 文章中用的相关软件可能下载的比较慢,可以到我的公众号回复“工具”获取网盘下载链接。