2015-12-14 34 views

Trả lời

12

Bạn chính xác rằng mã cho mô hình CIFAR-10 sử dụng nhiều hàng đợi đầu vào (thông qua nhiều cuộc gọi đến cifar10.distorted_inputs() qua cifar10.tower_loss()).

Cách dễ nhất để sử dụng một hàng đợi chia sẻ giữa các GPU sẽ được thực hiện như sau:

  1. Tăng kích thước hàng loạt bởi một yếu tố của N, trong đó N là số GPU.

  2. Chuyển cuộc gọi đến cifar10.distorted_inputs() trong số cifar10.tower_loss() và bên ngoài loop over GPUs.

  3. Chia imageslabels tensors được trả về từ cifar10.distorted_inputs() dọc theo 0 (batch) Kích thước:

    images, labels = cifar10.distorted_inputs() 
    split_images = tf.split(0, FLAGS.num_gpus, images) 
    split_labels = tf.split(0, FLAGS.num_gpus, labels) 
    
  4. Sửa cifar10.tower_loss() lấy imageslabels đối số, và gọi nó như sau:

    for i in xrange(FLAGS.num_gpus): 
        with tf.device('/gpu:%d' % i): 
        with tf.name_scope('%s_%d' % (cifar10.TOWER_NAME, i)) as scope: 
    
         loss = tower_loss(scope, split_images[i], split_labels[i]) 
    
Các vấn đề liên quan