Son birkaç yılda derin öğrenme alanında hızlı bir gelişme yaşandı. Donanım, NVIDIA ve Amazon'un en son nesil hızlandırıcıları gibi gelişmeler göstermiş olsa da, gelişmiş makine öğrenimi (ML) uygulayıcıları, doğal dil işleme (NLP) gibi uygulamalar için büyük derin öğrenme modellerini dağıtırken hâlâ düzenli olarak sorunlarla karşılaşıyor.
Daha önceki bir yazımızda tartışmıştık yetenekler ve yapılandırılabilir ayarlar in Amazon SageMaker model dağıtımı bu büyük modellerle çıkarımı kolaylaştırabilir. Bugün yeni bir duyuruyu duyuruyoruz Amazon Adaçayı Yapıcı Birkaç dakika içinde büyük model çıkarımına başlamak için kullanabileceğiniz Derin Öğrenme Kabı (DLC). Bu DLC Model paralel çıkarımı için DeepSpeed ve Hugging Face Accelerate gibi en popüler açık kaynaklı kitaplıklardan bazılarını paketler.
Bu yazıda, en popüler büyük NLP modellerinden ikisini dağıtmak için yeni bir SageMaker büyük model çıkarım DLC'si kullanıyoruz: BigScience'ın BLOOM-176B ve Meta'nın OPT-30B Hugging Face deposundan. Özellikle, bir metin oluşturma kullanım durumunda belirteç başına 0.1 saniyelik gecikme elde etmek için DeepSpeed'in Deep Java Library (DJL) sunumu ve tensör paralellik tekniklerini kullanıyoruz.
Örnek not defterlerimizin tamamını şurada bulabilirsiniz: GitHub deposu.
Büyük model çıkarım teknikleri
Dil modelleri yakın zamanda hem boyut hem de popülerlik açısından patlama yaşadı. Hugging Face gibi model hayvanat bahçelerinden kolay erişim ve sınıflandırma ve metin oluşturma gibi NLP görevlerinde geliştirilmiş doğruluk ve performans sayesinde uygulayıcılar giderek daha fazla bu büyük modellere ulaşıyor. Ancak büyük modeller genellikle tek bir hızlandırıcının hafızasına sığamayacak kadar büyüktür. Örneğin, BLOOM-176B modeli, 350 gigabayttan fazla hızlandırıcı belleği gerektirebilir; bu, günümüzde mevcut olan donanım hızlandırıcıların kapasitesini çok aşar. Bu, bir modeli çıkarım amacıyla birden fazla hızlandırıcıya dağıtmak için DeepSpeed ve Hugging Face Accelerate gibi kitaplıklardan model paralel tekniklerinin kullanılmasını gerektirir. Bu yazıda, şunu kullanıyoruz: SageMaker büyük model çıkarım kapsayıcısı Bu iki açık kaynak kitaplığı kullanarak gecikme ve aktarım performansını oluşturmak ve karşılaştırmak.
DeepSpeed ve Accelerate, büyük dil modellerini çıkarım amacıyla optimize etmek için farklı teknikler kullanır. Temel fark DeepSpeed'in optimize edilmiş çekirdeklerin kullanımı. Bu çekirdekler, modelin hesaplama grafiğindeki darboğazları azaltarak çıkarım gecikmesini önemli ölçüde artırabilir. Optimize edilmiş çekirdeklerin geliştirilmesi zor olabilir ve genellikle belirli bir model mimarisine özgüdür; DeepSpeed, bu optimize edilmiş çekirdeklerle OPT ve BLOOM gibi popüler büyük modelleri destekler. Buna karşılık, Hugging Face'in Accelerate kütüphanesi, bu yazının yazıldığı sırada optimize edilmiş çekirdekler içermiyor. Sonuçlar bölümümüzde tartıştığımız gibi, DeepSpeed'in Accelerate'e göre sahip olduğu performans avantajının çoğundan bu fark sorumludur.
DeepSpeed ve Accelerate arasındaki ikinci fark, model paralelliğinin türüdür. Accelerate, bir modeli bir modelin gizli katmanları arasında bölmek için boru hattı paralelliğini kullanırken DeepSpeed, katmanları bölmek için tensör paralelliğini kullanır. İşlem hattı paralelliği, daha fazla model türünü destekleyen ve daha büyük toplu iş boyutları kullanıldığında verimi artırabilen esnek bir yaklaşımdır. Tensör paralelliği, GPU'lar arasında daha fazla iletişim gerektirir çünkü model katmanları birden fazla cihaza yayılabilir, ancak aynı anda birden fazla GPU'yu devreye sokarak çıkarım gecikmesini artırabilir. Paralellik teknikleri hakkında daha fazla bilgiyi şu adreste bulabilirsiniz: Model Paralelciliğine Giriş ve Model Paralelliği.
Çözüme genel bakış
Büyük dil modellerini etkili bir şekilde barındırmak için aşağıdaki temel alanlarda özelliklere ve desteğe ihtiyacımız var:
- Çözümleri oluşturma ve test etme – ML geliştirmenin yinelemeli doğası göz önüne alındığında, hızlı bir şekilde başarısız olma yeteneği de dahil olmak üzere, bu modeller barındırıldığında çıkarım uç noktasının nasıl davranacağını oluşturma, hızlı bir şekilde yineleme ve test etme yeteneğine ihtiyacımız var. Bu modeller genellikle yalnızca p4dn veya g5 gibi daha büyük örneklerde barındırılabilir ve modellerin boyutu göz önüne alındığında, bir çıkarım örneğinin başlatılması ve herhangi bir test yinelemesinin çalıştırılması biraz zaman alabilir. Yerel testlerin genellikle kısıtlamaları vardır çünkü test etmek için benzer boyutta bir örneğe ihtiyacınız vardır ve bu modellerin elde edilmesi kolay değildir.
- Geniş ölçekte dağıtma ve çalıştırma – Model dosyalarının çıkarım örneklerine yüklenmesi gerekir, bu da boyut göz önüne alındığında başlı başına bir zorluk teşkil eder. Bloom-176B'ye örnek olarak Tar / Un-Tar'ın oluşturulması yaklaşık 1 saat sürer ve yüklenmesi de bir saat daha sürer. Model dosyalarına kolay erişim sağlamak için alternatif bir mekanizmaya ihtiyacımız var.
- Modeli singleton olarak yükleme – Çok çalışanlı bir süreç için, yarış koşullarıyla karşılaşmamak ve gereksiz kaynakları daha fazla harcamamak için modelin yalnızca bir kez yüklendiğinden emin olmamız gerekir. Bu yazıda doğrudan yükleme yapmanın bir yolunu gösteriyoruz. Amazon Basit Depolama Hizmeti (Amazon S3). Ancak bu yalnızca DJL'nin varsayılan ayarlarını kullandığımızda işe yarar. Ayrıca, uç noktaların herhangi bir ölçeklendirmesinin birkaç dakika içinde hızlanabilmesi gerekir; bu da modellerin nasıl yüklenebileceği ve dağıtılabileceğinin yeniden değerlendirilmesini gerektirir.
- Parçalama çerçeveleri – Bu modellerin genellikle bir tensör paralellik mekanizması veya tipik parçalama teknikleri gibi ardışık düzen parçalama yoluyla olması gerekir ve tensör parçalamanın üzerine inşa edilmiş Sıfır Parçalama gibi gelişmiş konseptlerimiz vardır. Parçalama teknikleri hakkında daha fazla bilgi için bkz. Model Paralelliği. Bunu başarmak için çeşitli kombinasyonlara sahip olabiliriz ve NIVIDIA, DeepSpeed ve diğerlerinden çerçeveler kullanabiliriz. Bunun için BYOC'yi test etme veya 1P kapsayıcıları kullanma, çözümler üzerinde yineleme yapma ve kıyaslama testleri yürütme becerisi gerekir. Ayrıca eşzamansız, sunucusuz ve diğerleri gibi çeşitli barındırma seçeneklerini de test etmek isteyebilirsiniz.
- Donanım seçimi – Donanım seçiminiz, yukarıda belirtilen tüm noktalara ve diğer trafik kalıplarına, kullanım senaryosu ihtiyaçlarına ve model boyutlarına göre belirlenir.
Bu yazıda, BLOOM-176B ve OPT-30B'yi SageMaker'da barındırmak için DeepSpeed'in optimize edilmiş çekirdeklerini ve tensör paralellik tekniklerini kullanıyoruz. Optimize edilmiş çekirdeklerin ve tensör paralelliğinin performans avantajlarını göstermek için Accelerate'in sonuçlarını da karşılaştırıyoruz. DeepSpeed ve Accelerate hakkında daha fazla bilgi için bkz. DeepSpeed Çıkarım: Transformatör Modellerinin Eşi Görülmemiş Ölçekte Etkili Çıkarımını Etkinleştirme ve DeepSpeed ve Accelerate ile İnanılmaz Hızlı BLOOM Çıkarımı.
Bu örnekte model hizmet çözümü olarak DJLServing'i kullanıyoruz. DJLServing, programlama dilinden bağımsız olan Deep Java Library (DJL) tarafından desteklenen, yüksek performanslı bir evrensel model hizmet çözümüdür. DJL ve DJLServing hakkında daha fazla bilgi edinmek için bkz. DJLServing ve DeepSpeed model paralel çıkarımını kullanarak büyük modelleri Amazon SageMaker'da dağıtın.
Optimize edilmiş çekirdeklerin hassas değişikliklere ve değiştirilmiş bir hesaplama grafiğine yol açabileceğini ve bunun da teorik olarak model davranışının değişmesine neden olabileceğini belirtmekte fayda var. Her ne kadar bu bazen çıkarım sonucunu değiştirebilse de, bu farklılıkların bir modelin temel değerlendirme ölçütlerini maddi olarak etkilemesini beklemiyoruz. Bununla birlikte uygulayıcılara, bu çekirdekleri kullanırken model çıktılarının beklendiği gibi olduğunu doğrulamaları tavsiye edilir.
Aşağıdaki adımlarda, DJLServing ve SageMaker büyük model çıkarım konteyneri kullanılarak bir BLOOM-176B modelinin SageMaker'da nasıl dağıtılacağı gösterilmektedir. Örneğin tamamı ayrıca sitemizde mevcuttur. GitHub deposu.
DJLServing SageMaker DLC görüntüsünü kullanma
Bölgeyi dizüstü bilgisayarı çalıştırdığınız bölgeyle değiştirdikten sonra DJLServing SageMaker DLC görüntüsünü kullanmak için aşağıdaki kodu kullanın:
Model dosyamızı oluşturun
İlk olarak adında bir dosya oluşturuyoruz. serving.properties
yalnızca bir satır kod içerir. Bu, DJL model sunucusuna DeepSpeed motorunu kullanmasını söyler. Dosya aşağıdaki kodu içerir:
serving.properties
model başına yapılandırmayı yapılandırmak için kullanılan, DJLServing tarafından tanımlanan bir dosyadır.
Daha sonra, bizim model.py
Modeli yüklemek ve sunmak için gereken kodu tanımlayan dosya. Kodumuzda şunu okuyoruz: TENSOR_PARALLEL_DEGREE
ortam değişkeni (varsayılan değer 1'dir). Bu, tensör paralel modüllerinin dağıtıldığı cihazların sayısını belirler. DeepSpeed'in, BLOOM modellerine yönelik bir tane de dahil olmak üzere birkaç yerleşik bölüm tanımı sağladığını unutmayın. Belirterek kullanıyoruz replace_method
ve relpace_with_kernel_inject
. Özelleştirilmiş bir modeliniz varsa ve etkili bir şekilde bölümlemek için DeepSpeed'e ihtiyacınız varsa, relpace_with_kernel_inject
için false
ve ekleyin injection_policy
çalışma zamanı bölümünün çalışmasını sağlamak için. Daha fazla bilgi için bkz. Çıkarım için Başlatma. Örneğimiz için DeepSpeed üzerinde önceden bölümlenmiş BLOOM modelini kullandık.
İkinci olarak, model.py
dosyasında, uç nokta etkinleştirildikten sonra modeli Amazon S3'ten de yüklüyoruz. Model şuraya yüklendi: /tmp
SageMaker kapta yer kapladığından /tmp
için Amazon Elastik Blok Mağazası Uç nokta oluşturma parametresini belirttiğimizde bağlanan (Amazon EBS) birimi VolumeSizeInGB
. Birim örneğiyle önceden oluşturulmuş olarak gelen p4dn gibi örnekler için, /tmp
konteyner üzerinde. Aşağıdaki koda bakın:
DJLServing, içinde tanımlanan herhangi bir pip paketindeki çalışma zamanı kurulumunu yönetir. requirement.txt
. Bu dosyada şunlar bulunacaktır:
adında bir dizin oluşturduk. code
ve model.py
, serving.properties
, ve requirements.txt
dosyalar bu dizinde zaten oluşturulmuş. Dosyaları görüntülemek için terminalden aşağıdaki kodu çalıştırabilirsiniz:
Aşağıdaki şekil yapısını göstermektedir model.tar.gz
.
Son olarak model dosyasını oluşturup Amazon S3’e yüklüyoruz:
Modeli Hugging Face'ten indirin ve saklayın (İsteğe bağlı)
Modeli Amazon S3'e indirip oradan kullanmak istemeniz durumunda bu bölümdeki adımları sunduk. Adımlar GitHub'daki Jupyter dosyasında verilmiştir. Aşağıdaki ekran görüntüsünde adımların anlık görüntüsü gösterilmektedir.
SageMaker modeli oluşturun
şimdi bir tane oluşturuyoruz Adaçayı Yapıcı modeli. Kullanıyoruz Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) görüntüsü ve SageMaker modelini oluşturmak için önceki adımdaki model yapısı. Model kurulumunda yapılandırıyoruz TENSOR_PARALLEL_DEGREE=8
, bu, modelin 8 GPU'ya bölündüğü anlamına gelir. Aşağıdaki koda bakın:
Jupyter dosyasında önceki hücreyi çalıştırdıktan sonra aşağıdakine benzer bir çıktı görürsünüz:
SageMaker uç noktası oluşturun
Test için birden fazla GPU'ya sahip herhangi bir örneği kullanabilirsiniz. Bu demoda p4d.24xlarge örneğini kullanıyoruz. Aşağıdaki kodda, ayarı nasıl ayarladığımıza dikkat edin. ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
, ve VolumeSizeInGB
büyük model boyutunu karşılamak için parametreler. bu VolumeSizeInGB
parametre, EBS birim ekini destekleyen GPU örnekleri için geçerlidir.
Son olarak, bir SageMaker bitiş noktası oluşturuyoruz:
Aşağıdaki kodda yazdırıldığını görüyorsunuz:
Uç noktayı başlatmak biraz zaman alabilir. karşılaşırsanız birkaç kez daha deneyebilirsiniz. InsufficientInstanceCapacity
veya hesabınızdaki limiti artırmak için AWS'ye talepte bulunabilirsiniz.
Performans ayarı
Bu gönderiyi ve beraberindeki defteri farklı bir modelle kullanmayı düşünüyorsanız, SageMaker, DeepSpeed ve DJL'nin sunduğu bazı ayarlanabilir parametreleri keşfetmek isteyebilirsiniz. Bu parametrelerle tekrarlanan denemeler, barındırılan büyük modelinizin gecikme süresi, aktarım hızı ve maliyeti üzerinde önemli bir etkiye sahip olabilir. Çalışan sayısı, tensör paralellik derecesi, iş kuyruğu boyutu ve diğerleri gibi parametreleri ayarlama hakkında daha fazla bilgi için bkz. DJL Sunum konfigürasyonları ve DJLServing ve DeepSpeed model paralel çıkarımını kullanarak büyük modelleri Amazon SageMaker'da dağıtın.
Sonuçlar
Bu yazıda, SageMaker ML bulut sunucularında BLOOM-176B ve OPT-30B'yi barındırmak için DeepSpeed'i kullandık. Aşağıdaki tablo, Hugging Face'in Hızlandırma özelliğiyle karşılaştırma da dahil olmak üzere performans sonuçlarımızı özetlemektedir. Gecikme, 256 jetonlu bir dizenin dört kez üretilmesi için gereken milisaniye sayısını yansıtır (batch_size=4
) modelden. Verim, her test için saniyede üretilen token sayısını yansıtır. Hugging Face Accelerate için kütüphanenin varsayılan yüklemesini GPU bellek eşlemeyle kullandık. DeepSpeed için daha hızlı kontrol noktası yükleme mekanizmasını kullandık.
Model | Kütüphane | Model Hassasiyeti | Parti boyutu | Paralel Derece | örnek | Yükleme Zamanı (S) |
Gecikme (4 x 256 Token Çıkışı) | . | ||
. | . | . | . | . | . | . | P50 (MS) |
P90 (MS) |
P99 (MS) |
çıktı (jeton/sn) |
BLOOM-176B | Derin Hız | INT8 | 4 | 8 | p4d.24xlarge | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOOM-176B | Hızlandırmak | INT8 | 4 | 8 | p4d.24xlarge | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | Derin Hız | FP16 | 4 | 4 | g5.24xlarge | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | Hızlandırmak | FP16 | 4 | 4 | g5.24xlarge | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
Gecikme açısından bakıldığında DeepSpeed, Accelerate'e kıyasla BLOOM-3.4B için yaklaşık 176 kat, OPT-5.6B için ise 30 kat daha hızlıdır. Gecikmedeki bu farkın çoğundan DeepSpeed'in optimize edilmiş çekirdekleri sorumludur. Bu sonuçlar göz önüne alındığında, seçtiğiniz model destekleniyorsa Accelerate yerine DeepSpeed'i kullanmanızı öneririz.
Ayrıca, DeepSpeed ile model yükleme sürelerinin çok daha kısa olduğunu ve uç nokta sayınızı hızlı bir şekilde artırmanız gerektiğini düşünüyorsanız bunu daha iyi bir seçenek haline getirdiğini de belirtmekte fayda var. DeepSpeed tarafından desteklenmeyen modelleriniz veya model hassasiyetleriniz varsa Accelerate'in daha esnek ardışık düzen paralellik tekniği daha iyi bir seçenek olabilir.
Bu sonuçlar aynı zamanda farklı model boyutlarının gecikme ve aktarım hızındaki farkı da göstermektedir. Testlerimizde OPT-30B, üç kattan daha ucuz olan bir bulut sunucusu türünde BLOOM-2.4B'ye kıyasla birim zaman başına 176 kat daha fazla token üretiyor. Birim üretim başına fiyat esasında, g30xl bulut sunucusundaki OPT-5.24B, p8.9d.176xl bulut sunucusundaki BLOOM-4B'den 24 kat daha iyidir. Kesin gecikme, aktarım hızı veya maliyet sınırlamalarınız varsa işlevsel gereksinimleri karşılamaya devam edecek mümkün olan en küçük modeli kullanmayı düşünün.
Temizlemek
En iyi uygulamaların bir parçası olarak her zaman boşta olan örneklerin silinmesi önerilir. Aşağıdaki kod örnekleri nasıl sileceğinizi gösterir.
İsteğe bağlı olarak model kontrol noktasını S3'ünüzden silin
Sonuç
Bu yazıda, iki büyük dil modelini (BLOOM-176B ve OPT-30B) barındırmak için SageMaker büyük model çıkarım kapsayıcılarının nasıl kullanılacağını gösterdik. Tek bir SageMaker ML örneğinde DeepSpeed'in model paralel tekniklerini birden fazla GPU ile kullandık.
Amazon SageMaker ve geniş model çıkarım yetenekleri hakkında daha fazla ayrıntı için bkz. Amazon SageMaker artık yapılandırılabilir birim boyutu ve zaman aşımı kotaları aracılığıyla büyük modellerin dağıtılmasını destekliyor ve Gerçek zamanlı çıkarım.
yazarlar hakkında
Simon Zamarin ana odak noktası müşterilerin veri varlıklarından değer elde etmelerine yardımcı olan bir AI / ML Çözümleri Mimarıdır. Simon boş zamanlarında aileyle vakit geçirmekten, bilim kurgu okumaktan ve çeşitli DIY ev projeleri üzerinde çalışmaktan hoşlanıyor.
Ruinder Grewal AWS'li bir Kıdemli Ai/ML Uzman Çözüm Mimarıdır. Şu anda SageMaker'da modellerin ve MLO'ların sunumuna odaklanıyor. Bu görevden önce Makine Öğrenimi Mühendisi olarak model oluşturma ve barındırma konusunda çalıştı. İş dışında tenis oynamayı ve dağ yollarında bisiklet sürmeyi sever.
Frank Liu AWS Deep Learning için Yazılım Mühendisidir. Yazılım mühendisleri ve bilim adamları için yenilikçi derin öğrenme araçları oluşturmaya odaklanıyor. Boş zamanlarında arkadaşları ve ailesi ile yürüyüş yapmayı sever.
Alan Tan SageMaker'ın büyük model çıkarımına yönelik çabalara öncülük eden Kıdemli Ürün Müdürüdür. Analitik alanına Makine Öğrenimi uygulama konusunda tutkulu. İş dışında, açık havayı sever.
Dhaval Patel AWS'de Baş Makine Öğrenimi Mimarıdır. Dağıtılmış bilgi işlem ve Yapay Zeka ile ilgili sorunlar üzerinde büyük kuruluşlardan orta ölçekli girişimlere kadar çeşitli kuruluşlarla çalıştı. NLP ve Computer Vision alanları dahil olmak üzere Derin öğrenmeye odaklanmaktadır. Müşterilerin SageMaker'da yüksek performanslı model çıkarımı yapmasına yardımcı olur.
Qing Lan AWS'de Yazılım Geliştirme Mühendisidir. Amazon'da yüksek performanslı ML çıkarım çözümleri ve yüksek performanslı günlük kaydı sistemi dahil olmak üzere birçok zorlu ürün üzerinde çalışıyor. Qing'in ekibi, Amazon Advertising'de çok düşük gecikme süresi gerektiren ilk Milyar parametre modelini başarıyla başlattı. Qing, altyapı optimizasyonu ve Derin Öğrenme hızlandırması hakkında derinlemesine bilgi sahibidir.
Qingwei Li Amazon Web Services'te Makine Öğrenimi Uzmanıdır. Doktora derecesini aldı. Danışmanının araştırma bursu hesabını bozduktan ve söz verdiği Nobel Ödülü'nü teslim edemedikten sonra Yöneylem Araştırması'nda. Şu anda finansal hizmet ve sigorta sektöründeki müşterilerin AWS'de makine öğrenimi çözümleri oluşturmasına yardımcı oluyor. Boş zamanlarında okumayı ve öğretmeyi sever.
Robert Van Düsen Amazon SageMaker'da Kıdemli Ürün Yöneticisidir. Büyük model çıkarımı gibi uygulamalar için derin öğrenme modeli optimizasyonuna öncülük ediyor.
Siddharth Venkatesan AWS Deep Learning'de Yazılım Mühendisidir. Şu anda büyük model çıkarımına yönelik çözümler oluşturmaya odaklanıyor. AWS'den önce Amazon Grocery organizasyonunda dünya çapındaki müşteriler için yeni ödeme özellikleri oluşturmada çalışıyordu. İş dışında kayak yapmaktan, açık havada olmaktan ve spor müsabakalarını izlemekten hoşlanıyor.
- Gelişmiş (300)
- AI
- yapay zeka
- AI sanat üreteci
- yapay zeka robotu
- Amazon Adaçayı Yapıcı
- yapay zeka
- yapay zeka sertifikası
- bankacılıkta yapay zeka
- yapay zeka robotu
- yapay zeka robotları
- yapay zeka yazılımı
- AWS Makine Öğrenimi
- blockchain
- blockchain konferans ai
- zeka
- konuşma yapay zekası
- kripto konferans ai
- dal-e
- derin öğrenme
- google ai
- makine öğrenme
- Platon
- plato yapay zekası
- Plato Veri Zekası
- Plato Oyunu
- PlatoVeri
- plato oyunu
- ölçek ai
- sözdizimi
- zefirnet