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_mode
に solver.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に分割します。