قم بضبط Falcon 7B وغيره من برامج LLM على Amazon SageMaker باستخدام @remote Decorator


اليوم، تغطي نماذج الذكاء الاصطناعي التوليدية مجموعة متنوعة من المهام بدءًا من تلخيص النص والأسئلة والأجوبة وإنشاء الصور والفيديو. لتحسين جودة المخرجات، يتم استخدام أساليب مثل التعلم القصير والهندسة السريعة وتوليد الاسترجاع المعزز (RAG) والضبط الدقيق. يتيح لك الضبط الدقيق ضبط نماذج الذكاء الاصطناعي التوليدية هذه لتحقيق أداء محسن في المهام الخاصة بالمجال الخاص بك.

مع Amazon SageMaker، يمكنك الآن تشغيل مهمة تدريب SageMaker ببساطة عن طريق إضافة تعليق توضيحي إلى كود Python الخاص بك باستخدام @remote Decorator. ال SageMaker بيثون SDK يقوم تلقائيًا بترجمة بيئة مساحة العمل الحالية الخاصة بك، وأي تعليمات برمجية ومجموعات بيانات مرتبطة بمعالجة البيانات، إلى مهمة تدريب SageMaker التي يتم تشغيلها على منصة التدريب. يتمتع هذا بميزة كتابة التعليمات البرمجية بطريقة أكثر طبيعية وموجهة للكائنات، ولا يزال يستخدم إمكانات SageMaker لتشغيل مهام التدريب على مجموعة بعيدة مع الحد الأدنى من التغييرات.

في هذا المنشور، نعرض كيفية ضبط أ فالكون-7ب نماذج الأساس (FM) باستخدام أداة الديكورremote من SageMaker Python SDK. ويستخدم أيضا الضبط الدقيق الفعال للمعلمات من Hugging Face مكتبة (PEFT) وتقنيات التكميم من خلال bitsandbytes لدعم الضبط الدقيق. يمكن أيضًا استخدام الكود المعروض في هذه المدونة لضبط أجهزة FM الأخرى، مثل اللاما-2 13 ب.

قد تواجه التمثيلات الدقيقة لهذا النموذج تحديات في وضعها في الذاكرة على نموذج واحد أو حتى عدة نماذج وحدات معالجة الرسومات (GPUs) - أو قد تحتاج إلى مثيل أكبر. وبالتالي، من أجل تحسين هذا النموذج دون زيادة التكلفة، نستخدم التقنية المعروفة باسم LLMs الكمية مع محولات منخفضة الرتبة (QLoRA). يعد QLoRA أسلوبًا فعالاً للضبط الدقيق يقلل من استخدام ذاكرة LLMs مع الحفاظ على أداء جيد جدًا.

مميزات استخدام @remote Decorator

قبل المضي قدمًا، دعنا نفهم كيف يعمل برنامج الديكور عن بعد على تحسين إنتاجية المطورين أثناء العمل مع SageMaker:

  • يقوم @remote Decorator بتشغيل مهمة تدريبية مباشرةً باستخدام تعليمات برمجية python الأصلية، دون الاستدعاء الصريح لـ SageMaker Estimators وقنوات إدخال SageMaker
  • حاجز منخفض أمام دخول نماذج تدريب المطورين على SageMaker.
  • لا حاجة للتبديل بيئات التطوير المتكاملة (IDEs). استمر في كتابة التعليمات البرمجية حسب اختيارك لـ IDE واستدعاء وظائف تدريب SageMaker.
  • لا حاجة للتعرف على الحاويات. استمر في توفير التبعيات في ملف المتطلبات.txt وتزويد ذلك لمصمم الديكور البعيد.

المتطلبات الأساسية

يلزم وجود حساب AWS مع دور AWS Identity and Access Management (AWS IAM) الذي يتمتع بأذونات لإدارة الموارد التي تم إنشاؤها كجزء من الحل. للحصول على التفاصيل، راجع إنشاء حساب AWS.

في هذا المنشور، نستخدم Amazon SageMaker Studio مع علم البيانات 3.0 صورة و أ ml.t3.medium مثيل التشغيل السريع. ومع ذلك، يمكنك استخدام أي بيئة تطوير متكاملة (IDE) من اختيارك. تحتاج فقط إلى إعداد بيانات اعتماد واجهة سطر أوامر AWS (AWS CLI) بشكل صحيح. لمزيد من المعلومات، راجع تكوين AWS CLI.

من أجل الضبط الدقيق، تم استخدام Falcon-7B ml.g5.12xlarge يتم استخدام المثال في هذا المنصب. يرجى التأكد من وجود سعة كافية لهذا المثيل في حساب AWS.

تحتاج إلى استنساخ هذا مستودع جيثب لتكرار الحل الموضح في هذا المنشور.

حل نظرة عامة

  1. قم بتثبيت المتطلبات المسبقة لضبط طراز Falcon-7B
  2. قم بإعداد تكوينات الديكور عن بعد
  3. المعالجة المسبقة لمجموعة البيانات التي تحتوي على الأسئلة الشائعة حول خدمات AWS
  4. ضبط Falcon-7B على الأسئلة الشائعة حول خدمات AWS
  5. اختبر نماذج الضبط الدقيق على نماذج الأسئلة المتعلقة بخدمات AWS

1. قم بتثبيت المتطلبات الأساسية لضبط طراز Falcon-7B

إطلاق دفتر الملاحظات falcon-7b-qlora-remote-decorator_qa.ipynb في SageMaker Studio عن طريق تحديد ملف Iبركه مثل علم البيانات و نواة مثل بايثون 3. قم بتثبيت جميع المكتبات المطلوبة المذكورة في ملف المتطلبات.txt. يلزم تثبيت عدد قليل من المكتبات على مثيل الكمبيوتر المحمول نفسه. تنفيذ العمليات الأخرى اللازمة لمعالجة مجموعة البيانات وتفعيل مهمة تدريب SageMaker.

%pip تثبيت -r متطلبات.txt %pip تثبيت -q -U المحولات ==4.31.0 %pip تثبيت -q -U مجموعات البيانات==2.13.1 %pip تثبيت -q -U peft==0.4.0 %pip تثبيت -q -U تسريع ==0.21.0 تثبيت %pip -q -U bitsandbytes==0.40.2 تثبيت %pip -q -U boto3 %pip تثبيت -q -U sagemaker==2.154.0 تثبيت %pip -q -U scikit-learn

2. إعداد تكوينات الديكور عن بعد

قم بإنشاء ملف تكوين حيث يتم تحديد كافة التكوينات المتعلقة بمهمة تدريب Amazon SageMaker. تتم قراءة هذا الملف بواسطة @remote Decorator أثناء تشغيل مهمة التدريب. يحتوي هذا الملف على إعدادات مثل التبعيات وصورة التدريب والمثيل ودور التنفيذ الذي سيتم استخدامه لمهمة التدريب. للحصول على مرجع تفصيلي لجميع الإعدادات التي يدعمها ملف التكوين، راجع تكوين الإعدادات الافتراضية واستخدامها مع SageMaker Python SDK.

SchemaVersion: '1.0' SageMaker: PythonSDK: الوحدات النمطية: RemoteFunction: التبعيات: ./requirements.txt ImageUri: '{aws_account_id}.dkr.ecr.{region}.amazonaws.com/huggingface-pytorch-training:2.0.0-transformers4 .28.1-gpu-py310-cu118-ubuntu20.04' نوع المثيل: ml.g5.12xlarge

ليس من الضروري استخدام config.yaml الملف للعمل مع @remote Decorator. هذه مجرد طريقة أنظف لتزويد جميع التكوينات لمصمم الديكور @remote. يؤدي هذا إلى إبقاء المعلمات ذات الصلة بـ SageMaker وAWS خارج التعليمات البرمجية بجهد لمرة واحدة لإعداد ملف التكوين المستخدم عبر أعضاء الفريق. يمكن أيضًا توفير جميع التكوينات مباشرةً في وسيطات الديكور، لكن هذا يقلل من إمكانية قراءة التغييرات وقابليتها للصيانة على المدى الطويل. كما يمكن للمسؤول إنشاء ملف التكوين ومشاركته مع كافة المستخدمين في البيئة.

المعالجة المسبقة لمجموعة البيانات التي تحتوي على الأسئلة الشائعة حول خدمات AWS

الخطوة التالية هي تحميل مجموعة البيانات ومعالجتها مسبقًا لجعلها جاهزة لمهمة التدريب. أولاً، دعونا نلقي نظرة على مجموعة البيانات:

مل 15194 صورة 001

يعرض الأسئلة الشائعة لإحدى خدمات AWS. بالإضافة إلى QLoRA، bitsanbytes يستخدم للتحويل إلى دقة 4 بت لتكميم LLM المجمدة إلى 4 بت وإرفاقها لورا محولات عليه.

قم بإنشاء قالب مطالبة لتحويل كل نموذج للأسئلة الشائعة إلى تنسيق مطالبة:

من الاستيراد العشوائي randint #، تعليمات مخصصة لبدء المطالبة موجه = f"{{question}}\n---\nإجابة:\n{{answer}}{{eos_token}}" مجموعة بيانات قالب # لإضافة مطالبة إلى كل عينة من template_dataset (عينة): Sample["text"] = موجه_template.format(question=sample["question"],answer=sample["answers"], eos_token=tokenizer.eos_token) نموذج الإرجاع

الخطوة التالية هي تحويل المدخلات (النص) إلى معرفات الرمز المميز. يتم ذلك بواسطة أ معانقة محولات الوجه الرمزية.

من المحولات قم باستيراد AutoTokenizer model_id = "tiiuae/falcon-7b" tokenizer = AutoTokenizer.from_pretrained(model_id) # قم بتعيين رمز Falcon tokenizer.pad_token = tokenizer.eos_token

الآن ببساطة استخدم Prompt_template وظيفة لتحويل جميع الأسئلة الشائعة إلى تنسيق سريع وإعداد مجموعات بيانات التدريب والاختبار.

مل 15194 صورة 003

4. قم بضبط Falcon-7B على الأسئلة الشائعة حول خدمات AWS

يمكنك الآن إعداد البرنامج النصي للتدريب وتحديد وظيفة التدريب Train_fn وقم بوضع @remote Decorator على الوظيفة.

تقوم وظيفة التدريب بما يلي:

  • يرمز ويقطع مجموعة البيانات
  • يثبت BitsAndBytesConfig، والذي يحدد أنه يجب تحميل النموذج في 4 بت ولكن أثناء الحساب يجب أن يتم تحويله إلى bfloat16.
  • قم بتحميل النموذج
  • ابحث عن الوحدات المستهدفة وقم بتحديث المصفوفات الضرورية باستخدام طريقة الأداة المساعدة find_all_linear_names
  • يخلق لورا التكوينات التي تحدد تصنيف مصفوفات التحديث (س) ، عامل التحجيم (lora_alpha)، وحدات تطبيق مصفوفات تحديث LoRA (target_modules) ، احتمالية التسرب لطبقات لورا(lora_dropout), نوع المهمة، إلخ.
  • ابدأ التدريب والتقييم
import bitsandbytes as bnb

def find_all_linear_names(hf_model):
    lora_module_names = set()
    for name, module in hf_model.named_modules():
        if isinstance(module, bnb.nn.Linear4bit):
            names = name.split(".")
            lora_module_names.add(names[0] if len(names) == 1 else names[-1])

    if "lm_head" in lora_module_names:
        lora_module_names.remove("lm_head")
    return list(lora_module_names)
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from sagemaker.remote_function import remote
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import transformers

# Start training
@remote(volume_size=50)
def train_fn(
        model_name,
        train_ds,
        test_ds,
        lora_r=8,
        lora_alpha=32,
        lora_dropout=0.05,
        per_device_train_batch_size=8,
        per_device_eval_batch_size=8,
        learning_rate=2e-4,
        num_train_epochs=1
):
    # tokenize and chunk dataset
    lm_train_dataset = train_ds.map(
        lambda sample: tokenizer(sample["text"]), batched=True, batch_size=24, remove_columns=list(train_dataset.features)
    )


    lm_test_dataset = test_ds.map(
        lambda sample: tokenizer(sample["text"]), batched=True, remove_columns=list(test_dataset.features)
    )

    # Print total number of samples
    print(f"Total number of train samples: {len(lm_train_dataset)}")

    bnb_config = BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_use_double_quant=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16
    )
    # Falcon requires you to allow remote code execution. This is because the model uses a new architecture that is not part of transformers yet.
    # The code is provided by the model authors in the repo.
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        trust_remote_code=True,
        quantization_config=bnb_config,
        device_map="auto")

    model.gradient_checkpointing_enable()
    model = prepare_model_for_kbit_training(model, use_gradient_checkpointing=True)

    # get lora target modules
    modules = find_all_linear_names(model)
    print(f"Found {len(modules)} modules to quantize: {modules}")

    config = LoraConfig(
        r=lora_r,
        lora_alpha=lora_alpha,
        target_modules=modules,
        lora_dropout=lora_dropout,
        bias="none",
        task_type="CAUSAL_LM"
    )

    model = get_peft_model(model, config)
    print_trainable_parameters(model)

    trainer = transformers.Trainer(
        model=model,
        train_dataset=lm_train_dataset,
        eval_dataset=lm_test_dataset,
        args=transformers.TrainingArguments(
            per_device_train_batch_size=per_device_train_batch_size,
            per_device_eval_batch_size=per_device_eval_batch_size,
            logging_steps=2,
            num_train_epochs=num_train_epochs,
            learning_rate=learning_rate,
            bf16=True,
            save_strategy="no",
            output_dir="outputs"
        ),
        data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),
    )
    model.config.use_cache = False

    trainer.train()
    trainer.evaluate()

    model.save_pretrained("/opt/ml/model")

واستدعاء قطار_fn()

Train_fn(model_id، Train_dataset، test_dataset)

سيتم تشغيل مهمة الضبط في مجموعة تدريب Amazon SageMaker. انتظر حتى تنتهي مهمة الضبط.

5. اختبر نماذج الضبط الدقيق على نماذج من الأسئلة المتعلقة بخدمات AWS

والآن حان الوقت لإجراء بعض الاختبارات على النموذج. أولا نقوم بتحميل النموذج:

من peft import PeftModel، PeftConfig استيراد الشعلة من المحولات استيراد AutoModelForCausalLM جهاز = "cuda" إذا torch.cuda.is_available () else 'mps' إذا torch.backends.mps.is_available() else 'cpu' config = PeftConfig.from_pretrained(" ./model") model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, Trust_remote_code=True) model = PeftModel.from_pretrained(model, "./model") model.to(device)

الآن قم بتحميل نموذج سؤال من مجموعة بيانات التدريب لرؤية الإجابة الأصلية ثم اطرح نفس السؤال من النموذج المضبوط لرؤية الإجابة بالمقارنة.

فيما يلي نموذج لسؤال من مجموعة التدريب والإجابة الأصلية:

مل 15194 صورة 005

الآن، يتم طرح نفس السؤال على طراز Falcon-7B الذي تم ضبطه:

مل 15194 صورة 007

بهذا ينتهي تنفيذ الضبط الدقيق لـ Falcon-7B على مجموعة بيانات الأسئلة الشائعة لخدمات AWS باستخدام @remote Decorator من Amazon SageMaker Python SDK.

تنظيف

أكمل الخطوات التالية لتنظيف مواردك:

  • قم بإيقاف تشغيل مثيلات Amazon SageMaker Studio لتجنب تكبد تكاليف إضافية.
  • قم بتنظيف دليل Amazon Elastic File System (Amazon EFS) الخاص بك عن طريق مسح دليل ذاكرة التخزين المؤقت Hugging Face:
    rm -R ~/.cache/huggingface/hub

خاتمة

في هذا المنشور، أظهرنا لك كيفية استخدام إمكانات @remote Decorator بشكل فعال لضبط نموذج Falcon-7B باستخدام QLoRA، Hugging Face PEFT مع bitsandbtyes دون تطبيق تغييرات كبيرة في دفتر التدريب، واستخدمت إمكانات Amazon SageMaker لتشغيل مهام التدريب على مجموعة بعيدة.

كل التعليمات البرمجية الموضحة كجزء من هذا المنشور لضبط Falcon-7B متاحة في مستودع جيثب. يحتوي المستودع أيضًا على دفتر ملاحظات يوضح كيفية ضبط Llama-13B.

كخطوة تالية، نشجعك على التحقق من وظيفة @remote Decorator و واجهة برمجة تطبيقات بايثون SDK واستخدامها في اختيارك للبيئة وIDE. تتوفر أمثلة إضافية في أمثلة الأمازون-sagemaker مستودع لتبدأ بسرعة. يمكنك أيضًا الاطلاع على المشاركات التالية:


عن المؤلفين

برونو بيستونبرونو بيستون هو مهندس حلول متخصص في الذكاء الاصطناعي/تعلم الآلة لشركة AWS ومقره في ميلانو. إنه يعمل مع كبار العملاء لمساعدتهم على فهم احتياجاتهم التقنية بعمق وتصميم حلول الذكاء الاصطناعي والتعلم الآلي التي تحقق أفضل استفادة من AWS Cloud ومكدس Amazon Machine Learning. تشمل خبرته: التعلم الآلي الشامل، وتصنيع التعلم الآلي، والذكاء الاصطناعي التوليدي. يستمتع بقضاء الوقت مع أصدقائه واستكشاف أماكن جديدة، بالإضافة إلى السفر إلى وجهات جديدة.

فيكيش بانديفيكيش باندي هو مهندس حلول متخصص في التعلم الآلي في AWS، حيث يساعد العملاء من الصناعات المالية على تصميم وبناء الحلول على الذكاء الاصطناعي وتعلم الآلة. خارج العمل، يستمتع فيكيش بتجربة المأكولات المختلفة وممارسة الرياضة في الهواء الطلق.



رابط المصدر

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المطلوبة مشار إليها *

يمكنك استخدام علامات وسمات HTML هذه: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

arArabic