Podman(WSL2)でGPUコンテナを利用したときの/usr/lib/wsl/drivers/nv_dispig.inf_amd64_xxx/libcuda.so.1.1: No such file or directoryに対処する

当サイトではアフィリエイト広告を利用しています

WSL2上のPodman(Distroはpodman-default-machine)において、GPUコンテナを起動した際にError: crun: error stat'ing file /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda.so.1.1: No such file or directory: OCI runtime attempted と表示され、コンテナの起動が出来ませんでした。

この問題への対処には/etc/cdi/nvidia.yamlの更新で対処出来ました。詳細を以下に記録します。

環境

利用環境のバージョンは次のようになっています。

  • OS: Windows 10
  • GPU: Geforce GTX 1660
    • Win10にGPUドライバはインストール済み
  • Podman: 4.6.0
  • WSL2 Distro: podman-machine-default (Fedora37)
  • VSCode: 1.81.0

今回のPCへのWSL2,PodmanやGPUコンテナ利用ためのnvidia-container-tooolkitの導入手順は以下の記事でまとめています。

発生した問題

前日まで問題なく起動できていたGPUコンテナでしたが、突然起動せず以下のようなエラーが表示されるようになりました。

Error: crun: error stat'ing file `/usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda.so.1.1`: No such file or directory: OCI runtime attempted to invoke a command t
hat was not found
exit code: 127
podman start studyhandsonml3devcontainer_jupyter_1
Error: unable to start container "da4c78b2c414d53cad3aa9412d6527aaf617f92aed19a4c07e46d234150747fe": crun: error stat'ing file `/usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95
906f94/libcuda.so.1.1`: No such file or directory: OCI runtime attempted to invoke a command that was not found
exit code: 125

どうもWSLにおけるNvidiaドライバ周りでlibcudaが見つからないということのようです。ただ、このファイル名はパスからして一意に定まったものではなさそうに思えます。

podman run --rm hello-worldなどGPUコンテナが絡まないコンテナであれば問題なく起動できました。

結論から書くと、WindowsUpdateなりの何らかの更新時にこのパスが変わってしまったということが原因のようでした。

/etc/cdi/nvidia.yamlの更新

podmanではCDIファイルでlibcudaなどの場所を指定しています。試しに再生成して差異があるか確認してみます。

$ sudo mv /etc/cdi/nvidia.yaml /etc/cdi/nvidia.yaml.old
$ sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml

/etc/cdi/nvidia.yamlの内容

$ cat /etc/cdi/nvidia.yamlで以下のようなファイルが生成されました。

cdiVersion: 0.3.0
containerEdits:
  hooks:
  - args:
    - nvidia-ctk
    - hook
    - create-symlinks
    - --link
    - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi::/usr/bin/nvidia-smi
    hookName: createContainer
    path: /usr/bin/nvidia-ctk
  - args:
    - nvidia-ctk
    - hook
    - update-ldcache
    - --folder
    - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445
    - --folder
    - /usr/lib/wsl/lib
    hookName: createContainer
    path: /usr/bin/nvidia-ctk
  mounts:
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml_loader.so
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml_loader.so
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/lib/libdxcore.so
    hostPath: /usr/lib/wsl/lib/libdxcore.so
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvcubins.bin
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvcubins.bin
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda.so.1.1
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda.so.1.1
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda_loader.so
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda_loader.so
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ptxjitcompiler.so.1
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ptxjitcompiler.so.1
    options:
    - ro
    - nosuid
    - nodev
    - bind
  - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml.so.1
    hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml.so.1
    options:
    - ro
    - nosuid
    - nodev
    - bind
devices:
- containerEdits:
    deviceNodes:
    - path: /dev/dxg
  name: all
kind: nvidia.com/gpu

yamlファイルの差分

以下のように生成された新旧ファイルの差分を取ってみました。

どうもnv_dispig.inf_以降のハッシュ的な値が更新されていたようです。これが原因でパスにファイルが見当たらないとされていたようです。

ホスト・VMともにNvidiaDriverの更新をした記憶はないのですが、WindowsUpdateなどの更新で変化したのでしょうか。

同一の問題は今後も再発しそうなので、その際はまたyamlファイルを再生成することにします。

$ sudo diff /etc/cdi/nvidia.yaml /etc/cdi/nvidia.yaml.old
9c9
<     - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi::/usr/bin/nvidia-smi
---
>     - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/nvidia-smi::/usr/bin/nvidia-smi
17c17
<     - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445
---
>     - /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94
23,24c23,24
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml_loader.so
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml_loader.so
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/nvcubins.bin
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/nvcubins.bin
30,31c30,31
<   - containerPath: /usr/lib/wsl/lib/libdxcore.so
<     hostPath: /usr/lib/wsl/lib/libdxcore.so
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/nvidia-smi
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/nvidia-smi
37,38c37,38
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvcubins.bin
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvcubins.bin
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda.so.1.1
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda.so.1.1
44,45c44,45
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/nvidia-smi
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda_loader.so
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libcuda_loader.so
51,52c51,52
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda.so.1.1
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda.so.1.1
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ptxjitcompiler.so.1
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ptxjitcompiler.so.1
58,59c58,59
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda_loader.so
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libcuda_loader.so
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ml.so.1
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ml.so.1
65,66c65,66
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ptxjitcompiler.so.1
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ptxjitcompiler.so.1
---
>   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ml_loader.so
>     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_19f3764f95906f94/libnvidia-ml_loader.so
72,73c72,73
<   - containerPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml.so.1
<     hostPath: /usr/lib/wsl/drivers/nv_dispig.inf_amd64_7e5fd280efaa5445/libnvidia-ml.so.1
---
>   - containerPath: /usr/lib/wsl/lib/libdxcore.so
>     hostPath: /usr/lib/wsl/lib/libdxcore.so

解決に寄与しなかった方法

podman-machine-defaultにおけるパッケージ更新やPodmanの更新では問題解決には寄与しませんでした。

以下はパッケージ更新で利用したコマンドです。

sudo dnf check-update
sudo dnf upgrade

Podmanは4.6.0→4.6.1に更新しました。

winget upgrade podman

まとめ

  • Podman(WSL2)でGPUコンテナが起動しなくなった
  • /etc/cdi/nvidia.yamlの再生成でコンテナを起動できた
  • 問題が再発生した場合も同じ手段で解決が必要そう