/ / GPU Caffeのインストールが成功した後、CaffeをCPUのみとして実行する-docker、caffe、nvidia、nvidia-docker

GPU Caffeのインストールが成功したら、CPUのみでCaffeを実行します - docker、caffe、nvidia、nvidia-docker

cudnnサポートでコンパイルされたCaffeを使用したDockerイメージがあります。 CUDAおよび他のすべての依存関係はイメージに正しくインストールされ、使用時に正しく動作します nvidia-docker ホストマシンからドライバーを提供します。

これと同じ画像を実行したい なし を使用して nvidia-docker CaffeをCPUモードに設定するだけです。ただし、これを行うと、正しいNvidiaドライバーが「見つからない」というエラーが表示されます。cudnnサポートを使用してCaffeをビルドすると、Caffeが 要求する GPUドライバー。これは私のユースケースにとって問題です。CPUベースのイメージまたはGPUベースのイメージとして交換可能に使用できる単一のDockerイメージを提供します。

cudnn / GPUサポートを有効にしてCaffeをインストールする方法はありますか?

注:これは、GPUサポートを無効にすることに関する質問ではありません。 CPU_ONLY Caffeビルド時にフラグを立てます。むしろ、GPUを使用できるようにビルドされたCaffeを取得することですが、CPUのみでドライバー、CUDAライブラリなどを必要としない方法で実行します。 ランタイム モード。

実行時に表示されるエラーのタイプは次のとおりです。

I0523 21:09:42.175459    14 layer_factory.hpp:77] Creating layer conv1
I0523 21:09:42.175561    14 net.cpp:84] Creating Layer conv1
I0523 21:09:42.175606    14 net.cpp:406] conv1 <- data
I0523 21:09:42.175660    14 net.cpp:380] conv1 -> conv1
F0523 21:09:42.177079    14 cudnn_conv_layer.cpp:52] Check failed: error == cudaSuccess (35 vs. 0)  CUDA driver version is insufficient for CUDA runtime version
*** Check failure stack trace: ***
Aborted (core dumped)

ここでは、prototxtモデルをロードしています 呼び出し caffe.set_mode_cpu() CaffeのPythonバインディングを使用します。

CPU_ONLYモードでコンパイルすると、すべてが機能します。または、適切なドライバーをホストしているマシンで実際にnvidia-dockerで実行する場合。しかし、私は具体的には、GPUまたは必要なドライバーの依存関係を持つホストマシンと持たないホストマシン間で移植可能な単一のDockerイメージを探しています。

回答:

回答№1は0

私はあなたが単に設定することによってその選択をすることができるはずであることに同意します solver_modesolver.prototxt またはいくつかの同様の設定。ただし、それは「BVLCがCaffeを設計した方法ではありません。CUDAコードによって暗示されるGPUを利用できると仮定するコードには、他のさまざまなリンクがあります」。

解決策は、コードを掘り下げ、CUDAプレゼンスフラグへの参照を見つけ、コードを変更して「CPU_ONLY」ブランチを動的に使用することです。 CPU フラグが設定されました。


回答№2の場合は0

さらに掘り下げた後、 この参照 であることを示唆している LayerSetup 問題の原因となっている特定の畳み込み層の関数。

特に、 cudnn_conv_layer.cpp、LayerSetup実装は CUDA_CHECKおよびCUDNN_CHECK 例えばCUDAストリーム処理。

Caffeをcudnnサポート付きでコンパイルすると、CPUモードで実行しようとした場合でも、これらのチェックは失敗します。 set_mode_cpu()。への変更かどうかはわかりません CUDNN_CHECK マクロで十分、または必要な場合 まったく新しいCaffeレイヤーを書く 決定する前にランタイムモードをチェックします実行するリソースチェック。どちらの場合も現在の状況では機能しないため、CPUとGPUの機能を2つの別個のDockerfileに分割します。