JetPackでDockerコンテナが立ち上がらない際の対処法


問題

JetsonでJetPackを使ってTegraのコンテナを立ち上げる際に以下のようなエラーが出ることがある.

$ docker run --runtime nvidia -it nvcr.io/nvidia/l4t-base:r32.4.4
...
OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"process_linux.go:432: running prestart hook 1 caused \\\"error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: driver error: failed to process request\\\\n\\\"\"": unknown

大抵は,以下が原因のことが多い.

  • NVIDIAが用意しているTegraのコンテナを使っていない
    nvidia/cuda:10.1-base-ubuntu18.04を使ってたり
  • インストールされているJetPackと一致しないTegraのコンテナを使用している
    ここからTegraのコンテナの一覧は確認できる
    以下でJetPackのバージョンは確認できる
    $ cat /etc/nv_tegra_release

これで解決しなかったケースがあったので,備忘録的に記載.

解決

JetPackのバージョンとTegraのコンテナのバージョンが一致しているが,エラーが出た.
原因としては,JetPackにはnvidia-docker2が元から入っているが,誤って更新してしまったことにある.
(Ubuntuと同じようにnvidia-docker2をインストールした)

ので,以下のコマンドで再インストール.

$ sudo apt remove nvidia-docker2
$ sudo apt autoremove

リポジトリの追加などしている場合は削除する...
主に下記ファイルを削除
/etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt update

$ sudo apt install nvidia-docker2

これで無事Tegraの機能をもったコンテナを立ち上げることができた.

まとめ

このエラーに関しては,NVIDIAのフォーラムでも議題にあがっていることが多い印象.
最終的にはJetPackを再インストールした,という解決方法が多い.
が,それをできないケースも存在する.
(NXやAGXのチップが組み込まれているベンダーのボードを使っている際など)

このケースにはまる人はあまりいないかと思いましたが,同じことをしてしまった人のためにも情報を残しておきます.
ご参考までに.