Atlantis
GitHub 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

4. 在WSL2中运行ollama

Created At 2024-09-13 Updated on 2025-10-25

1. 前言

前阵子为了运行黑吗喽,将工作站上的 RTX3060 拆下来安装回了游戏主机上。

虽然最近已经比较少在本地运行大模型,可总有想尝鲜的时候,于是测试下了在 WSL2 中使用 N 卡加速 ollama,目前看来没有什么问题,一路安装下去即可。

为了方便折腾,这次也尝试了使用远程桌面访问 Windows 11,这里就做一下记录。

系统是 Windows 11 23H2,显卡为笔记本端魔改的 3060 12G,显卡驱动版本 560.94,对应 CUDA 版本 12.6.1。

2. 启用WSL2

WSL2 的开启比较简单,在控制面板上启用两个 Windows 功能:

  1. 适用于 Linux 的 Windows 子系统
  2. 虚拟机平台

然后在应用商店下载安装 Linux 发行版即可,我这里使用的是 Debian 12:

➜  ~ wsl.exe -l -v
  NAME      STATE           VERSION
* Debian    Running         2

WLS2 使用 hyper-v 虚拟化技术,需要安装专用 WSL 内核,在通过命令设置 WSL 版本时会提示下载安装内核文件安装。

最后是开启 root 用户,并启用 systemd,只需要在 Linux 系统上添加一个 /etc/wsl.conf 文件即可,内容如下:

➜  ~ cat /etc/wsl.conf
[boot]
systemd=true
[user]
default=root

为了方便连接 Windows 11 里的 Debian 12,我使用 gost 的端口转发功能,将软路由的一个端口映射到 WSL2 系统的 sshd 服务,这样就可以直接 ssh 登录 WSL2,详情参考:Linux笔记 / Proxmox VE / 7. 内网穿透

3. 安装显卡驱动与CUDA

魔改显卡依旧需要使用对应的魔改驱动,而 CUDA 自带显卡驱动,正确的做法是:

  1. 安装魔改显卡驱动
  2. 找到魔改驱动版本对应的 CUDA 版本,下载完整离线安装包
  3. 安装 CUDA,安装过程中选择不安装 CUDA 自带的显卡驱动

普通显卡直接安装 CUDA 即可:CUDA Downloads,现在无需注册账号就可以下载,建议选择 exe (local) 类型离线安装包。

以 N 卡驱动 560.94 及对应的 CUDA 版本 12.6.1 为例,安装完成后会自动为 WSL2 启用显卡驱动支持,从 Windows Terminal 打开 Debian 12 时,默认的 PATH 环境变量如下:

➜  ~ echo $PATH
/root/dev/go/current/bin:/root/dev/go/path/bin:/root/dev/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/bin:/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/libnvvp:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/Program Files/NVIDIA Corporation/Nsight Compute 2024.3.1/:/mnt/c/Users/mikum/AppData/Local/Microsoft/WindowsApps

/usr/lib/wsl/lib 及 C 盘常用文件路径都都会被添加到 PATH 中,但这些路径在使用 ssh 登录 WSL2 时是不会自动配置的,我们可以将 Windows Terminal 中默认注入的 PATH 路径同步到 shell 配置文件中。

WSL2 的使用体验与普通 Linux 几乎没有差异:

alt text

4. 安装ollama

在 WSL2 中执行以下命令安装 ollama:

curl -fsSL https://ollama.com/install.sh | sh

Linux 版本的 ollama 默认集成多种显卡驱动,导致体积接近 1G:

➜  ~ ls -lh /usr/local/bin/ollama
-rwxr-xr-x 1 root root 1020M Sep  8 15:42 /usr/local/bin/ollama

安装完成后查看 ollama 日志,可以看到 ollama 检测到了 N 卡:

alt text

拉取一个常用的 gemma2:2b 模型运行一次后,在 nvidia-smi 输出中可以看到 ollama 正在使用显卡:

alt text

这里使用了一个本地模型仓库(实际上是通过 caddy 和 ollama 搭建的本地模型缓存),有兴趣的朋友可以看看这个项目:ollama-registry

alt text

5. 远程访问

完成上述配置后,还有一个远程访问的需求,我期望的状态是开机后能自动启动 WSL2 的 Debian 12 实例,但测试下来未能走通,目前可行的办法是:

  1. 设置 Debian 12 为 Windows Terminal 的默认启动配置
  2. 设置 Windows Terminal 开机启动
  3. Windows 11 开机后,用远程桌面软件登录一次,触发 Windows Terminal 自动启动,前台运行 WSL2 系统

接下来就能使用 ssh 远程登录 WSL2 了,具体操作如下。

使用本地帐户

alt text

经过测试,只有本地帐户可以使用 Windows 远程桌面登录,如果使用 Microsoft 帐户,会强制开启 PIN 码,开启后使用 账号 + PIN 码 无法远程登录。

只有 本地帐户 + 密码 可以使用远程登录,如果已登录 Microsoft 帐户,可以在设置页面的 帐户 选项中切换到本地帐户。

开启远程访问

在设置页面的 系统 选项中开启 远程桌面

alt text

修改电源策略

在设置页面的 系统 选项中修改 电源 配置,将 插入电源时,设置以下时间后将设备置于睡眠状态 改为 从不,避免关闭远程桌面后系统自动休眠。

alt text

另外再使用管理员权限打开 PowerShell,执行 powercfg.exe /hibernate off ,移除 Hiberfil.sys 隐藏系统文件。

最后在 macOS 上可以使用 Microsoft Remote Desktop 远程访问 Windows 11 系统。

alt text