Fix solver GPU initialization order (e.g., training with cuDNN on non-default device) #1083
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
To address #925, allowing the --gpu flag to override the
device_id
setting in the solver prototxt, patch #961 reads the --gpu flag after constructing the solver.Unfortunately, this means that nets used by the solver are constructed using the default GPU, which is unexpected and breaks cuDNN, which constructs handles in
LayerSetUp
calls. To fix this, we take care of setting mode and device (with --gpu flag overridingdevice_id
param) before the solver is constructed.In accordance with the feeling at #925, setting mode and device is completely removed from the solver code. N.B., this does change the behavior when invoking the solver without using
caffe train
. But I don't really expect this to affect anybody.