Transformers documentation

Llama3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 31 يوليو 2024، وأُضيف إلى مكتبة Hugging Face Transformers في 24 أبريل 2024.

Llama3

Tensor parallelism
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. تستخدم نقاط التفتيش المرفوعة على Hub dtype = '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