كيفية نشر Llama 3.1 405B باستخدام Novita AI

كيفية نشر Llama 3.1 405B باستخدام Novita AI

مقدمة

أثار إصدار Llama3.1 اهتمامًا عالميًا فوريًا، حيث كانت هذه هي المرة الأولى التي يقترب فيها نموذج مفتوح المصدر من النماذج الخاصة بل ويتجاوزها في بعض المقاييس. تقدم هذه المقالة طريقة وخطوات نشر نموذج Llama3.1-405B من الصفر باستخدام مثيل GPU من Novita AI. يُلاحظ بشكل خاص أن نشر نموذج كبير من الصفر مهمة تستغرق وقتًا وجهدًا. إذا كنت ترغب في تجنب هذا العمل الشاق واستخدام نموذج Llama3.1-405B مباشرة، يمكنك البحث عن منصة استضافة نماذج ممتازة في الصناعة لاستدعاء خدمة الاستدلال على شكل OpenAI API. إنها ليست سهلة الاستخدام فحسب، بل إنها أيضًا صديقة جدًا من حيث التكلفة، بتكلفة إجمالية منخفضة جدًا ويمكن التحكم فيها. حاليًا، أطلقت Novita AI خدمة API لـ Llama3.1، ويمكنك تجربتها مباشرة في Playground: https://novita.ai/model-api/llm-api/playground

المتطلبات الأساسية لنشر Llama3.1-405B

تشمل سلسلة نماذج Llama3.1 مفتوحة المصدر من Meta أحجام 8B و70B و405B، وأكبر هذه النماذج هو نموذج 405B، وهو أكبر نموذج لغة كبير مفتوح المصدر حتى الآن، بمعاملات تبلغ 40.5 مليار. وقد تجاوز أداء النموذج في العديد من نتائج التقييم نماذج GPT-4 وGPT-4o، وهو مماثل لـ Claude3.5-Sonnet. يمثل تحميل مثل هذا النموذج الكبير في GPU تحديًا. يتطلب الإصدار الأصلي FP16 من نموذج 405B ذاكرة GPU بسعة 810 جيجابايت، كما هو موضح في الشكل أدناه. ومع ذلك، حتى مع أفضل مواصفات GPU H100 المتاحة في السوق، لا يمكن لخادم بأعلى تكوين 8 بطاقات تحميل هذا الإصدار من النموذج مباشرة. من الضروري قياس الإصدار FP16 للنموذج إلى تمثيل بدقة أقل، وبالتالي تقليل متطلبات الذاكرة وتحميله بنجاح في GPU.

ترث بنية نموذج سلسلة Llama3.1 من Llama3، والهيكل متشابه جدًا، مما يجعله صديقًا جدًا لإطار عمل الاستدلال. يمكن لحلول الاستدلال مفتوحة المصدر مثل vLLM إكمال التكيف بسرعة ودعم استدلال النماذج الكبيرة مثل Llama3.1-405B. باختصار، لإكمال نشر خدمة استدلال Llama3.1-405B، نحتاج إلى التحضير من ثلاثة جوانب:

  • العتاد: يُوصى باختيار مثيل خادم GPU مُكوَّن بـ 8 وحدات GPU H00 وحجز مساحة تخزين تبلغ حوالي 1.5 تيرابايت. يمكنك اختيار المثيل من خلال لوحة تحكم Novita AI وتوفير سعة التخزين عن طريق تركيب وحدة تخزين شبكية.

  • النموذج: قم بإعداد حساب Huggingface، وقم بتنزيل نموذج Llama3.1-405B الأصلي، أو يمكنك أيضًا تنزيل إصدار FP8 أو INT4 من النموذج.
  • إطار عمل الاستدلال: قم بتنزيل أحدث إصدار من vLLM v0.5.3.post1.

إعداد النموذج

بعد تجهيز خادم GPU ببطاقات H100، سجّل الدخول إلى الخادم وابدأ في تنزيل النموذج. هنا نقدم طريقة تنزيل الإصدار FP16 من النموذج وتحويله يدويًا إلى إصدارات FP8 وINT4 المكمَّمة (بالطبع، يمكنك أيضًا تنزيل النموذج المكمَّم مباشرة على منصة Huggingface). يُوصى بتنزيل إصدار Instruct من منصة Huggingface. أولاً، قم بالتسجيل والدخول إلى منصة Huggingface، وأنشئ واحفظ Access Token للمستخدم الحالي في صفحة الإعدادات، والذي سيُستخدم عند تنزيل النموذج. افتح الصفحة الرئيسية لنموذج Llama3.1-405B: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct، وقدّم طلب النموذج إلى Meta، وانتظر حوالي نصف ساعة للحصول على التفويض. عد إلى خادم GPU، وقم بتثبيت برنامج عميل Huggingface، وابدأ في تنزيل النموذج باستخدام الأوامر التالية:

pip install huggingface-hub
huggingface-cli login  ## أدخل Access Token
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## ابدأ تنزيل النموذج الكبير 405B

بعد انتظار طويل (اعتمادًا على سرعة الشبكة الحالية)، يتم تنزيل النموذج الكبير 405B بحجم 800 جيجابايت بنجاح إلى المنطقة المحلية، ويمكن عرض معلومات النموذج المحددة عن طريق استدعاء “huggingface-cli scan-cache”. بعد ذلك، قم بإجراء التكميم FP8 وINT4 على النموذج الأصلي. أولاً، قم بتنزيل أداة تكميم FP8، ويمكنك استخدام AutoFP8 مفتوح المصدر مباشرة: https://github.com/neuralmagic/AutoFP8، واستخدام البرنامج النصي فيه للتكميم اليدوي، مع وضع التكميم ديناميكيًا، كما يلي:

git clone https://github.com/neural
magic/AutoFP8.git
cd AutoFP8
pip install -e .  ## قم بتجميع وتثبيت أداة AutoFP8 محليًا
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

يحدد البرنامج النصي للتكميم مسار الإخراج للنموذج المكمَّم باستخدام “–save-dir”. نظرًا لأنه تكميم للوزن فقط، فإن السرعة الإجمالية سريعة جدًا. يمكنك أيضًا تنزيل إصدار FP8 المكمَّم بواسطة Meta مباشرة: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8. أمر التنزيل كما يلي: huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 على غرار تكميم FP8، يمكنك استخدام AutoAWQ مفتوح المصدر لتكميم إصدار INT4. عنوان حل التكميم هذا هو: https://github.com/casper-hansen/AutoAWQ. طريقة التكميم كما يلي:

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## قم بتجميع وتثبيت أداة AutoAWQ محليًا
## قم بتعديل examples/quantize.py يدويًا
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# ابدأ التكميم
python examples/quantize.py

بناء إطار عمل الاستدلال

بفضل الدعم القوي من مجتمع المصادر المفتوحة، يُعتبر vLLM إطار عمل استدلال عالي الكفاءة على المستوى الصناعي، وهو غني جدًا بدعم النماذج الكبيرة، ويتم تحديثه في الوقت المناسب. بدءًا من الإصدار v0.5.3.post1، يدعم vLLM خدمة استدلال نماذج سلسلة Llama3.1. طريقة تنزيل شفرة مصدر vLLM وتجميعها كما يلي:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
pip install -e .

بعد نجاح التجميع، يمكنك بدء خدمة الاستدلال. بالإضافة إلى تجميع vLLM محليًا، يمكنك أيضًا تجميع vLLM في صورة Docker، كما يلي:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
docker build -t vllm_0.5.3.p1 .

يمكنك أيضًا تنزيل صورة vLLM الرسمية مباشرة:

docker pull vllm/vllm-openai:v0.5.3.post1

تشغيل خدمة الاستدلال

بعد الانتهاء من بناء إطار عمل الاستدلال vLLM، يمكنك تشغيل vLLM وتحميل نموذج Llama3.1-405B لبدء خدمة الاستدلال. بالنسبة لإطار عمل الاستدلال vLLM المُجمَّع محليًا، تحتاج إلى التبديل إلى الدليل الجذر لشفرة مصدر vLLM ثم تشغيل الأمر التالي لبدء خدمة الاستدلال:

cd vllm
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

إذا كنت تشغل خدمة الاستدلال في حاوية Docker، فيمكنك الرجوع إلى الأمر التالي لتشغيلها:

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

بمجرد تشغيل إطار عمل الاستدلال vLLM بنجاح، سيبدأ في الاستماع على المنفذ المحدد.

Novita AI هي المنصة السحابية الشاملة التي تطلق العنان لطموحاتك في الذكاء الاصطناعي. واجهات برمجة تطبيقات متكاملة، بدون خادم، ومثيل GPU - الأدوات الفعالة من حيث التكلفة التي تحتاجها. تخلص من البنية التحتية، ابدأ مجانًا، وحوّل رؤيتك في الذكاء الاصطناعي إلى واقع.

القراءة الموصى بها:

  1. من Docker إلى Kubernetes
  2. كشف أسرار جدولة Kubernetes: غوص عميق في المسندات والأولويات