2016-07-31 29 views
8

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.

gtx 950 timing

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.

+1

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 –

+0

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

+0

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

cevap

2

Results Mükemmel gönderi için teşekkürler.

Benzer bir sorunla karşılaşıyorum: GPU/CPU işlemi, CPU'nun TensorFlow tarafından sağlanan iki örnek için tek başına işlenmesinden daha fazla CPU ve geçen süreyi alıyor: MNIST Deep betiğinde, doğrusal regresyon kaybı modeli ve Yeni Başlayanlar için MNIST, CPU'da önemli gelişme ve GPU Profiling GPU and CPU Performance sayfa 10 kullanılırken geçen süre tartışmayı başlatır.

workload  | win 8.1 win 8.1 win8.1  win 10 win 10 win 10 
workload  | cpu only cpu  gpu  cpu only cpu  gpu  
-------------+----------------------------------------------------------- 
mnist deep | 14053  384.26 328.92  12406  289.28 211.79 
mnist deep | 14044  384.59 328.45  12736  293.71 210.48 
mnist10,000 | 24.10  45.85  7.67  26.56  44.42  7.32 
mnist10,000 | 23.94  44.98  7.56  25.80  44.24  7.32 
mnist50,000 | 95.49  198.12 38.26  109.99  197.82 36.15 
mnist50,000 | 96.07  197.86 37.91  109.46  195.39 39.44 
    lr10,000 | 6.23  15.08  1.78  7.38  16.79  1.91 
    lr10,000 | 6.33  15.23  1.78  7.44  16.59  1.91 
    lr100,000 | 48.31  124.37 17.67  62.14  148.81 19.04 
    lr100,000 | 48.97  123.35 17.63  61.40  147.69 18.72 

(Kaynak:. Profiling GPU and CPU Performance, Şekil 64 Results)

+1

Bağlantı, soruya cevap verebilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. Lütfen, kalite cevabı sağlamak için bu [nasıl yapılır] (http://stackoverflow.com/help/how-to-answer) okuyun. – thewaywewere

+0

Büyük detaylar Şekil.18 + Şekil.19 VTUNE performans noktaları lekeleniyor. Tek eksik detay, cihaz hafızasına erişmenin fiili TimeDOMAIN maliyetleridir. SMX mimarileri matematiksel olarak "yoğun" bilgisayar kernelleri üzerinde harikadır, ancak ** '__global__' belleğe erişimde çok fazla ~ 350-700 [ns] gecikme süresine sahiptir (**, DataSET'lerin ML sınıfı için kaçınılmaz bir zorunluluktur). * ... Yani ** gerçekçi TimeDOMAIN maliyetleri ** Peta-FLOPs-av mikro-benchmark ** ile kıyaslanamaz ** **, bu yüzden Product-Marketing guys & gals tarafından sevilen). Panik yapmayın, gerçek kullanım durumları bir çok sürpriz getiriyor. – user3666197