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 初始化的兼容性問題。

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

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

小夜