LLaMA 3.1 405b, Meta AI tarafından geliştirilen büyük bir dil modelidir ve 405 milyar parametre ile parametre boyutu açısından açık olarak mevcut en büyük AI modellerinden birini temsil eder. Farklı boyutlarda (8B, 70B ve 405B parametreli) modeller içeren Llama 3.1 ailesinin bir parçasıdır.
GPT-4 gibi en iyi kapalı kaynak modellerinden bazılarının performansını çeşitli kıyaslamalarda eşleştirmeyi ve hatta aşmayı amaçlayan 405B sürümü, dil anlama, üretme ve diğer görevlerdeki son teknoloji yeteneklerini gösteren ölçeğiyle özellikle dikkat çekicidir. Llama 3.1 modelleri, farklı bölgelerde ve kullanıcı tabanlarında uygulanabilirliğini genişleten, birden çok dilde metin anlama ve üretme yeteneğine sahip gelişmiş çok dilli destekle tasarlanmıştır.
Bu makalede, LLaMA 3.1 405B'nin Google Cloud Platform (GCP) Compute Engine üzerinde nasıl kurulacağını ve dağıtılacağını gösteriyoruz. İlk olarak donanım gereksinimleri, ardından GCP'de örnek sağlama ve vLLM ile dağıtım ve niceleme hakkında konuşuyoruz.
Llama 3.1 405B'yi çalıştırmak için donanım gereksinimleri, boyutu ve karmaşıklığı nedeniyle oldukça kapsamlıdır. LLM'leri dağıtırken her zaman olduğu gibi, en karmaşık kısım GPU'dur. Bu modeli dağıtmak için çok fazla VRAM'e (yani GPU belleğine) ihtiyacınız olacaktır:
Bu ihtiyaçlar göz önüne alındığında, genellikle aşağıdaki gibi kurulumlara bakarsınız:
Her zamanki gibi, niceleme konusunda dikkatli olmanız ve modelin kalitesinin çok fazla düşmediğinden emin olmanız gerekir. Testimizde, fp8 niceleme modelin kalitesine zarar vermiyor gibi görünüyor, bu yüzden bu makalede onu kullanacağız.
Google Cloud Platform (GCP), yapay zeka iş yüklerinizi dağıtmak ve ölçeklendirmek için ilginç bir sağlayıcıdır. Nispeten ucuzdur ve iyi bir GPU teklifine sahiptir (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Örnek seçenekleri açısından da oldukça esnektirler. Örneğin, bir veya daha fazla H100 GPU'ya sahip örnekler sağlayabilirsiniz: 1xH100, 2xH100, 4xH100 veya 8xH100.
Hesabınız yeniyse GPU örnekleri sağlamanıza izin verilmeyebilir ve bu durumda kota artırımı istemek için destek ekibine başvurmanız gerekecektir.
İlk adım olarak GCP'de yeni bir proje oluşturmak isteyeceksiniz. Ardından projeniz için Compute Engine API'sini etkinleştirmek isteyeceksiniz. Bunu GCP Konsolu'ndaki API Kitaplığı'na gidip "Compute Engine "i arayarak yapabilirsiniz. API'yi etkinleştirmek için üzerine tıklayın ve ardından "Etkinleştir "e tıklayın.
API'yi etkinleştirdikten sonra, yeni bir örnek oluşturabileceksiniz. Bunu GCP Konsolundaki "VM örnekleri" bölümüne gidip "Örnek oluştur" seçeneğine tıklayarak yapabilirsiniz.
Daha sonra bir makine türü seçmeniz istenecektir. Fp8 modunda LLaMA 3.1 405B için 8xH100 GPU'lu bir a3-highgpu-1g makinesi seçmek isteyeceksiniz.
LLaMA 3.1 405B için GCP Örneği
Daha sonra sanal makineniz için ağ, depolama vb. gibi birçok ayrıntıyı ayarlayabilmeniz gerekecektir. Bu makalede tüm bu ayarları gözden geçirmeyeceğiz, ancak görüntü türü ve depolamaya odaklanacağız.
LLaMA 3.1 405B model ağırlıklarını fp8 formatında indirmek için en az 500 GB disk alanına ihtiyacınız olacaktır. Ayrıca, daha sonra bazı işlerden tasarruf edebileceğiniz için CUDA 12'nin zaten yüklü olduğu bir Linux Derin Öğrenme görüntüsü kullanmanızı öneririz. Bunu "İşletim sistemi ve depolama" bölümünden elde edebilirsiniz:
LLaMA 3.1 405B için GCP Görüntüsü ve Disk Alanı
Sanal Büyük Dil Modeli anlamına gelen vLLM, yapay zeka alanında, özellikle de büyük dil modellerinin (LLM'ler) çıkarım için nasıl sunulduğu ve kullanıldığı konusunda önemli bir ilerlemeyi temsil etmektedir.
vLLM, yüksek verimli ve düşük gecikmeli çıkarımlar için tasarlanmıştır, bu da onu hızlı ve verimli dil işlemenin çok önemli olduğu uygulamalar için ideal hale getirir. Bunu, dikkat anahtarını ve değer belleğini daha verimli bir şekilde yöneterek bellek kullanımını optimize eden ve HuggingFace Transformers gibi geleneksel yöntemlere kıyasla 24 kata kadar daha yüksek verim sağlayan PagedAttention gibi yenilikçi tekniklerle başarır.
vLLM'nin verimliliğinin özü bellek yönetiminde yatmaktadır. PagedAttention kullanan vLLM, anahtar-değer (KV) önbelleğini bloklara bölerek daha iyi bellek kullanımı sağlar ve LLM'ler için GPU bellek kullanımında yaygın bir darboğaz olan parçalanmayı azaltır. Bu yaklaşım yalnızca işlemeyi hızlandırmakla kalmaz, aynı zamanda önemli performans düşüşleri olmadan aynı anda daha fazla isteğin ele alınmasına da olanak tanır.
Bir çıkarım ve hizmet motoru olarak vLLM, yalnızca LLM'leri çalıştırmaya değil, aynı zamanda bunu kaynak kullanımını en üst düzeye çıkaracak şekilde yapmaya odaklanır. GPU'nun tam olarak kullanılmasını sağlayan, böylece boşta kalma sürelerini azaltan ve genel verimliliği artıran, gelen isteklerin sürekli olarak gruplanması gibi teknikler kullanır.
vLLM, model ağırlıklarının hassasiyetini azaltan, böylece bellek kullanımını azaltan ve potansiyel olarak çıkarımı hızlandıran çeşitli niceleme tekniklerini (GPTQ, AWQ, INT4, INT8, FP8 gibi) destekler.
vLLM'yi kurmak nispeten kolaydır. GCP VM örneğimize bağlanalım ve pip kullanarak vLLM'yi yükleyelim:
pip install vllm
Dağıtılmış çıkarımı 8 x H100 GPU üzerinde gerçekleştireceğiz, bu nedenle Ray'i de yüklememiz gerekiyor:
pip install ray
vLLM'yi kurarken uyumluluk sorunları yaşarsanız, vLLM'yi kaynaktan derlemek veya Docker imajlarını kullanmak sizin için daha kolay olabilir: vLLM kurulum talimatlarına bir göz atın.
Modelimizi test etmek için temel bir Python örneği ile başlayalım:
from vllm import LLM
# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)
print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))
Python betiğini çalıştırabilirsiniz. İlk kez çalıştırıyorsanız, modelin indirilmesini ve GPU'ya yüklenmesini beklemeniz gerekecek, ardından aşağıdaki gibi bir yanıt alacaksınız:
FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.
**INT8 Quantization**
INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.
INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.
**FP8 Quantization**
FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.
FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.
**Key differences**
Here are the key differences between FP8 and INT8 quantization:
1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.
In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications.
LLaMA 3.1 405B modeli Neural Magic tarafından vLLM için fp8'de zaten kuantize edilmiştir, bu nedenle kuantizasyonu tekrar yapmamıza gerek yoktur. Kuantize edilmiş modeli HuggingFace Hub'ından yüklememiz yeterlidir.
Tensor_parallel_size parametresi, makinemizde sahip olduğumuz GPU sayısına göre ayarlanır.
Ancak bu basit Python betiği uygun bir üretim sunucusu değildir. Şimdi birçok isteği paralel olarak tüketmek ve verimi en üst düzeye çıkarmak için çıkarım sunucusunu başlatacağız:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Model yüklendikten sonra, ikinci bir terminal başlatabilir ve bazı isteklerde bulunabilirsiniz:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
"prompt": "Who are you?"
}'
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."
LLaMA 3.1 405B son teknoloji bir üretken yapay zeka modelidir ancak bunu üretime dönüştürmek kolay değildir.
En büyük zorluk doğru donanımı bulmak. GPU'lar çok maliyetlidir ve küresel bir kıtlık söz konusudur. Ancak doğru GPU'ları sağlamayı başardığınızda, modeli vLLM gibi bir çıkarım sunucusuyla dağıtmak oldukça kolaydır.
Bu kadar büyük modellerde, bizim yaptığımız gibi VRAM kullanımını azaltmak ve gecikme süresini iyileştirmek için nicelleştirmeden yararlanmak isteyebilirsiniz. Ancak dikkatli olun: niceleme, modelin doğruluğunu azaltabileceğinden her zaman sihirli bir değnek değildir.
LLaMA 3.1 405B'yi kendi başınıza dağıtamıyor veya dağıtmak istemiyorsanız, NLP Cloud'da kolayca kullanabilir ve bu harika modelden üretimde büyük ölçekte yararlanabilirsiniz. LLaMA 3.1 405B'yi NLP Cloud üzerinde şimdi deneyin!
LLaMA 3.1 405B ve genel olarak AI hakkında sorularınız varsa, lütfen bize sormaktan çekinmeyin, tavsiye vermekten her zaman memnuniyet duyarız!
Julien
NLP Cloud'da CTO