dsh-wsl-gpufix:DSH Landlock 沙箱中的 WSL2 GPU 访问插件

前言

DSH (DeepSeek Harness) 默认的 dsh-sandbox-local 运行器在 WSL2 环境下构建了一个基于 Landlock 的沙箱。其配置硬编码了访问列表:默认为 /dev/null,并额外授予 /tmp 和工作区根目录的写入权限。除此之外,没有配置项可以添加额外路径。

这种限制在 WSL2 环境中会阻断 GPU 的使用:/dev/dxg 无法以读写方式打开,导致 CUDA 初始化失败;同时,libcuda 需要向 /proc 写入线程名称,被拒绝的写入操作会导致 cuInit 返回 CUDA_ERROR_OPERATING_SYSTEM。

dsh-wsl-gpufix 插件通过修改沙箱配置,在 Landlock 运行器中显式授予 /dev/dxg 和 /proc 的访问权限,从而在保持沙箱隔离的前提下恢复 GPU 功能。

插件介绍

这是一个 Cordis 主机组合插件,用于解决 DSH Landlock 沙箱在 WSL2 中无法访问 GPU 的问题。

  • 维护者:Jumqyc
  • 许可证:MIT
  • 定位:DSH 模型推理辅助插件

核心功能

  • 授予 WSL2 GPU 设备访问权限:通过 readWrite 配置项添加 /dev/dxg。
  • 在 Landlock 沙箱中启用 CUDA:同时添加 /proc 以满足 CUDA 初始化所需的系统调用。
  • 兼容标准结构:支持标准的 DSH bundle 插件结构。
  • 多种安装方式:支持 GitHub 远程安装、本地克隆安装,以及全局 Home 层安装(方法 C)。

安装与启用

安装前请确保你的环境满足以下条件:
1. WSL2:nvidia-smi 在非沙箱的普通终端中已能正常工作。
2. DSH Landlock 运行器:使用的是 dsh-sandbox-local 的 Landlock 模式,而非 Bubblewrap。
3. 内核支持:系统内核已启用 Landlock (landlock-run --probe 可检测)。

方法 A:从 GitHub 安装(推荐)

使用官方命令直接注册插件包。

dsh plugin --profile <profile> add github:Jumqyc/dsh-wsl-gpufix

方法 B:本地克隆安装

如果你需要修改插件代码或离线安装,可以先克隆仓库,然后通过本地路径注册。

git clone https://github.com/Jumqyc/dsh-wsl-gpufix.git
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-wsl-gpufix

方法 C:全局 Home 层安装(方法 C)

此方法无需修改任何 profile 配置,直接在全局 Home 层安装,适用于需要所有 profile 共享 GPU 权限的场景。

bash install.sh

安装完成后,请重启 profile 或等待插件热重载生效。

典型用法

在配置了上述插件的 Landlock 沙箱中运行以下命令,验证 CUDA 是否可用。

python -c "import os, torch; os.close(os.open('/dev/dxg', os.O_RDWR)); print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"

预期输出示例:

True NVIDIA GeForce RTX 4060 Laptop GPU

适用场景与注意

  • 适用场景:需要在 DSH Landlock 沙箱内进行本地模型推理、需要利用 WSL2 GPU 加速的开发环境。
  • 权限调整:插件通过放宽沙箱权限来实现功能。它会在启动时向 Landlock 添加 --rw /dev/dxg 和 --rw /proc 标志。
  • 安全限制:插件不能禁用沙箱、修改审批策略或执行配置中的代码。它仅能追加 --rw 标志,且仅对配置的 modes(默认为 workspace-write)生效。
  • 兼容性:仅适用于 DSH Landlock 运行器。如果使用 Bubblewrap 运行器或非 Landlock 运行器,该插件不会生效。

结尾

dsh-wsl-gpufix 插件为在 WSL2 中运行 DSH 提供了必要的 GPU 访问路径。它通过精细的权限控制,在保持沙箱安全性的同时解决了 CUDA 初始化的兼容性问题。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜