GPT-NeoX 20B'yi üretimde dağıtmak zorlu bir iştir ve biz bunu NLP Cloud'da zor yoldan öğrendik... Bu makalede size GPT-NeoX 20B kullanımıyla ilgili çeşitli püf noktalarından ve özellikle üretimde DeepSpeed ile nasıl başa çıkılacağından bahsedeceğiz.

GPT-NeoX 20B, bu yazı itibariyle en büyük açık kaynaklı Doğal Dil İşleme modelidir.
EleutherAI tarafından 2 hafta önce yayınlandı. Zorluklarla dolu 1 yıllık sıkı bir çalışmanın ardından 20 milyar parametre üzerinde eğitildi. Ana zorluklarından biri, modelin birden fazla GPU üzerinde verimli bir şekilde eğitilebilmesi için uygun bir paralel mimari kurma yeteneği gibi görünüyordu.
Bir önceki modelleri GPT-J, Google TPU'ları üzerinde eğitilmiş ve TPU'larda kullanılmak üzere tasarlanmıştır. GPT-NeoX 20B'nin iç mimarisi tamamen farklıdır ve GPU'larda kullanılmak üzere yapılmıştır. Fikir, bunun daha büyük modellerden oluşan bir serinin ilki olması gerektiğidir (buradaki amaç GPT-3'e yetişmektir).
GPT-NeoX 20 bir metin oluşturma modelidir, yani sizin için metin yazabilir ve aslında neredeyse tüm Doğal Dil İşleme kullanım durumlarını büyük bir doğrulukla gerçekleştirebilir: blog yazısı oluşturma, sohbet robotları, metin sınıflandırma, duygu analizi, anahtar kelime çıkarma, kod oluşturma, varlık çıkarma, amaç sınıflandırma, soru yanıtlama ve daha fazlası...
Hiç şüphesiz birçok araştırmacı ve şirket bu yeni modelden yararlanacak ve harika sonuçlar elde edecektir. Ancak bir zorluk var: GPT-NeoX 20B nasıl dağıtılacak?
GPT-NeoX 20B'yi üretimde kullanmaya çalışırken karşılaşılan ilk zorluk, gerektirdiği gelişmiş donanımdır.
Çok pahalı olsa bile GPT-J'yi tüketici donanımına yerleştirmek hala mümkündü. Örneğin, çok iyi bir CPU'ya (sonuç acı verici derecede yavaş olsa bile) veya NVIDIA RTX 3090 gibi gelişmiş bir oyun GPU'suna yerleştirebilirdiniz. Ancak GPT-NeoX 20B o kadar büyük ki artık bu mümkün değil.
Temel olarak GPT-NeoX en az 42 GB VRAM ve 40 GB disk alanı gerektirir (ve evet burada ince fp16 sürümünden bahsediyoruz). Çok az GPU bu gereksinimleri karşılayabilir. Bunların başlıcaları NVIDIA A100, A40 ve RTX A6000'dir.
Bu GPU'lar sadece çok pahalı olmakla kalmıyor, aynı zamanda küresel yarı iletken kıtlığı nedeniyle bugünlerde bunlardan birine sahip olmak da zor.
Burada en iyi çözüm, çoklu GPU mimarisini tercih etmektir.
Modelinizi tek bir GPU'ya sığdıramıyorsanız, birkaç GPU'ya bölmeyi deneyebilirsiniz.
Bu 2 nedenden dolayı ilginç bir seçenektir. Birincisi, bir altyapıyı yatay olarak ölçeklendirmek genellikle dikey olarak ölçeklendirmekten daha ucuzdur. Bu durum sunucular için geçerli olduğu gibi GPU'lar için de geçerlidir. İkinci olarak, NVIDIA Tesla T4 gibi birkaç küçük GPU'ya sahip olmak, NVIDIA A40 gibi daha büyük GPU'lara sahip olmaktan daha kolaydır.
Ne yazık ki, bir makine öğrenimi modelini birkaç GPU'ya bölmek teknik bir zorluktur. Hugging Face, model paralelliği ve sahip olduğunuz seçenekler hakkında harika bir makale hazırladı. Read it here. Ancak neyse ki EleutherAI, GPT-NeoX 20B'yi ister eğitim ister çıkarım için olsun, birkaç GPU üzerinde kolayca paralelleştirilebilecek şekilde tasarladı.
GPT-NeoX mimarisi Deepspeed'e dayanmaktadır. Deepspeed, başlangıçta birkaç GPU arasında eğitimleri paralelleştirmek için tasarlanmış Microsoft'un bir çerçevesidir ve çıkarım için de giderek daha fazla kullanılmaktadır. EleutherAI tüm zor işleri yaptı, bu nedenle GPT-NeoX'u paralelleştirmek bir yapılandırma dosyasındaki bir sayıyı değiştirmek kadar basit.

Extract from the GPT-NeoX docs about parallelism
Bununla birlikte, bir API aracılığıyla çevrimiçi çıkarım için Deepspeed'i üretimde dağıtmak zordur... Deepspeed web sunucularına kolayca entegre edilebilecek şekilde tasarlanmamıştır. NLP Cloud'da bunu zor yoldan öğrendik, ancak sıkı bir çalışmadan sonra nihayet Deepspeed ve GPT-NeoX'un API'mızın arkasında çalışmasını sağlamak için etkili bir yol bulmayı başardık.
Doğru donanımı sağladığınızı ve Deepspeed ile GPT-NeoX 20B'yi doğru şekilde dağıttığınızı varsayalım. Şimdi bilmeniz gereken birkaç uyarı var.
İlk olarak, GPT-J ile karşılaştırıldığında, parametreler (üst k, üst p ve sıcaklık) model üzerinde aynı etkilere sahip değildir. Bu nedenle, GPT-J için iyi bir yapılandırma bulmayı başardıysanız, bunu kesin olarak kabul etmeyin: GPT-NeoX ile yeni testler yapmanız gerekecektir.
Son olarak, girdi boyutu 2048 jetona kadar çıkabilse bile, yukarıda belirtilen 42 GB'lık temel bellekten daha fazla bellek gerektirecektir...
GPT modelleri oldukça yavaştır ve GPT-NeoX 20B de bir istisna değildir. Bu nedenle, uygulamanızın verimini artırmak için bir toplu çıkarım çözümü üzerinde çalışmak isteyebilirsiniz.
Şimdilik NLP Cloud'da bunun için iyi bir çözüm bulamadık.
GPT-NeoX kodu, tek bir istek içinde aynı anda birden fazla çıkarım yapılabilecek şekilde hazırlanmıştır. Ancak testlerimizde, yanıt süresi çıkarımların sayısıyla doğrusal olarak arttı, bu da toplu çıkarımın amacını bir tür bozuyor...
GPT-NeoX 20B'nin üretimde kullanılması kesinlikle zordur. Metin oluşturma kalitesi şaşırtıcıdır, ancak çok az kişi bu modeli gerçekten kurma kapasitesine sahip olacaktır.
Bu modeli kullanmak için NLP Cloud gibi bir Bulut hizmetine güvenmek her zamankinden daha fazla çözüm olacak gibi görünüyor. GPT-NeoX 20B'yi NLP Cloud'da buradan deneyin!
Bu makale hakkında geri bildirimleriniz varsa lütfen bizimle iletişime geçmekten çekinmeyin, bu konudaki görüşlerinizi duymak harika olacaktır!
Julien Salinas
NLP Cloud'da CTO