Transformers documentation
Llama3
نُشر هذا النموذج في أوراق HF في 31 يوليو 2024، وأُضيف إلى مكتبة Hugging Face Transformers في 24 أبريل 2024.
Llama3
import torch
import transformers
model_id = "meta-llama/Meta-Llama-3-8B"
pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"dtype": torch.bfloat16}, device_map="auto")
pipeline("Hey how are you doing today?")نظرة عامة
قُدِّم نموذج Llama3 في Introducing Meta Llama 3: The most capable openly available LLM to date من قِبل فريق Meta AI.
المستخلص من المدونة هو كالتالي:
اليوم، يسعدنا أن نشارككم أول نموذجين من الجيل القادم من Llama، وهما Meta Llama 3، المتاحان للاستخدام الواسع. تتميز هذه الإصدار بنماذج لغوية مُدرَّبة مسبقًا ونماذج مُحسَّنة عبر التعليمات، بحجم 8B و70B من المعاملات، وقادرة على دعم مجموعة واسعة من حالات الاستخدام. يُظهر هذا الجيل الجديد من Llama أداءً متقدمًا على نطاق واسع من معايير الأداء الصناعية، ويقدّم قدرات جديدة، بما في ذلك تحسين الاستدلال. نعتقد أن هذه أفضل نماذج مفتوحة المصدر من فئتها، بلا منازع. ودعمًا لسياستنا طويلة الأمد في الانفتاح، نضع Llama 3 بين أيدي المجتمع. نريد أن نطلق العنان للموجة القادمة من الابتكار في مجال الذكاء الاصطناعي عبر كامل البنية التحتية — من التطبيقات إلى أدوات المطورين، ومن التقييمات إلى تحسينات الاستدلال وغيرها. لا ننتظر إلا لرؤية ما ستبنيونه، ونتطلع إلى تلقي ملاحظاتكم.
يمكنك الاطلاع على جميع نقاط التفتيش لنماذج Llama3 هنا. يمكن العثور على الكود الأصلي للمؤلفين هنا.
نصائح للاستخدام
تم تدريب نماذج
Llama3باستخدامbfloat16، لكن الاستدلال الأصلي يستخدمfloat16. تستخدم نقاط التفتيش المرفوعة على Hubdtype = 'float16'، والتي ستُستخدم بواسطة واجهةAutoModelلتحويل نقاط التفتيش منtorch.float32إلىtorch.float16.تُعدّ قيمة
dtypeللأوزان عبر الإنترنت غير ذات أهمية في الغالب، ما لم تكن تستخدمdtype="auto"عند تهيئة النموذج باستخدامmodel = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). والسبب في ذلك أن النموذج سيُحمَّل أولاً (باستخدامdtypeالخاص بنقاط التفتيش عبر الإنترنت)، ثم سيُحوَّل إلىdtypeالافتراضي لـtorch(حيث يصبحtorch.float32، مع device_map=“auto”)، وأخيراً، إذا كان هناكdtypeأوtorch_dtypeمُقدَّم في الإعدادات، فسيتم استخدامه.لا يُوصى بتدريب النموذج في
float16، ومن المعروف أنه ينتجnan؛ لذلك يجب تدريب النموذج فيbfloat16.
نصائح:
يمكن الحصول على أوزان نماذج Llama3 من خلال ملء هذا النموذج
المعمارية هي نفسها تمامًا مثل Llama2.
المُجزِّئ هو نموذج BPE مبني على tiktoken (على عكس ذلك المبني على تنفيذ sentencepiece الخاص بـ Llama2). الفارق الرئيسي أنه يتجاهل قواعد دمج BPE عندما يكون رمز الإدخال جزءاً من قاموس الرموز. وهذا يعني أنه إذا لم يوجد دمج لإنتاج
"hugging"، فبدلاً من الحصول على أصغر الوحدات، مثل["hug","ging"]التي تُشكّل رمزين، إذا كان"hugging"جزءاً من قاموس الرموز، فسيُعاد تلقائياً كرمز واحد.يستخدم النموذج الأصلي
pad_id = -1مما يعني أنه لا يوجد رمز تعبئة. لا يمكننا استخدام المنطق نفسه، لذا تأكد من إضافة رمز تعبئة باستخدامtokenizer.add_special_tokens({"pad_token":"<pad>"})وإعادة تحجيم تضمين الرموز وفقاً لذلك. كما يجب عليك تعيينmodel.config.pad_token_id. يتم تهيئة طبقةembed_tokensفي النموذج بواسطةself.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)، مما يضمن أن ترميز رمز التعبئة سيُخرج أصفاراً، لذا يُوصى بتمريره عند التهيئة.يمكن تحويل نقطة التفتيش الأصلية باستخدام سكربت التحويل. يمكن استدعاء السكربت بالأمر التالي (مثال):
python src/transformers/models/llama/convert_llama_weights_to_hf.py \ --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3بعد التحويل، يمكن تحميل النموذج ومجزّئ الرموز عبر:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("/output/path") model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")لاحظ أن تنفيذ السكربت يتطلب ذاكرة RAM كافية في المعالج المركزي لاستضافة النموذج بأكمله بدقة float16 (حتى لو جاءت أكبر الإصدارات على شكل عدة نقاط تحقق، فإن كل نقطة تحتوي على جزء من كل وزن في النموذج، لذا نحتاج إلى تحميلها جميعاً في الذاكرة). بالنسبة لنموذج 75B، فإن ذلك يتطلب 145GB من الذاكرة.
عند استخدام Flash Attention 2 عبر
attn_implementation="flash_attention_2"، لا تقم بتمريرdtypeإلى طريقة الفئةfrom_pretrainedواستخدم تدريب الدقة المختلطة التلقائية. عند استخدامTrainer، يكفي تحديدfp16أوbf16إلىTrue. وإلا، تأكد من أنك تستخدمtorch.autocast. هذا مطلوب لأن Flash Attention يدعم فقط نوعي البياناتfp16وbf16.
الموارد
تتوفر مجموعة كبيرة من الموارد الرائعة بالفعل على صفحة توثيق Llama2، ونرحّب بالمساهمين لإضافة موارد جديدة مُنتقاة خصيصاً لـ Llama3 هنا! 🤗
Update on GitHub