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