Linux中部署DeepSeek,WSL(ubunt) + ollama + deepseek-R1-7b

  想在自己的Win11电脑上部署Linux的DeepSeek模型,但在网上一直没有找到合适的相应教程,自己查询各种网上资源,以及询问一些AI大模型后成功安装,并整理了以下步骤。仅作为个人学习笔记使用,由于本人对各方面知识掌握不足,难免会有些错误,欢迎各位大佬的指正。 

一,启用wsl和虚拟机功能

WSL简介:WSL 是微软为 Windows 系统开发的兼容层,允许用户直接在 Windows 上运行原生的 Linux 二进制文件(无需虚拟机或双系统)。它打通了 Windows 与 Linux 的生态,使开发者能在熟悉的 Windows 环境中无缝使用 Linux 工具链。

方案一:通过命令快速安装

   可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符。

具体方法:

1.  在开始界面查找PowerShell,右键单击并选择“以管理员身份运行”。

1.  输入wsl --install 命令,enter执行

wsl --install 

然后重启计算机。

注意:

  • 此命令会启用所需功能、安装 WSL2 内核,并下载 Ubuntu。

  • 完成后需重启系统。

  • 重启后,首次运行会提示创建用户名和密码,Ubuntu输入密码时不会有任何显示,输入时自己记住即可。

方案二:手动分步安装

1.  打开电脑控制面板(可以从开始界面搜索框中搜索进入),点击程序。

2. 点击程序和功能

3.点击启用或关闭Windows功能

4.选择框出的这几个选项

5.检查是否开启虚拟化,打开任务管理器,点击性能,查看CPU虚拟化是否开启,未开启需要进入BIOS中开启开启虚拟化(这个对于不同品牌电脑可能不太一样我也不是太熟练,不了解的话建议百度找一下教程,)。

6.重启电脑

7.安装 WSL2 内核

下载并安装内核更新包,点击下方链接即可下载

或者前往官网下载

旧版 WSL 的手动安装步骤 | Microsoft Learn

 下载完成之后安装即可。

8.设置默认 WSL 版本为 2

  开始菜单中,搜索PowerShell,并鼠标右击,选择 以管理员身份打开。在PowerShell命令框中输入以下命令。

wsl --set-default-version 2

9.安装 Linux 发行版

打开电脑自带的微软商店,搜索Ubuntu,选择一个版本下载即可。

10.启动并初始化

  安装完成后,从开始菜单打开刚刚下载好的ubunt,按提示设置用户名和密码。 注意首次运行会提示创建用户名和密码,Ubuntu输入密码时不会有任何显示,输入时自己记住即可。

11.将 WSL 2 设置为默认版本

以管理员身份打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:

wsl --set-default-version 2

二,下载ollma

  这里依旧是有两个方案,一个是使用官网代码下载,第二方案是手动下载安装包手动安装,我的网络不是很好,这里我使用了方案二。

方案一:通过命令快熟安装

前往Ollama官网,复制Ollama官网的Linux版本下载命令,在wsl命令框中(Ubuntu命令框也一样),输入复制好的命令,下载即可。

方案二:手动下载(可能需要科学上网)

1.前往GitHub Release页面找到最新Linux版本的Ollama,网址首页:

下拉找到安装包,(通常为ollama-linux-amd64或类似名称的.tar.gz文件,WSL默认是64位系统,选择amd64x86_64版本),点击下载即可:

2.下载完成之后,回到桌面,鼠标右键查看属性以确定安装包的存放位置。

3.将文件复制到WSL系统中,在wsl命令框中输入以下命令,回车运行。

# cp /mnt/ + 你的存放地址 + ~/

#下面是我的地址
cp /mnt/c/Users/22377/OneDrive/Desktop/ollama-linux-amd64.tgz ~/

4.解压Ollama压缩包,在WSL命令框中执行以下命令

cd ~   #进入WSL根目录
chmod +x ~/ollama-linux-amd64.tgz   #赋予解压权限
tar -xzvf ollama-linux-amd64.tgz   #解压Ollama 

解压成功,生成一个名为 ollama 的可执行文件。

 5.验证解压结果

ls ~/bin/ollama        # 应显示ollama主程序
ls ~/lib/ollama/cuda*  # 应显示CUDA库文件

 会输出类似于这样的结果:

13.安装Ollama到系统路径,通过以下命令将二进制文件移动到系统可执行路径。

# 创建目标目录(如果不存在)
sudo mkdir -p /usr/local/bin
# 移动主程序并赋予执行权限
sudo mv ~/bin/ollama /usr/local/bin/
sudo chmod +x /usr/local/bin/ollama

6.使用 PowerShell 运行以下命令检查Ollama是否成功

ollama --version

结果会输出Ollama的版本号。 

三,部署deepseek

1.启动Ollama,在WSL中执行以下命令:

ollama serve

保持上面的命令框开启,别关。

2.前往Ollama官网找到DeepSeek-R1的模型下载命令,复制。

deepseek-r1:7bhttps://ollama.com/library/deepseek-r1:7b

3.再另外开启一个WSL命令框,输入刚刚复制的命令下载并运行对应模型即可。

ollama run  运行模型

ollama run deepseek-r1:7b  #运行模型,若检查到本地没有该模型,则会自动下载后立即运行

 ollama pull  下载模型

ollama pull deepseek-r1:7b  #下载模型,但不运行,需要手动运行模型

ollama run deepseek-r1:7b  #运行模型,若检查到本地没有该模型,则会自动下载后立即运行

 以上便是全部内容,如果哪里有错误,欢迎各位大佬指正。

### Transformer 相关的练习题和面试题 #### 练习题 1. **实现一个多头自注意力机制** 实现一个多头自注意力机制,这是Transformer架构的核心组件之一。该函数应接受查询、键和值矩阵作为输入,并返回加权后的值矩阵。 ```python import torch import torch.nn as nn class MultiHeadAttention(nn.Module): def __init__(self, embed_size, num_heads): super(MultiHeadAttention, self).__init__() self.embed_size = embed_size self.num_heads = num_heads self.head_dim = embed_size // num_heads assert ( self.head_dim * num_heads == embed_size ), "Embedding size needs to be divisible by heads" self.values = nn.Linear(self.head_dim, embed_size, bias=False) self.keys = nn.Linear(self.head_dim, embed_size, bias=False) self.queries = nn.Linear(self.head_dim, embed_size, bias=False) self.fc_out = nn.Linear(embed_size, embed_size) def forward(self, values, keys, query, mask): N = query.shape[0] value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1] # Split the embedding into self.num_heads different pieces values = values.reshape(N, value_len, self.num_heads, self.head_dim) keys = keys.reshape(N, key_len, self.num_heads, self.head_dim) queries = query.reshape(N, query_len, self.num_heads, self.head_dim) energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys]) if mask is not None: energy = energy.masked_fill(mask == 0, float("-1e20")) attention = torch.softmax(energy / (self.embed_size ** (1 / 2)), dim=3) out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape( N, query_len, self.embed_size ) out = self.fc_out(out) return out ``` 2. **构建位置编码模块** 编写一段代码来创建一个用于给定序列长度的位置编码矩阵。此编码将被添加到词嵌入中以提供关于词语顺序的信息[^2]。 ```python import math import numpy as np def get_positional_encoding(max_seq_length, d_model): position_enc = np.array([ [pos / np.power(10000, 2 * i / d_model) for i in range(d_model)] for pos in range(max_seq_length)]) position_enc[:, 0::2] = np.sin(position_enc[:, 0::2]) # apply sin on even indices position_enc[:, 1::2] = np.cos(position_enc[:, 1::2]) # apply cos on odd indices return torch.from_numpy(position_enc).float() ``` #### 面试题 1. 解释什么是残差连接以及它如何帮助解决深层神经网络训练过程中的梯度消失问题? 2. 描述一下在Transformer模型里,为何要采用多头自注意力而不是单头自注意力? 多头自注意力允许模型在同一时间点上关注来自不同表征子空间的不同信息片段,从而增强了表达能力并提高了性能[^3]. 3. 如何理解Transformer里的“感受野”? 它是如何随着层数增加而扩大的? 感受野指的是模型能够捕捉到的最大范围内的特征区域。对于Transformers而言,由于存在多次堆叠的注意力层,每一层都可以在其前一层的基础上进一步扩大其对整个输入的理解范围,因此整体的感受野会逐渐增大. 4. 在Swin Transformer的研究工作中进行了哪些实验验证新方法的有效性?[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早点睡啊Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值