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
の再生成でコンテナを起動できた- 問題が再発生した場合も同じ手段で解決が必要そう