рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: рдЙрдмрдВрдЯреВ 14.04
CUDA рдФрд░ cuDNN рдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг: 7.5 рдФрд░ 4.0.7
(рдХреГрдкрдпрд╛ ls -l /path/to/cuda/lib/libcud*
рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ):
рдпрджрд┐ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ: 4a4f2461533847dde239851ecebe5056088a828c
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд▓рд╛рдПрдБ
import tensorflow as tf
def main():
a = tf.Variable(1)
init_a = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_a)
with tf.device("/gpu:0"):
b = tf.constant(2)
init_b = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_b)
with tf.device("/cpu:0"):
c = tf.Variable(2)
init_c = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_c)
with tf.device("/gpu:0"):
d = tf.Variable(2)
init_d = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_d)
if __name__ == '__main__':
main()
(рдпрджрд┐ рд▓реЙрдЧ рдмрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╕рдВрд▓рдЧреНрдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ)ред
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties:
name: GeForce GTX TITAN X
major: 5 minor: 2 memoryClockRate (GHz) 1.266
pciBusID 0000:05:00.0
Total memory: 12.00GiB
Free memory: 11.02GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 1 with properties:
name: GeForce GTX 980
major: 5 minor: 2 memoryClockRate (GHz) 1.2785
pciBusID 0000:09:00.0
Total memory: 4.00GiB
Free memory: 3.91GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:59] cannot enable peer access from device ordinal 0 to device ordinal 1
I tensorflow/core/common_runtime/gpu/gpu_init.cc:59] cannot enable peer access from device ordinal 1 to device ordinal 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 1
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y N
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 1: N Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX 980, pci bus id: 0000:09:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX 980, pci bus id: 0000:09:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX 980, pci bus id: 0000:09:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:756] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX 980, pci bus id: 0000:09:00.0)
Traceback (most recent call last):
File "test_multi_gpu.py", line 30, in <module>
main()
File "test_multi_gpu.py", line 26, in main
sess.run(init_d)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 332, in run
run_metadata_ptr)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 572, in _run
feed_dict_string, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 652, in _do_run
target_list, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 672, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'Variable_2': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available
[[Node: Variable_2 = Variable[container="", dtype=DT_INT32, shape=[], shared_name="", _device="/device:GPU:0"]()]]
Caused by op u'Variable_2', defined at:
File "test_multi_gpu.py", line 30, in <module>
main()
File "test_multi_gpu.py", line 23, in main
d = tf.Variable(2)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.py", line 211, in __init__
dtype=dtype)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.py", line 292, in _init_from_args
name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/state_ops.py", line 139, in variable_op
container=container, shared_name=shared_name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_state_ops.py", line 351, in _variable
name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 693, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2177, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1161, in __init__
self._traceback = _extract_stack()
рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ tf.Variable рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ tf.constant рдФрд░ tf.matmul рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдореБрдЭреЗ [рдХрдиреНрд╡реЗрдВрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕] (https://www.tensorflow.org/versions/r0.8/tutorials/deep_cnn/index.html)
рдЙрд▓реНрд▓реЗрдЦ:
All variables are pinned to the CPU and accessed via tf.get_variable() in order to share them in a multi-GPU version. See how-to on Sharing Variables.
рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЪреВрдВрдХрд┐ tf.Variables рдХреЛ tensorflow рджреНрд╡рд╛рд░рд╛ CPU рдореЗрдВ рдкрд┐рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣рдореЗрдВ with tf.device('/gpu:xx')
рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ tf.Variable рдШреЛрд╖рдгрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП netsted with tf.device(None)
рдХрд░реЗрдВ?
рддреЛ, рдХреБрдЫ рдСрдкреНрд╕ рд╣реИрдВ рдЬреЛ tf.device() рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ tf.nn.local_response_normalization(),
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:
with tf.device("/gpu:0"):
d = tf.placeholder("float", shape=[100, 100, 100, 10])
with tf.device(None):
lrn1 = tf.nn.local_response_normalization(d, depth_radius=5, bias=1.0, alpha=1e-4, beta=0.75)
lrn2 = tf.nn.local_response_normalization(d, depth_radius=5, bias=1.0, alpha=1e-4, beta=0.75)
init_d = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_d)
r = np.random.randn(100, 100, 100, 10)
sess.run(lrn1, feed_dict={d: r}) #Run ok
sess.run(lrn2, feed_dict={d: r}) # Error
рдЖрдЙрдЯрдкреБрдЯ рдиреАрдЪреЗ рд╣реИ:
Traceback (most recent call last):
File "test_multi_gpu.py", line 44, in <module>
main()
File "test_multi_gpu.py", line 40, in main
sess.run(lrn2, feed_dict={d: r})
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 332, in run
run_metadata_ptr)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 572, in _run
feed_dict_string, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 652, in _do_run
target_list, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 672, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'LRN_1': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available
[[Node: LRN_1 = LRN[alpha=0.0001, beta=0.75, bias=1, depth_radius=5, _device="/device:GPU:0"](Placeholder)]]
Caused by op u'LRN_1', defined at:
File "test_multi_gpu.py", line 44, in <module>
main()
File "test_multi_gpu.py", line 34, in main
lrn2 = tf.nn.local_response_normalization(d, depth_radius=5, bias=1.0, alpha=1e-4, beta=0.75)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_nn_ops.py", line 737, in lrn
bias=bias, alpha=alpha, beta=beta, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 693, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2177, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1161, in __init__
self._traceback = _extract_stack()
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред tf.nn.local_response_normalization
рдореЗрдВ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ tf.Variable рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдЪрд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ gpu рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдиреЛрдб рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рджреЛ рдХрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
tf.device(None)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП @vrv рдХреЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ( tf.Variable
рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ tf.device()
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред) рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рдЕрдкрдиреЗ рд╕рддреНрд░ рдореЗрдВ рд╕реЙрдлреНрдЯ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдирд┐рд░реНрдорд╛рддрд╛:
config = tf.ConfigProto(allow_soft_placement=True)
with tf.Session(config=config) as sess:
# ...
рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ allow_soft_placement=True
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ #2292 рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП @vrv рдХреЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред (
tf.Variable
рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛tf.device()
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред) рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рдЕрдкрдиреЗ рд╕рддреНрд░ рдореЗрдВ рд╕реЙрдлреНрдЯ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдирд┐рд░реНрдорд╛рддрд╛: