2015-11-10 8 views
13

मैं https://github.com/tensorflow/tensorflow/tree/master/tensorflow/g3doc/tutorials/word2vec पर शब्द उदाहरण कोड को एम्बेड चलाने के लिए कोशिश कर रहा हूँ के साथ tensorflow ट्यूटोरियल में उदाहरण embedding शब्द को चलाने के लिए (Ubuntu 14.04 के तहत tensorflow के GPU संस्करण के साथ स्थापित), लेकिन यह निम्न त्रुटि संदेश देता है:विफल GPUs

Found and verified text8.zip 
Data size 17005207 
Most common words (+UNK) [['UNK', 418391], ('the', 1061396), ('of', 593677), ('and', 416629), ('one', 411764)] 
Sample data [5239, 3084, 12, 6, 195, 2, 3137, 46, 59, 156] 
3084 -> 12 
originated -> as 
3084 -> 5239 
originated -> anarchism 
12 -> 3084 
as -> originated 
12 -> 6 
as -> a 
6 -> 12 
a -> as 
6 -> 195 
a -> term 
195 -> 6 
term -> a 
195 -> 2 
term -> of 
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 12 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 0 with properties: 
name: GeForce GTX TITAN X 
major: 5 minor: 2 memoryClockRate (GHz) 1.076 
pciBusID 0000:03:00.0 
Total memory: 12.00GiB 
Free memory: 443.32MiB 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 1 with properties: 
name: GeForce GTX TITAN X 
major: 5 minor: 2 memoryClockRate (GHz) 1.076 
pciBusID 0000:05:00.0 
Total memory: 12.00GiB 
Free memory: 451.61MiB 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 0 1 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 0: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 1: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:03:00.0) 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0) 
I tensorflow/core/common_runtime/gpu/gpu_region_allocator.cc:47] Setting region size to 254881792 
I tensorflow/core/common_runtime/gpu/gpu_region_allocator.cc:47] Setting region size to 263835648 
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 12 
Initialized 
Traceback (most recent call last): 
    File "word2vec_basic.py", line 171, in <module> 
    _, loss_val = session.run([optimizer, loss], feed_dict=feed_dict) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 345, in run 
    results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 419, in _do_run 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'GradientDescent/update_Variable_2/ScatterSub': Could not satisfy explicit device specification '' because the node was colocated with a group of nodes that required incompatible device '/job:localhost/replica:0/task:0/GPU:0' 
    [[Node: GradientDescent/update_Variable_2/ScatterSub = ScatterSub[T=DT_FLOAT, Tindices=DT_INT64, use_locking=false](Variable_2, gradients/concat_1, GradientDescent/update_Variable_2/mul)]] 
Caused by op u'GradientDescent/update_Variable_2/ScatterSub', defined at: 
    File "word2vec_basic.py", line 145, in <module> 
    optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 167, in minimize 
    name=name) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 256, in apply_gradients 
    update_ops.append(self._apply_sparse(grad, var)) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/training/gradient_descent.py", line 40, in _apply_sparse 
    return var.scatter_sub(delta, use_locking=self._use_locking) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 324, in scatter_sub 
    use_locking=use_locking) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/gen_state_ops.py", line 227, in scatter_sub 
    name=name) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 633, in apply_op 
    op_def=op_def) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1710, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/home/chentingpc/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 988, in __init__ 
    self._traceback = _extract_stack() 

जब मैं सीपीयू संस्करण tensorflow में कोड चलाता हूं, यह ठीक काम करता है। लेकिन जीपीयू संस्करण के लिए नहीं। मैंने GPU के बजाय CUP का उपयोग करके इसे मजबूर करने के लिए tf.device ('/ cpu: 0') का उपयोग करने का प्रयास किया, लेकिन यह एक ही आउटपुट उत्पन्न करता है।

क्या इस उदाहरण में कोई फ़ंक्शन GPUs में नहीं चलाया जा सकता है? और tf.device ('/ cpu: 0') काम नहीं कर रहा है, क्योंकि मैं tensorflow के सीपीयू संस्करण को पुनर्स्थापित किए बिना सीपीयू पर कैसे स्विच करूं?

उत्तर

15

ऐसा लगता है कि इस उदाहरण में उपयोग किए जाने वाले संचालन का एक पूरा समूह जीपीयू पर समर्थित नहीं है। एक त्वरित कामकाज ऑपरेशन को सीमित करना है जैसे जीपीयू पर केवल मैट्रिक्स मल्स चलाए जाते हैं।

वहाँ डॉक्स में एक उदाहरण है: http://tensorflow.org/api_docs/python/framework.md

tf.Graph.device (device_name_or_function) से संबंधित अनुभाग देखें

मैं इसे निम्नलिखित के साथ काम कर प्राप्त करने में सक्षम था:

def device_for_node(n): 
    if n.type == "MatMul": 
    return "/gpu:0" 
    else: 
    return "/cpu:0" 

with graph.as_default(): 
    with graph.device(device_for_node): 
    ... 
+0

मैं देखता हूं। धन्यवाद! एक और सवाल यह है कि क्या मैं इस उदाहरण में प्रशिक्षण के लिए एकाधिक सीपीयू/धागे का उपयोग कर सकता हूं? यहां तक ​​कि यदि मैं इसे CPUs का उपयोग करके निर्दिष्ट करता हूं, तो लॉगिंग जानकारी अभी भी कोई जानकारी नहीं दिखा रही है। इस्तेमाल किए गए सीपीयू/धागे के बारे में? – chentingpc

4
  • scatter_sub केवल वर्तमान रिलीज में सीपीयू पर समर्थित है।
  • मुझे उम्मीद है कि Ln119 पर जोड़ना: tf.device ("/ cpu: 0") के साथ cpus का उपयोग करने के लिए सबकुछ मजबूर होना चाहिए। आपने tf.device का उपयोग कैसे किया?
+0

हाँ , यह ln119 में tf.device जोड़ने के लिए काम करता है, मैंने मूल रूप से इसे सत्र की शुरुआत में Ln159 में जोड़ा। लेकिन यहां तक ​​कि मैंने इसे सीपीयू का उपयोग करके मजबूर कर दिया, फिर भी यह सीपीयू की जानकारी नहीं दिखाया, और कितने सीपीयू कोर/धागे इसका उपयोग कर सकते हैं? – chentingpc

+0

local_device.cc:25] स्थानीय डिवाइस इंट्रा ऑप समांतरता धागे: 12 local_session.cc:45] स्थानीय सत्र इंटर समांतर समांतरता धागे: 12 दिखाता है कि टीएफ का पता चलता है कि आपके पास 12 सीपीयू है 'और यह इन समेकन का लाभ उठा सकता है (ढीली बोलने वाला)। उपलब्ध वास्तविक सहमति टीएफ कार्यक्रम सेटअप पर निर्भर करती है। आप सत्र विकल्प के माध्यम से एक्स संख्या के धागे का उपयोग करने के लिए टीएफ को बता सकते हैं। साथ ही, यदि आप word2vec_optimized चलाते हैं, तो आपको सभी CPUs व्यस्त होने की उम्मीद करनी चाहिए। – zfc

+0

तो मूल संस्करण के साथ, यह जितना धागा कर सकता है (जो लगभग तीन या चार धागे मुझे याद कर सकता है) का उपयोग किया है? अधिक सीपीयू समांतरता का उपयोग करने के लिए, कोई स्वचालित तरीका नहीं है लेकिन इसे सही तरीके से तैयार करना है? – chentingpc

संबंधित मुद्दे