質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

解決済

Docker+GPU+TensorFlow環境構築において、GPUを認識しない(なぜかNvidiaドライバが2つ出現?)

MagMag
MagMag

総合スコア69

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0評価

0クリップ

1434閲覧

投稿2021/08/04 06:40

編集2021/08/05 05:22

やろうとしていること

Docker+GPU+TensorFlowの実行環境を作ろうと思っています。

対応

GPUを積んだ機体はproxy環境下にあり、ネットワーク設定が困難であったため、GPU非搭載で別ネットワーク下のMacBookでコンテナのイメージを作成し、このイメージをGPU搭載機体(Ubuntu16.04)にコピーしてdocker load→docker runしました。この方法が悪いのか不明ですか、Docker上でGPUを認識しません。そこで、問題の切り分け方法をアドバイスいただけないでしょうか?

問題の想定原因

TensorFlowからGPU認識を確認するコマンドを行ったところ(TensorFlowからGPUが認識できているかを2行コードで確認する)、kernel version 430.64.0 does not match DSO version 410.129.0 -- cannot find working devices in this configurationというErrorがでました。

確認事項等

  • ホストOS(GPU搭載機体)には、Nvidiaのドライバの430.64をインストールしました(古いバージョンからアップデートしたので、そこが原因かもしれません)。その後本体再起動しています。
  • ホストコンピュータ上でもコンテナ上でもnvidia-smiコマンドは通り、共にドライバは430.64で認識されます。
  • nvidiaドライバ、cuda、tensorflow、pythonのバージョンを合わせて導入したつもりです。
  • GPU利用可能なTensoflowのイメージを利用しても問題が再現しました。
  • GPUはGeFroce GTX 1080Ti(4枚)となります。

実行ファイル等

DockerFile

FROM nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04 RUN apt-get update && apt-get install -y wget curl sudo vim unzip git sudo RUN apt update && apt install -y software-properties-common # PPAからpython3.7インストール RUN add-apt-repository ppa:deadsnakes/ppa RUN apt update && apt install -y python3.7 # pipのインストール RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py RUN python3.7 get-pip.py RUN pip3 install -U pip # tensorflow-gpuのインストール RUN pip3 install tensorflow-gpu==2.0.0

bash

$ docker run -it --gpus all tensor_image /bin/bash

python

from tensorflow.python.client import device_lib device_lib.list_local_devices() # 2021-08-04 06:13:56.206162: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA # 2021-08-04 06:13:56.228115: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2993095000 Hz # 2021-08-04 06:13:56.239632: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x44c86a0 executing computations on platform Host. Devices: # 2021-08-04 06:13:56.239687: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Host, Default Version # 2021-08-04 06:13:56.245282: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1 # 2021-08-04 06:13:56.246894: E tensorflow/stream_executor/cuda/cuda_driver.cc:318] failed call to cuInit: CUDA_ERROR_SYSTEM_DRIVER_MISMATCH: system has unsupported display driver / cuda driver combination # 2021-08-04 06:13:56.246948: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: 89c089af9927 # 2021-08-04 06:13:56.246968: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: 89c089af9927 # 2021-08-04 06:13:56.247069: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 410.129.0 # 2021-08-04 06:13:56.247121: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 430.64.0 # 2021-08-04 06:13:56.247139: E tensorflow/stream_executor/cuda/cuda_diagnostics.cc:313] kernel version 430.64.0 does not match DSO version 410.129.0 -- cannot find working devices in this configuration # [name: "/device:CPU:0" # device_type: "CPU" # memory_limit: 268435456 # locality { # } # incarnation: 7504376849925051239 # , name: "/device:XLA_CPU:0" # device_type: "XLA_CPU" # memory_limit: 17179869184 # locality { # } # incarnation: 11837196615187333375 # physical_device_desc: "device: XLA_CPU device" # ]

コンテナ内でのライブラリパス確認

bash

$ echo $LD_LIBRARY_PATH # /usr/local/nvidia/lib:/usr/local/nvidia/lib64 ldconfig -p | grep libcuda # libcudart.so.10.0 (libc6,x86-64) => /usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudart.so.10.0 # libcuda.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcuda.so.1

バージョン等確認

bash

# ホスト $ docker —version Docker version 20.10.7, build f0df350 # ホスト $ nvidia-container-cli info NVRM version: 430.64 CUDA version: 10.1 GPU認識されているが省略 # ホスト $ ls -lh /usr/lib/x86_64-linux-gnu/libcuda.so* ls: '/usr/lib/x86_64-linux-gnu/libcuda.so*' にアクセスできません: そのようなファイルやディレクトリはありません # コンテナ $ ls -lh /usr/lib/x86_64-linux-gnu/libcuda.so* lrwxrwxrwx 1 root root 18 Aug 5 05:21 /usr/lib/x86_64-linux-gnu/libcuda.so.1 -> libcuda.so.410.129 -rw-r--r-- 1 root root 15M Aug 14 2019 /usr/lib/x86_64-linux-gnu/libcuda.so.410.129

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

lazykyama

2021/08/04 12:52

エラー中に410.129.0という番号が出ているのは、おそらく以下のissueにもある通り、`/usr/local/cuda/compat/` にあるライブラリが参照されているためではないかと思われます。 https://github.com/NVIDIA/nvidia-docker/issues/1256#issuecomment-620088349 ただなぜこれが見えてしまっているかが不明なので、お手数ですが以下の情報を追記頂けますか? * GPUの種類 (例: GeForce RTX 30xx, V100, など) * コンテナ内での `echo $LD_LIBRARY_PATH` の出力 * 同じくコンテナ内での `ldconfig -p | grep libcuda` の出力 また `docker pull tensorflow/tensorflow:2.0.0-gpu-py3` や `docker pull nvcr.io/nvidia/tensorflow:20.01-tf2-py3` などで取得できるTensorFlowのイメージでも同じエラーが出るか、というのは切り分けに役立つかもしれません。
MagMag

2021/08/05 01:24 編集

ありがとうございます。LinuxやDocker自体触り始めレベルでチンプンカンプンなので、大変助かります。コマンドの実施結果は質問文に追記しました。ただ、compatがでてこないということは、今回の件では共通ライブラリ参照の問題ではないということでしょうか? また、GPUはGeForce GTX 1080Ti(4枚搭載)となります。また、Tensorflowのイメージを使っても問題が再現したので、イメージ側の原因ではないようでした。
lazykyama

2021/08/05 03:15

追記ありがとうございます。GPUとドライバの整合性はとれていて、かつTensorFlowのビルド済みイメージでも発生しているとのことなので、おそらく認識されている通りイメージ側の問題というより、インストールされているdockerか、ホスト側の問題と思われます。 Step-by-stepでお願いして申し訳ないですが、念のため以下も確認いただけますか? * docker自体のバージョンと、nvidia-docker (ないしNVIDIA Container Toolkit) のバージョン * コンテナ内外両方の `ls -lh /usr/lib/x86_64-linux-gnu/libcuda.so*` > 古いバージョンからアップデートした とのことなので、ホスト側に余計なものが残っているのか、dockerがうまくGPU周りの処理をできていないか、という可能性を疑っています。 (調べる手間が……という場合は、ホスト側のドライバをキレイに入れ直すのがベストかもしれません)
MagMag

2021/08/05 05:26

ありがとうございます。大変助かります。情報追記いたしました。 コンテナ内でのls -lhコマンドで、410の数字が出てきたのですが、ここが主原因でしょうか? なお、GPUやドライバは違いますが、同じDockerのバージョン、同じDockerFileを別の機体で実行したら、GPUを認識しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです