🙄

UbuntuのdockerでGPUを使う場合snapでインストールしてはいけない

2021/08/19に公開

この記事について

この記事は筆者がUbuntu 21.04でdockerでGPUを使おうとしたときにハマった落とし穴のメモです。

経緯

UbuntuではSnappyというaptにかわるパッケージマネージャが用意されています(コマンドはsnap)。
Ubuntu Server 21.04ではOSの初期インストール時にdockerやmicrok8sなどのパッケージをこのsnapでインストールできるオプションがあり、筆者はこれでdockerをインストールしていました。

その後、dockerでGPUを使うためにNVIDIA Container Toolkitをインストールしたのですが、この途中でaptからdockerをインストールしてしまったようです。
インストールガイドに書かれている明示的なdockerインストールのコマンドは実行していないので、おそらく依存関係で勝手にインストールされたのだと推測されます。

この状態でOSを再起動すると、snap版とapt版の二種類のdockerが同時に起動してしまいます。
systemctlではそれぞれsnap.docker.dockerd.serviceとdocker.serviceという名称で、systemctl status <サービス名>で確認するとそれぞれ異なるログが確認できます。
Dockerイメージも別々に管理されるようで、完全に別物のようです。

NVIDIA Container Toolkitの対応状況としてはapt版のdockerはGPUを使えましたが、snapのdockerでは--gpus allのオプションをつけるとエラーになり、コンテナを起動できませんでした。

筆者の環境では、両方起動している状態では、dockerコマンドはsnap版が優先されました。
そのため、二重起動している状態ではdocker --gpus allが失敗し、snap版dockerを停止すると成功する、という状況になります。

対策

snap版をサービスとして無効化するsystemctl disable snap.docker.dockerd.serviceかアンインストールsnap remove dockerしてapt版だけ使うようにすればGPUが使えるようになりました。

Discussion