GPUでTensorFlowを使用しようとしましたが、次のエラーが発生しました。
_I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K20m, pci bus id: 0000:02:00.0)
E tensorflow/stream_executor/cuda/cuda_dnn.cc:347] Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100). If using a binary install, upgrade your CuDNN library to match. If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
F tensorflow/core/kernels/conv_ops.cc:457] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms)
_
もちろん、私はこのエラーを修正しようとしています(これはすでに尋ねられていますが ロードされたランタイムCuDNNライブラリ:5005(互換性バージョン5000)がソースは5103(互換性バージョン5100)でコンパイルされました )しかし私はエラーを理解したい。私はいつも自分で問題を解決(コーディング)してから投稿(助けを求める)しようとしますが、エラーメッセージが少しわかりにくい/不明瞭に見え、見つけられないため、これを開始することさえ困難です。エラーの意味を理解するための優れたリソース。
エラーを理解するために、エラーが発生する場所と思われる行に焦点を当てました。
_Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100).
_
関連性があると思われるいくつかのgithubページを読んだ後、次のようにエラーを読む方が実際にはもっと役立つことに気付きました。
ロードされたランタイムCuDNNライブラリ:5005ですが、ソースは5103でコンパイルされました。
括弧を削除すると、CuDNNライブラリ5005(レベルで)がロードされたように見えるため、エラーが少しわかりやすくなります(ただし、デバッグを容易にするために、エラーメッセージ内の括弧の役割を理解/知りたいです) UNIX/OSの)が、TensorFlow(python用)はバージョン5103でコンパイルされたと思います。明らかに、TensorFlowライブラリが5103に準拠したAPIを使用しているが、(cuda)ディープラーニングと通信するための「実際の」APIを使用している場合ライブラリCuDNNはバージョン5005であり、問題になることは明らかです。彼らは何が起こっているのかを推測しているだけですが。
私の最初の混乱は、私が知る限り、CuDNN 5005または5103のようなものはないということです。エラーのその部分が何を意味するのかを確実に理解して、これを実際にデバッグしようとすることができるのは素晴らしいことです。 _module list
_をいつ使用するかがわかる限り、次のものを使用しています。
_cudnn/5.0
_
私の2番目の混乱は、無視した括弧とその意味です。
Loaded runtime CuDNN library: 5005 (compatibility version 5000)
but source was compiled with 5103 (compatibility version 5100)
「互換性バージョンXXXX」が何を意味するのか、正直なところわかりません。たぶん、CuDNNのバージョン5000(それが意味するものは何でも)をインストールし(CuDNNの5000バージョンがないため、まだ混乱しています)、CuDNNバージョン5100を使用するTensorFlowのバージョンを(どういうわけか)コンパイルするという提案です。
誰かがエラーが正確に何を意味するかをより正確に知っていますか(そして私がリンクした質問に対する彼らの解決策を提供させますか?)
これは、何が起こっているかについてのおおよその説明です。
cuDNNには、番号が付けられたメジャーリリースがあります。 4.0、5.0、5.1など。
これらのメジャーリリースには、APIの変更が組み込まれている場合があります。したがって、cuDNN v4(つまり、4.0)を使用するプログラムは、cuDNN v5(つまり、5.0)で動作したり、新しい機能を使用したりするために、いくつかの変更が必要になる場合があります。
メジャーリリースは、4桁のバージョン番号の最初の2桁でエンコードされます。したがって、cuDNNの4桁のバージョン番号5103は、5.1メジャーリリースに属し、サブバージョン番号が03であることを意味します。互換性の目的で、このようなリリースは他のリリースとAPI互換である必要があります。 51xxのcuDNNライブラリバージョンは、すべて5.1メジャーリリースに属しているためです(これは厳密に真のAFAIKであるとは限りませんが、一般的な考え方です)。したがって、リリース番号51xxのこれらのライブラリはいずれも、互換性バージョン 5100であり、5.1メジャーリリースに属している(互換性がある(互換性がある))ことを示します。
したがって、互換性バージョン(このライブラリと互換性のあるメジャーリリース)を参照する場合は、最初の2桁を指定するだけで済みます。5000は5.0を示し、5100は5.1を示します。ただし、リリースのサブリリースのバージョン番号がゼロ以外である可能性があります。これにはさまざまな理由が考えられます。たとえば、バグ修正リリースなどを許可するためです。
プログラム(テンソルフローなど)がcuDNNを使用するように設計されている場合、通常、特定のバージョンのcuDNNで動作するようにコード化されます。場合によっては、これはコンパイル時に特定のcuDNNバージョン(および関連するAPI、つまりテンソルフローの構築時に使用されるヘッダーファイル)に対して「コンパイル」することで処理できます。したがって、コンパイル時に、tensorflowなどのプログラムは、コンパイル対象のcuDNN APIのバージョンを判別できます。これは、4桁のバージョンです(ただし、一般的に言えば、互換性のあるバージョン、つまり4桁の最初の2桁のみです)。バージョンは本当に重要です)。
実行時に、特定のバージョンのcuDNNライブラリ(Linuxでは.soなど)がマシンのどこかにロードされています。そのライブラリのバージョンは、決定、照会、および報告できます。その実際のライブラリバージョンが(少なくとも互換性バージョンの観点から)テンソルフローがコンパイルされたcuDNNライブラリのバージョンと一致しない場合、それは物事が機能しない可能性があることを示す良い兆候であり、テンソルフローは実行中にこれを指摘します:
ロードされたランタイムCuDNNライブラリ:5005ですが、ソースは5103でコンパイルされました。
これは、「ねえ、私はcuDNN v5.1で動作するように設計(コンパイル)されましたが、動作するcuDNN5.0のみを提供している」というテンソルフローです。
サブバージョンレベルでの違いはそれほど重要ではないはずです。何をしているのかがわかっている場合は、テンソルフローがバージョン5103に対してコンパイルされていても、cuDNNランタイムバージョン5107を使用しても問題ない場合があります。これは単なる架空の例ですが、ライブラリに違いがあることを示しています。適切な機能や動作、またはAPIインターフェースを変更することを目的としています。たとえば、5103のバグ修正バージョンである可能性があります(仮想的に。これは架空の例です)。
理想的なケースでは、使用しているcuDNNのバージョンに対してテンソルフローを構築します。ただし、ビルド済みのtensorflowパッケージをダウンロードした場合は、この種のメッセージが表示されることがあります(おそらく、cuDNNを個別にダウンロードしたため)。その場合、少なくとも、使用しているcuDNNメジャーバージョンを、tensorflowが期待している互換性バージョンと一致させるように努める必要があります。この特定の例では、それを行っていません。
たぶん、「cuDNN v5.1 for CUDA 8.0/7.5」をダウンロードして、インストールすることができます。