2017-10-09 2 views
1

Je veux former "standford chatbot" d'ici https://github.com/chiphuyen/stanford-tensorflow-tutorials/tree/master/assignments/chatbot sur GPU, mais il n'utilise pas mon GPU, mais toutes les bibliothèques de besoin (CuNN, CUDA, tensorflow-gpu, etc.) sont installé J'ai essayé:Tensorflow ne veut pas utiliser GPU

def train(): 
""" Train the bot """ 

test_buckets, data_buckets, train_buckets_scale = _get_buckets() 
# in train mode, we need to create the backward path, so forwrad_only is False 

model = ChatBotModel(False, config.BATCH_SIZE) 
model.build_graph() 

saver = tf.train.Saver(var_list=tf.trainable_variables()) 

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)) as sess: 
    print('Start training') 

    sess.run(tf.global_variables_initializer()) 
    _check_restore_parameters(sess, saver) 

    iteration = model.global_step.eval() 
    total_loss = 0 
    while True: 

     skip_step = _get_skip_step(iteration) 
     bucket_id = _get_random_bucket(train_buckets_scale) 
     encoder_inputs, decoder_inputs, decoder_masks = data.get_batch(data_buckets[bucket_id], 
                     bucket_id, 
                     batch_size=config.BATCH_SIZE) 
     start = time.time() 
     _, step_loss, _ = run_step(sess, model, encoder_inputs, decoder_inputs, decoder_masks, bucket_id, False) 
     total_loss += step_loss 
     iteration += 1 

     if iteration % skip_step == 0: 
      print('Итерация {}: потеря {}, время {}'.format(iteration, total_loss/skip_step, time.time() - start)) 
      start = time.time() 
      total_loss = 0 
      saver.save(sess, os.path.join(config.CPT_PATH, 'chatbot'), global_step=model.global_step) 
      if iteration % (10 * skip_step) == 0: 
       # Run evals on development set and print their loss 
       _eval_test_set(sess, model, test_buckets) 
       start = time.time() 
      sys.stdout.flush() 

Mais il montre toujours:

InvalidArgumentError (see above for traceback): Cannot assign a device to node 'save/Const': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available. 

Collocation Debug info: groupe avait les types Collocation et appareils suivants: Const: CPU identité: CPU [[Node: save/Const = Constdtype = DT_STRING, valeur = Tensor, _device = "/ périphérique: GPU: 0"]]

Y at-il un fichier de configuration pour tensorflow où je peux spécifier d'utiliser uniquement GPU ou certains une autre façon (j'ai essayé "avec tf.device ("/gpu: 0 "):" et device_count = { 'GPU': 1}))

Répondre

1

de votre erreur:

Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.

cela signifie que l'opération 'save/Const' ne peut pas être affectée de force à un GPU via with tf.device(): car il n'y a pas d'implémentation GPU pour cela. Enlevez la pièce with tf.device(): (ou mettez cette opération en dehors de cela) et laissez TF décider où placer les opérations (elle préférera de toute façon GPU sur CPU)

+0

Je l'ai fait, mais tensorflow choisit un CPU au lieu du GPU –

+0

Considérant que vous didn didn didn ne montrez pas comment votre modèle ressemble, je ne peux pas aider avec les détails de pourquoi les opérations finissent sur le CPU. Certains ops ne peuvent être que sur le CPU (comme celui qui jette votre erreur), alors que la plupart des calculs ont des implémentations CPU et GPU. À quoi ressemble la sortie si vous activez la journalisation de l'emplacement des périphériques? – GPhilo

+0

Tout ce qui est sur '/ job: localhost/replica: 0/tâche: 0/gpu: 0' est assigné (et exécuté) sur votre GPU. – GPhilo