Doğal Dil İşlemede 2 Kat Eğitim Hızlandırması için Paketlenmiş BERT Tanıtımı

Kaynak Düğüm: 1062065

Doğal Dil İşlemede 2 Kat Eğitim Hızlandırması için Paketlenmiş BERT Tanıtımı

Etiketler: Bert, NLP, Python, Eğitim

Daha verimli eğitim için bu yeni BERT paketleme algoritmasına göz atın.


By Mario Michael Krell, Graphcore &'da Ana Makine Öğrenimi Lideri Matej Kösek, Graphcore'da Yapay Zeka Uygulamaları Uzmanı


Başlık görüntü
Yazara göre resim.

 

Yeni bir paketleme algoritması kullanarak, BERT-Large eğitimi sırasında Doğal Dil İşlemeyi 2 kattan fazla hızlandırdık. Yeni paketleme tekniğimiz dolguyu ortadan kaldırarak önemli ölçüde daha verimli hesaplama sağlar.

Bunun farklı endüstrilerde ve uygulamalarda çok daha geniş bir etki yaratmak için genomik ve protein katlama modellerine ve çarpık uzunluk dağılımlarına sahip diğer modellere de uygulanabileceğinden şüpheleniyoruz.

Graphcore'un son derece verimli Negatif Olmayan En Küçük Kareler Histogram Paketleme algoritmasını (veya NNLSHP) ve paketlenmiş dizilere uygulanan BERT algoritmamızı yeni bir makalede sunduk [1].

Dizi dolgusu nedeniyle NLP'de Hesaplamalı Atık

 
 
Son çalışmalarımız üzerinde çalışırken BERT eğitimini optimize etmenin yeni yollarını araştırmaya başladık. MLPerf™ için kıyaslama gönderimleri. Amaç, gerçek dünya uygulamalarında kolayca benimsenebilecek faydalı optimizasyonlar geliştirmekti. BERT, endüstride ve birçok müşterimiz tarafından yaygın olarak kullanıldığından, bu optimizasyonlar için odaklanılacak modellerden biri olarak doğal bir seçimdi.

Wikipedia veri kümesini kullanan kendi BERT-Large eğitim uygulamamızda, veri kümesindeki belirteçlerin %50'sinin dolgu olduğunu ve bunun sonucunda çok fazla işlem israfına neden olduğunu öğrenmek bizi gerçekten şaşırttı.

Hepsini eşit uzunlukta hizalamak için doldurma dizileri, GPU'larda kullanılan yaygın bir yaklaşımdır, ancak farklı bir yaklaşım denemeye değer olacağını düşündük.

Diziler, iki nedenden dolayı büyük bir uzunluk varyasyonuna sahiptir:

  1. Altta yatan Wikipedia verileri, belge uzunluğunda büyük bir değişiklik gösteriyor
  2. BERT ön işlemesinin kendisi, bir eğitim dizisi oluşturmak için birleştirilen ayıklanan belgelerin boyutunu rasgele azaltır

Uzunluğu maksimum 512 uzunluğa kadar doldurmak, tüm jetonların %50'sinin dolgu jetonları olmasına neden olur. Doldurmanın %50'sinin gerçek verilerle değiştirilmesi, aynı hesaplama çabasıyla %50 daha fazla verinin işlenmesine ve dolayısıyla optimum koşullar altında 2 kat hız artışına neden olabilir.



Şekil 1: Wikipedia veri kümesi dağılımları. Yazara göre resim.

 

Bu Wikipedia'ya özel mi? Numara.

Peki, o zaman dile özgü mü? Numara.

Aslında, çarpık uzunluk dağılımları her yerde bulunur: dilde, genomikte ve protein katlanmasında. Şekil 2 ve 3, SQuAD 1.1 veri kümesi ve GLUE veri kümeleri için dağılımları göstermektedir.



Şekil 2: SQuAD 1.1 BERT maksimum 384 dizi uzunluğu için eğitim öncesi veri kümesi dizi uzunluğu histogramı. Yazara göre resim.

 


Şekil 3: 128 maksimum dizi uzunluğu için GLUE veri kümesi dizi uzunluğu histogramları. Yazara göre resim.

 

Hesaplama israfından kaçınırken farklı uzunlukları nasıl ele alabiliriz?

Mevcut yaklaşımlar, farklı uzunluklar için farklı hesaplama çekirdekleri veya mühendisin dolguyu programlı olarak kaldırması ve ardından her bir dikkat bloğu ve kayıp hesaplaması için tekrar tekrar eklemesi gerektirir. Kodu şişirerek ve daha karmaşık hale getirerek hesaplamayı kaydetmek çekici değildi, bu yüzden daha iyi bir şey aradık. Birden fazla diziyi maksimum uzunlukta bir pakette bir araya getirip hepsini birlikte işleyemez miyiz? Anlaşılan, yapabiliriz!

Bu yaklaşım üç temel bileşen gerektirir:

  1. Mümkün olduğunca az dolguya sahip olmak için hangi örneklerin bir araya getirileceğine karar vermek için etkili bir algoritma
  2. BERT modelini diziler yerine paketleri işlemek için ayarlama
  3. Ve hiperparametreleri ayarlama

Paketleme

 
 
İlk başta, Wikipedia gibi büyük bir veri kümesini çok verimli bir şekilde paketlemeniz pek olası görünmüyordu. Bu sorun genellikle çöp kutusu paketleme olarak bilinir. Paketleme üç veya daha az diziyle sınırlı olduğunda bile, ortaya çıkan sorun, etkili bir algoritmik çözümden yoksun olarak, yine de güçlü bir şekilde NP-tamamlanmış olacaktır. Mevcut buluşsal paketleme algoritmaları umut verici değildi çünkü en azından karmaşıklık derecesine sahiptiler. O(n günlüğü(n)), nerede n dizilerin sayısıdır (Wikipedia için ~16M). Milyonlarca diziye iyi ölçeklenecek yaklaşımlarla ilgilendik.

İki numara, karmaşıklığı büyük ölçüde azaltmamıza yardımcı oldu:

  1. Bir paketteki dizi sayısını üç ile sınırlamak (ilk çözüm yaklaşımımız için)
  2. Oluşan her uzunluk için bir kutu ile yalnızca dizi uzunluğunun histogramında çalışma

Maksimum dizi uzunluğumuz 512 idi. Bu nedenle, histograma geçmek, boyut ve karmaşıklığı 16 milyon diziden 512 uzunluk sayımına indirdi. Bir pakette maksimum üç diziye izin vermek, izin verilen uzunluk kombinasyonlarının sayısını 22K'ya düşürdü. Bu, dizilerin pakette uzunluklarına göre sıralanmasını gerektiren hileyi zaten içeriyordu. Öyleyse neden 4 dizi denemiyorsunuz? Bu, kombinasyon sayısını 22K'dan 940K'ya çıkardı, bu da ilk modelleme yaklaşımımız için çok fazlaydı. Ek olarak, derinlik 3 zaten oldukça yüksek paketleme verimliliğine ulaştı.

Başlangıçta, bir pakette üçten fazla dizi kullanmanın hesaplama yükünü artıracağını ve eğitim sırasında yakınsama davranışını etkileyeceğini düşündük. Ancak çıkarım gibi daha da hızlı, gerçek zamanlı paketleme gerektiren uygulamaları desteklemek için yüksek verimli Negatif Olmayan En Küçük Kareler Histogram Paketleme (NNLSHP) algoritmasını geliştirdik.

Negatif Olmayan En Küçük Kareler Histogram Paketleme (NNLSHP)

 
 
Bin paketleme oldukça sık bir matematiksel optimizasyon problemi olarak formüle edilir. Ancak, 16 milyon (veya daha fazla) diziyle bu pratik değildir. Sorun değişkenleri tek başına çoğu makinenin belleğini aşabilir. Histogram tabanlı bir yaklaşım için matematiksel program oldukça düzenlidir. Basit olması için en küçük kareler yaklaşımına karar verdik (balta=b) histogram vektörü ile b. Strateji vektörünü isteyerek genişlettik x negatif olmamak ve küçük dolguya izin vermek için ağırlık eklemek.

İşin zor yanı strateji matrisiydi. Her sütunun maksimum toplamı üçtür ve istenen toplam uzunluğa tam olarak uyması için hangi dizilerin bir araya getirildiğini kodlar; Bizim durumumuzda 512. Satırlar, toplam uzunluk kadar bir uzunluğa ulaşmak için potansiyel kombinasyonların her birini kodlar. strateji vektörü x 20k kombinasyonlarından hangisini ne sıklıkla seçtiğimizi açıklayan aradığımız şey buydu. İlginç bir şekilde, sonunda sadece yaklaşık 600 kombinasyon seçildi. Kesin bir çözüm elde etmek için strateji önemlidir x pozitif tamsayılar olması gerekirdi, ancak sadece negatif olmayan yaklaşık yuvarlak bir çözümün olduğunu fark ettik. x yeterliydi. Yaklaşık bir çözüm için, 30 saniye içinde sonuç almak için kullanıma hazır basit bir çözücü kullanılabilir.



Şekil 4: Sıra uzunluğu 8 ve paketleme derinliği 3 için bir strateji matrisi örneği. Satırlar, birlikte paketlenen 1-8 uzunluğundaki dizileri ve sütunlar, belirli bir sıralama olmaksızın bir paketteki tüm olası uzunluk kombinasyonlarını gösterir. Yazara göre resim.

 

Sonunda, bir strateji atanmamış ancak minimum düzeyde olan bazı örnekleri düzeltmemiz gerekti. Ayrıca, her dizinin potansiyel olarak dolgu ile paketlenmesini ve dolguya bağlı bir ağırlığa sahip olmasını zorlayan bir değişken çözücü geliştirdik. Çok daha uzun sürdü ve çözüm çok daha iyi değildi.

En Kısa Paket-İlk Histogram Paketleme

 
 
NNLSHP bizim için yeterli bir paketleme yaklaşımı sağladı. Bununla birlikte, teorik olarak daha hızlı çevrimiçi yetenekli bir yaklaşım elde edip, yalnızca 3 diziyi bir araya getirme sınırlamasını kaldırabilir miyiz diye merak ediyorduk.

Bu nedenle, mevcut paketleme algoritmalarından biraz ilham aldık ancak yine de histogramlara odaklandık.

İlk algoritmamız olan En kısa paket ilk histogram paketleme (SPFHP) için dört bileşen vardır:

  1. En uzun dizilerden en kısa dizilere kadar histogram sayımları üzerinde çalışın
  2. Mevcut dizi uzunluğu herhangi bir pakete uymuyorsa, yeni bir paket seti başlatın
  3. Birden fazla uyum varsa, dizi uzunluğunun toplamının en kısa olduğu paketi alın ve sayıları sırasıyla değiştirin.
  4. Kalan sayıların uygun olup olmadığını tekrar kontrol edin

Bu yaklaşım, uygulanması en kolay olanıydı ve yalnızca 0.02 saniye sürdü.

Bir değişken, daha mükemmel uyumlar elde etmek için en kısa ve bölünmüş sayımlar yerine en büyük dizi uzunluğunun toplamını almaktı. Genel olarak, bu verimliliği fazla değiştirmedi, ancak kod karmaşıklığını çok artırdı.



En kısa paket ilk histogram paketleme nasıl çalışır? Yazara göre animasyon.

 

Wikipedia, SQuAD 1.1, GLUE paketleme sonuçları

 
 
Tablo 1, 2 ve 3, önerilen iki algoritmamızın paketleme sonuçlarını göstermektedir. Paketleme derinliği maksimum paketlenmiş dizi sayısını tanımlar. Paketleme derinliği 1, temel BERT uygulamasıdır. Herhangi bir sınır belirlenmediğinde oluşan maksimum paketleme derinliği, ek bir "maks" ile belirtilir. NS paket sayısı yeni paketlenmiş veri kümesinin uzunluğunu tanımlar. verim paketlenmiş veri kümesindeki gerçek belirteçlerin yüzdesidir. NS paketleme faktörü paketleme derinliği 1 ile karşılaştırıldığında ortaya çıkan potansiyel hızlanmayı açıklar.

Dört ana gözlemimiz oldu:

  1. Bir dağıtım ne kadar çarpıksa, paketlemenin faydaları o kadar yüksek olur.
  2. Tüm veri kümeleri paketlemeden yararlanır. Hatta bazıları 2 kattan fazla.
  3. SPFHP, paketleme derinliği sınırlı olmadığında daha verimli hale gelir.
  4. En fazla 3 paketlenmiş dizi için, NNLSHP ne kadar karmaşıksa, o kadar verimlidir (99.75'e karşı 89.44).



Tablo 1: Wikipedia'da önerilen paketleme algoritmalarının (SPFHP ve NNLSHP) temel performans sonuçları. Yazara göre resim.

 


Tablo 2: SQUaD 1.1 BERT ön eğitimi için önerilen paketleme algoritmalarının performans sonuçları. Yazara göre resim.

 


Tablo 3: GLUE veri kümesi için önerilen paketleme algoritmalarının performans sonuçları. Paketleme derinliğini sınırlamadan yalnızca temel ve SPFHP paketleme sonuçları görüntülenir. Yazara göre resim.

 

BERT işleme ayarı

 
 
BERT mimarisiyle ilgili ilginç bir şey, çoğu işlemin bir jeton düzeyinde gerçekleşmesidir, bu da paketlememizi engellemediği anlamına gelir. Ayarlanması gereken yalnızca dört bileşen vardır: dikkat maskesi, MLM kaybı, NSP kaybı ve doğruluk.

Farklı sayıda diziyi işlemeye yönelik dört yaklaşımın tümü için anahtar, vektörleştirme ve birleştirilebilecek maksimum sayıda dizi kullanmaktı. Dikkat için, dolguyu ele almak için zaten bir maskemiz vardı. Bunu birden çok diziye genişletmek, aşağıdaki TensorFlow sözde kodunda görülebileceği gibi basitti. Konsept, dikkatin ayrı dizilerle sınırlı olduğundan ve bunun ötesine geçemeyeceğinden emin olmamızdır.

Dikkat maskesi kod örneği.


 


Şekil 5: Örnek sıfır bir maske

 

Kayıp hesaplaması için, prensipte dizileri açarız ve ayrı kayıpları hesaplarız, sonunda dizilerdeki (paketler yerine) kayıpların ortalamasını elde ederiz.

MLM kaybı için kod şöyle görünür:

Kayıp hesaplama kodu örneği.


 

NSP kaybı ve doğruluğu için prensip aynıdır. Genel örneklerimizde, ilgili kodu kurum içi uygulamamızda bulabilirsiniz. PopART çerçevesi.

Wikipedia ek yükü ve hızlandırma tahmini

 
 
BERT modifikasyonumuzla birlikte iki sorumuz vardı:

  1. Yanında ne kadar ek yük getiriyor?
  2. Genel gider, bir pakette bir araya getirilen maksimum dizi sayısına ne kadar bağlıdır?

BERT'de veri hazırlama zahmetli olabileceğinden, bir kısayol kullandık ve kodu birden çok farklı paketleme derinliği için derledik ve ilgili (ölçülen) döngüleri karşılaştırdık. Sonuçlar Tablo 4'te gösterilmektedir. havai, paketlemeyi etkinleştirmek için modelde yapılan değişikliklerden (dikkat için maskeleme şeması ve değişen kayıp hesaplaması gibi) kaynaklanan verimdeki yüzde azalmayı belirtiriz. NS gerçekleştirilmiş hızlanma paketleme nedeniyle hızlanmanın birleşimidir ( paketleme faktörü) ve verimdeki azalma nedeniyle havai.



Tablo 4: Wikipedia'da önerilen paketleme algoritmalarının (SPFHP ve NNLSHP) tahmini hızlanma karşılaştırması. Yazara göre resim.

 

Vektörleştirme tekniği sayesinde, ek yük şaşırtıcı derecede küçüktür ve birçok diziyi bir araya getirmenin hiçbir dezavantajı yoktur.

Hiperparametre ayarlamaları

 
 
Paketleme ile etkin parti boyutunu (ortalama olarak) ikiye katlıyoruz. Bu, eğitim hiperparametrelerini ayarlamamız gerektiği anlamına gelir. Basit bir hile, eğitimden önce olduğu gibi aynı etkin ortalama parti boyutunu korumak için gradyan birikim sayısını yarıya indirmektir. Önceden eğitilmiş kontrol noktalarına sahip bir kıyaslama ayarı kullanarak, doğruluk eğrilerinin mükemmel bir şekilde eşleştiğini görebiliriz.



Şekil 6: Paketlenmiş ve paketlenmemiş işleme için öğrenme eğrilerinin karşılaştırması azaltılmış parti boyutu paketlenmiş yaklaşım için. Yazara göre resimler.

 

Doğruluk eşleşiyor: MLM eğitim kaybı başlangıçta biraz farklı olabilir, ancak hızla yetişir. Bu ilk fark, önceki eğitimde kısa dizilere doğru önyargılı olabilecek dikkat katmanlarının küçük ayarlarından kaynaklanabilir.

Yavaşlamayı önlemek için bazen orijinal parti boyutunu aynı tutmak ve hiperparametreleri artan etkin parti boyutuna (iki katına) ayarlamak yardımcı olur. Dikkate alınması gereken ana hiperparametreler, beta parametreleri ve öğrenme oranlarıdır. Yaygın bir yaklaşım, bizim durumumuzda performansı düşüren parti boyutunu ikiye katlamaktır. LAMB optimize edicinin istatistiklerine bakarak, beta parametresini paketleme faktörünün gücüne yükseltmenin, momentum ve hızı karşılaştırılabilir tutmak için art arda birden fazla partiyi eğitmeye karşılık geldiğini kanıtlayabiliriz.



Şekil 7: Paketlenmiş ve paketlenmemiş işleme için öğrenme eğrilerinin karşılaştırması sezgiselleri uygulamalı. Yazara göre resimler.

 

Deneylerimiz, ikinin gücüne beta almanın iyi bir buluşsal yöntem olduğunu gösterdi. Bu senaryoda, parti boyutunun arttırılması genellikle numuneler/dönemler anlamında yakınsama hızını bir hedef doğruluğa ulaşılana kadar azalttığı için eğrilerin eşleşmesi beklenmez.

Şimdi soru şu ki, pratik senaryoda, gerçekten beklenen hızlanmayı alıyor muyuz?



Şekil 8: Paketlenmiş ve paketlenmemiş işleme için öğrenme eğrilerinin karşılaştırması optimize edilmiş kurulum. Yazara göre resimler.

 

Evet yaparız! Veri aktarımını sıkıştırdığımız için ek bir hız kazandık.

Sonuç

 
 
Cümleleri birlikte paketlemek, hesaplama çabasından ve çevreden tasarruf sağlayabilir. Bu teknik, PyTorch ve TensorFlow dahil olmak üzere herhangi bir çerçevede uygulanabilir. Net bir 2 kat hızlanma elde ettik ve bu arada paketleme algoritmalarındaki son teknolojiyi geliştirdik.

Merak ettiğimiz diğer uygulamalar ise benzer veri dağılımlarının gözlemlenebildiği genomik ve protein katlanmasıdır. Görüntü dönüştürücüler, farklı boyutta paketlenmiş görüntüleri uygulamak için de ilginç bir alan olabilir. Hangi uygulamaların işe yarayacağını düşünüyorsunuz? Sizden haber almak isteriz!

Kağıdı oku

GitHub'daki Koda Erişin

teşekkür ederim

 
 
Graphcore'un Uygulama Mühendisliği ekibindeki meslektaşlarımız Sheng Fu ve Mrinal Iyer'e bu çalışmaya katkılarından dolayı ve Graphcore'un Araştırma ekibinden Douglas Orr'a değerli geri bildirimleri için teşekkür ederiz.

Referanslar

 
 
[1] M. Kösec, S. Fu, MM Krell, Paketleme: 2x NLP BERT Hızlandırmasına Doğru (2021), arXiv

 
Mario Michael Krell Graphcore'da Temel Makine Öğrenimi Lideridir. Mario, robotik, otomotiv, telekomünikasyon ve sağlık gibi çeşitli sektörler için yazılımlar oluşturarak 12 yılı aşkın süredir makine öğrenimi algoritmaları araştırıyor ve geliştiriyor. Graphcore'da, etkileyici çalışmalarımıza katkıda bulundu. MLPerf gönderimleri ve istatistiksel COVID-19 veri analizi için yaklaşık Bayes hesaplaması gibi yeni standart dışı modelleri hızlandırma tutkusuna sahiptir.

Matej Kösek Palo Alto'daki Graphcore'da Yapay Zeka Uygulamaları Uzmanıdır. Daha önce San Jose'deki NIO'da otonom sürüş konusunda Yapay Zeka Bilimcisi olarak çalıştı ve Stanford Üniversitesi'nden havacılık ve uzay bilimleri alanında Yüksek Lisans derecesine sahip.

orijinal. İzinle yeniden yayınlandı.

İlgili:

Kaynak: https://www.kdnuggets.com/2021/08/packed-bert-training-speed-up-natural-language-processing.html

Zaman Damgası:

Den fazla KDNuggets