web-dev-qa-db-ja.com

nvidiaランタイムをdockerランタイムに追加する

GCPでテスラGPUを使用して仮想マシンを実行しています。そして、PyTorchベースのアプリをデプロイして、GPUで高速化してみてください。

DockerにこのGPUを使用させ、コンテナからアクセスできるようにしたいと考えています。

ホストマシンにすべてのドライバーをインストールできましたが、アプリは正常に実行されますが、Docker(nvidia/cudaコンテナーに基づく)で実行しようとすると、pytorchが失敗します。

File "/usr/local/lib/python3.6/dist-packages/torch/cuda/__init__.py", line 82, 
in _check_driver http://www.nvidia.com/Download/index.aspx""")
AssertionError: 
Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from

コンテナーに表示されるnvidiaドライバーに関する情報を取得するには、次のコマンドを実行します。

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
しかしそれは不平を言います:docker: Error response from daemon: Unknown runtime specified nvidia.

ホストマシンnvidia-smi出力は次のようになります。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   39C    P0    35W / 250W |    873MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Dockerでランタイムを確認すると、runcランタイムのみが取得され、インターネット上の例のようにnvidiaは取得されません。

$ docker info|grep -i runtime
 Runtimes: runc
 Default Runtime: runc

このnvidiaランタイム環境をドッカーに追加するにはどうすればよいですか?

これまでに見つけたほとんどの投稿と質問には、「Dockerデーモンを再起動するのを忘れた、うまくいった」などとありますが、それは私には役に立ちません。誰がやればいいの?

私はgithubで多くの問題を確認しました #1#2 および StackOverflowの質問-助けにはなりませんでした。

4
evaleria

必要なnvidiaランタイムはnvidia-container-runtime

こちらのインストール手順に従ってください:
https://github.com/NVIDIA/nvidia-container-runtime#installation

基本的に、パッケージマネージャーが存在しない場合は、最初にインストールします。

Sudo apt-get install nvidia-container-runtime

次に、それをdockerランタイムに追加します。
https://github.com/nvidia/nvidia-container-runtime#daemon-configuration-file

このオプションは私にとってうまくいきました:

$ Sudo tee /etc/docker/daemon.json <<EOF
{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
EOF
Sudo pkill -SIGHUP dockerd

追加されたことを確認します。

$ docker info|grep -i runtime
 Runtimes: nvidia runc
 Default Runtime: runc
3