Çok büyük tekrarlayan bir ağ (örneğin, 2048x5) çalıştırmayı planlıyorum, tensorflow'da bir GPU'da bir katman tanımlamak mümkün mü? En iyi verimi elde etmek için modeli nasıl kullanmalıyım? GPU veya GPU-CPU-GPU iletişimi için genel bir yük olduğunu anlıyorum.Tensorflow'da bir ağı birden çok GPU'ya bölmek mümkün mü?
cevap
TensorFlow'da çok sayıda GPU'ya büyük bir model ayırmak kesinlikle mümkündür, ancak bunu en iyi şekilde yapmak zor bir araştırma sorusudur. Farklı GPU'ları adlandırma, bir with tf.device(...):
blokta kodunuzun
Wrap büyük bitişik bölgeler:: Genel olarak, aşağıdakileri yapmanız gerekir
with tf.device("/gpu:0"): # Define first layer. with tf.device("/gpu:1"): # Define second layer. # Define other layers, etc.
senin optimizer bina, pas
optimizer.minimize()
yönteme bağlı bir bağımsız değişkencolocate_gradients_with_ops=True
:loss = ... optimizer = tf.train.AdaGradOptimizer(0.01) train_op = optimizer.minimize(loss, colocate_gradients_with_ops=True)
için t gerekebilir (isteğe bağlı olarak).
[buradan]config = tf.ConfigProto(allow_soft_placement=True) sess = tf.Session(config=config)
Ağımı 2 GPU'da çalıştırıyorum, hem ileri hem de geri hesaplama 2 GPU'ya dağıtılıyor. Ancak birkaç saatlik eğitimden sonra GPU kullanımının gerçekten düşük olduğunu görüyorum. Kuyrukta yer alan sırayı (sıradaki # gruplar) 0 buluyorum, yani sıranın yeterince hızlı doldurulmadığı anlamına gelir. Verileri sıraya pompalamak için bir iş parçacığı kullanıyorum. Kuyruğu açık olarak tanımlamalı mıyım, CPU üzerinde işlem yapmalı mıyım? –
Evet, model eğitimimizin genel performansını artırmak için giriş boru hattını CPU'ya sabitlemeyi bulduk (aksi takdirde CPU üzerinde çalışabilen giriş boru hattının parçalarından parazit olsun). – mrry
"Giriş boru hattını CPU'ya sabitleme", biraz daha detaylandırır mısınız lütfen? – herve
(https://www.tensorflow.org: Modelinizdeki operasyonların herhangi GPU üzerinde çalışan ulaşamaması durumunda, sizin
tf.Session
oluştururken otf.ConfigProto
yılında "yumuşak yerleştirme" etkinleştirmek /versions/r0.7/how_tos/using_gpu/index.html#using_multiple_gpus) yönergelerdir. [burada] (https://www.tensorflow.org/versions/r0.7/tutorials/deep_cnn/index.html) bir örnektir. Paralel olan veriler fonksiyonel paralelden çok daha kolaydır. – fluency03tf.device() ile kullanımını anlıyorum. Ancak, farklı GPU'larda katmanları tanımladıktan sonra, gradyanların hala ilk GPU'da saklandığını görüyorum. Farklı GPU'larda gradient hesaplaması için somut bir örnek verebilir misiniz? –
Ayrıca, modelinizi oluştururken "colocate_gradients_with_ops = True" öğesini "optimizer.minimize()" yöntemine geçirmeyi deneyebilirsiniz. – mrry