Bu sorun ilk olarak Github #3320 adresinde yayınlanmıştır. O iş parçacığı ve hantal olan orijinal sorun hakkında daha fazla ayrıntı olduğu için orada başlamak iyi olurdu, bu yüzden StackOverflow'a yeniden göndermek istemiyorum. Sorunun özeti, GPU kullanılırken, TensorFlow Grafiğini işlemek için CPU'dan daha yavaştır. CPU/GPU Zaman Çizelgeleri (hata ayıklama) değerlendirme için dahil edilmiştir. Yorumlardan biri, tartışmak için bir oyuncak örneği talebiyle Grafik işleminin hızlandırılmasını optimize etmekle ilgilidir. "Orijinal Çözüm", yavaş performans gösteren ve topluluk tartışması ve değerlendirmesi için birkaç Yayınlanmış Kod oluşturduğum takviye öğrenme kodumdur.TensorFlow: Grafik Optimizasyonu (GPU - CPU Performansı)
Herhangi bir gözden geçirmeyi hızlandırmak için, test komut dosyalarının yanı sıra bazı ham veri, Trace Files & TensorBoard günlük dosyalarını ekledim. CPUvsGPU testing.zip
Bu konu tüm Tensorflow kullanıcılarına fayda sağlayacağından, tartışma StackOverflow öğesine taşındı. Keşfetmeyi umduğum şey, yayınlanan grafiğin performansını optimize etmenin yolları. GPU ve CPU'nun sorunu, daha verimli bir TensorFlow Grafiği ile çözülebileceği için ayrılabilir.
Yaptığım şey, Orijinal Çözümünü almak ve "Oyun Ortamı" nı çıkarmaktı. Onu rastgele veri üretimi ile değiştirdim. Bu Oyun Ortamında, TensorFlow Grafiğinin yaratılması/değiştirilmesi yoktur. Yapı nivwusquorum's Github Reinforcement Learning Example'u takip eder/kullanır.
7/15/2016 tarihinde Tensorflow'a gitmek için bir "git çekme" yaptım. Grafiği GPU’nun etkin ve etkin olmadığı zamanlarda çalıştırdım ve zamanları kaydettim (ekli tabloya bakınız). Beklenmeyen sonuç, GPU'nun CPU'dan daha iyi performans göstermesidir (bu, karşılanmayan ilk beklentidir). Bu nedenle, destekleyici kitaplıklara sahip olan "cpuvsgpu.py" kodu GPU ile daha iyi performans gösterir. Bu yüzden dikkatimi, Orijinal Çözümüm ve yayınlanan kodum arasındaki farklı olabilir. Ayrıca, 7/17/2016 tarihini de güncelliyorum. Orijinal Çözümü'daki CPU & GPU arasındaki genel fark, bir şeyden daha yakındır ve 47s CPU ve 71s GPU'yu görüyorum. Yeni Traces'e ilk izlememe hızlı bir bakış, "özetlerin" değişmiş gibi görünse de, başka gelişmeler de olabilir.
daha iyi Orijinal Çözüm nasıl işlediğini yansıtmak için 2 diğer kombinasyonlar denedik. Bunlar ağır CPU yükü altındaydı (~% 60 -% 70) ve bu betiğin eşzamanlı çalıştırılmasıyla simüle edildi. Diğer varyasyon, "Veri IO" nu arttırmaktı, Orijinal Çözüm, eğitim için gözlemleri rasgele seçecek gözlem listelerini kullanmasıydı. Bu liste sabit bir üst sınıra sahiptir ve yeni eklerken listedeki ilk öğeyi silmeye başlar. Belki bunlardan birinin GPU'ya veri akışını yavaşlattığını düşündüm. Ne yazık ki, bu sürümlerin hiçbiri CPU'nun GPU'dan daha iyi performans göstermesine neden olmadı. Ayrıca, büyük bir matris çarpımı yapan, görev boyutuyla zamanlama farklılıkları için bir fikir edinen ve beklendiği gibi olan hızlı bir GPUTESTER uygulaması çalıştırdım.Bu grafiği nasıl geliştireceğimi ve küçük OPS sayısını nasıl azaltacağını bilmek isterim. Performansın çoğunun nereye gideceği gibi görünüyor. Küçük ops'ları grafiğin mantığını (fonksiyonunu) etkilemeden daha büyük olanlara birleştirmek için herhangi bir hileyi öğrenmek güzel olurdu.
7k için GPU performansı karşılaştırma yapan x 7k matmul burada yanlış metrik olabilir
İşte sayılardır. IE, en yavaş işleminizin <1ms olduğunu görüyorum, bu da veri boyutlarınızın küçük olduğu anlamına geliyor. Bu nedenle, GPU'yu küçük veri boyutlarında CPU ve GPU'ya göre kıyaslayabilmeniz için ne kadar kazanç (veya kayıp) elde edeceğinizi anlayabilirsiniz. GPU –
7K x 7K veri kümesinin temel amacım, GPU'nun gerçekten çalıştığından emin olmaktı. Yani büyük görevlerde GPU iyidir. Bu, GPU'nun orijinal sayısının GPU'nun düzgün bir şekilde yüklendiğinden ve CUDA'nın derlendiği CPU'dan daha yavaş olduğuna dair bir kanıttı. – mazecreator
Daha sonra, ağlar 200 x 189'luk bir Batch'i her katman arasında Dropout() ile 5 katmana dönüştürür. Katmanlar, çıktı olarak 140, 120, 100, 80 ve 3'tür. – mazecreator