前言¶
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 初始化的兼容性问题。