@रिमोट डेकोरेटर के साथ अमेज़ॅन सेजमेकर पर फाल्कन 7बी और अन्य एलएलएम को फाइन-ट्यून करें


आज, जेनेरिक एआई मॉडल पाठ सारांश, प्रश्नोत्तर, और छवि और वीडियो निर्माण से लेकर विभिन्न प्रकार के कार्यों को कवर करते हैं। आउटपुट की गुणवत्ता में सुधार के लिए एन-शॉर्ट लर्निंग, प्रॉम्प्ट इंजीनियरिंग, रिट्रीवल ऑगमेंटेड जेनरेशन (आरएजी) और फाइन ट्यूनिंग जैसे तरीकों का उपयोग किया जाता है। फाइन-ट्यूनिंग आपको अपने डोमेन-विशिष्ट कार्यों पर बेहतर प्रदर्शन प्राप्त करने के लिए इन जेनरेटिव एआई मॉडल को समायोजित करने की अनुमति देता है।

अमेज़ॅन सेजमेकर के साथ, अब आप @remote डेकोरेटर के साथ अपने पायथन कोड को एनोटेट करके सेजमेकर प्रशिक्षण कार्य चला सकते हैं। सेजमेकर पायथन एसडीके स्वचालित रूप से आपके मौजूदा कार्यक्षेत्र वातावरण और किसी भी संबंधित डेटा प्रोसेसिंग कोड और डेटासेट को सेजमेकर प्रशिक्षण कार्य में अनुवादित करता है जो प्रशिक्षण प्लेटफ़ॉर्म पर चलता है। इससे कोड को अधिक प्राकृतिक, ऑब्जेक्ट-ओरिएंटेड तरीके से लिखने का लाभ मिलता है, और यह अभी भी न्यूनतम परिवर्तनों के साथ दूरस्थ क्लस्टर पर प्रशिक्षण कार्य चलाने के लिए सेजमेकर क्षमताओं का उपयोग करता है।

इस पोस्ट में, हम दिखाते हैं कि इसे कैसे ठीक किया जाए फाल्कन-7बी फाउंडेशन मॉडल (एफएम) सेजमेकर पायथन एसडीके से @रिमोट डेकोरेटर का उपयोग कर रहा है। यह भी प्रयोग करता है हगिंग फेस की पैरामीटर-कुशल फ़ाइन-ट्यूनिंग (पीईएफटी) पुस्तकालय और परिमाणीकरण तकनीकों के माध्यम से बिटसैंडबाइट्स फाइन-ट्यूनिंग का समर्थन करने के लिए। इस ब्लॉग में प्रस्तुत कोड का उपयोग अन्य एफएम को फाइन-ट्यून करने के लिए भी किया जा सकता है, जैसे लामा-2 13बी.

इस मॉडल के पूर्ण सटीक निरूपण में एक या कई मेमोरी में फिट होने की चुनौतियाँ हो सकती हैं ग्राफिक प्रोसेसिंग यूनिट (जीपीयू) - या किसी बड़े उदाहरण की भी आवश्यकता हो सकती है। इसलिए, लागत में वृद्धि किए बिना इस मॉडल को बेहतर बनाने के लिए, हम नामक तकनीक का उपयोग करते हैं निम्न-रैंक एडेप्टर (क्यूएलओआरए) के साथ मात्राबद्ध एलएलएम. QLoRA एक कुशल फाइन-ट्यूनिंग दृष्टिकोण है जो बहुत अच्छा प्रदर्शन बनाए रखते हुए एलएलएम के मेमोरी उपयोग को कम करता है।

@रिमोट डेकोरेटर का उपयोग करने के लाभ

आगे बढ़ने से पहले, आइए समझें कि सेजमेकर के साथ काम करते समय रिमोट डेकोरेटर डेवलपर उत्पादकता में कैसे सुधार करता है:

  • @रिमोट डेकोरेटर सेजमेकर एस्टिमेटर्स और सेजमेकर इनपुट चैनलों के स्पष्ट आह्वान के बिना, सीधे देशी पायथन कोड का उपयोग करके एक प्रशिक्षण कार्य शुरू करता है
  • सेजमेकर पर डेवलपर्स प्रशिक्षण मॉडल के लिए प्रवेश के लिए कम बाधा।
  • स्विच करने की कोई आवश्यकता नहीं एकीकृत विकास वातावरण (आईडीई). अपनी पसंद की आईडीई में कोड लिखना जारी रखें और सेजमेकर प्रशिक्षण नौकरियों का आह्वान करें।
  • कंटेनरों के बारे में जानने की जरूरत नहीं है. a में निर्भरताएँ प्रदान करना जारी रखें आवश्यकताएँ.txt और उसे रिमोट डेकोरेटर को सप्लाई करें।

आवश्यक शर्तें

AWS आइडेंटिटी एंड एक्सेस मैनेजमेंट (AWS IAM) भूमिका के साथ एक AWS खाते की आवश्यकता होती है जिसमें समाधान के हिस्से के रूप में बनाए गए संसाधनों को प्रबंधित करने की अनुमति होती है। विवरण के लिए, AWS खाता बनाना देखें।

इस पोस्ट में, हम Amazon SageMaker Studio का उपयोग करेंगे डेटा साइंस 3.0 छवि और ए ml.t3.मध्यम तेज़ लॉन्च उदाहरण। हालाँकि, आप अपनी पसंद के किसी भी एकीकृत विकास वातावरण (आईडीई) का उपयोग कर सकते हैं। आपको बस अपना AWS कमांड लाइन इंटरफ़ेस (AWS CLI) क्रेडेंशियल सही ढंग से सेट करना होगा। अधिक जानकारी के लिए, AWS CLI कॉन्फ़िगर करें देखें।

फाइन-ट्यूनिंग के लिए, फाल्कन-7बी, ए ml.g5.12xबड़ा इस पोस्ट में उदाहरण का उपयोग किया गया है। कृपया AWS खाते में इस उदाहरण के लिए पर्याप्त क्षमता सुनिश्चित करें।

आपको इसे क्लोन करना होगा जीथब भंडार इस पोस्ट में प्रदर्शित समाधान की नकल करने के लिए।

समाधान सिंहावलोकन

  1. फाल्कन-7बी मॉडल को ठीक करने के लिए पूर्व-आवश्यकताएँ स्थापित करें
  2. रिमोट डेकोरेटर कॉन्फ़िगरेशन सेट करें
  3. AWS सेवाओं वाले FAQ वाले डेटासेट को प्रीप्रोसेस करें
  4. AWS सेवाओं के अक्सर पूछे जाने वाले प्रश्नों पर फाल्कन-7बी को फाइन-ट्यून करें
  5. AWS सेवाओं से संबंधित नमूना प्रश्नों पर फाइन-ट्यून मॉडल का परीक्षण करें

1. फाल्कन-7बी मॉडल को ठीक करने के लिए पूर्वापेक्षाएँ स्थापित करें

नोटबुक लॉन्च करें falcon-7b-qlora-रिमोट-डेकोरेटर_qa.ipynb सेजमेकर स्टूडियो में I का चयन करकेजादूगर जैसा डेटा विज्ञान और गुठली जैसा पायथन 3. में उल्लिखित सभी आवश्यक लाइब्रेरी स्थापित करें आवश्यकताएँ.txt. कुछ पुस्तकालयों को नोटबुक इंस्टेंस पर ही स्थापित करने की आवश्यकता है। डेटासेट प्रोसेसिंग और सेजमेकर प्रशिक्षण कार्य को ट्रिगर करने के लिए आवश्यक अन्य ऑपरेशन करें।

%pip इंस्टाल -r require.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 1टीपी3टीपीआईपी इंस्टॉल -क्यू -यू बिट्सैंडबाइट्स==0.40.2 1टीपी3टीपीआईपी इंस्टॉल -क्यू -यू बोटो3 1टीपी3टीपीआईपी इंस्टॉल -क्यू -यू सेजमेकर==2.154.0 1टीपी3टीपीआईपी इंस्टॉल -क्यू -यू स्किकिट-लर्न

2. रिमोट डेकोरेटर कॉन्फ़िगरेशन सेटअप करें

एक कॉन्फ़िगरेशन फ़ाइल बनाएं जहां Amazon SageMaker प्रशिक्षण कार्य से संबंधित सभी कॉन्फ़िगरेशन निर्दिष्ट हैं। प्रशिक्षण कार्य चलाते समय यह फ़ाइल @रिमोट डेकोरेटर द्वारा पढ़ी जाती है। इस फ़ाइल में प्रशिक्षण कार्य के लिए उपयोग की जाने वाली निर्भरता, प्रशिक्षण छवि, उदाहरण और निष्पादन भूमिका जैसी सेटिंग्स शामिल हैं। कॉन्फ़िगरेशन फ़ाइल द्वारा समर्थित सभी सेटिंग्स के विस्तृत संदर्भ के लिए, देखें सेजमेकर पायथन एसडीके के साथ डिफॉल्ट्स को कॉन्फ़िगर करना और उनका उपयोग करना.

स्कीमा संस्करण: '1.0' सेजमेकर: पायथनएसडीके: मॉड्यूल: रिमोटफंक्शन: निर्भरता: ./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 रोलअर्न: arn:aws:iam::111122223333:role/ExampleSageMakerRole

का उपयोग करना अनिवार्य नहीं है config.yaml @रिमोट डेकोरेटर के साथ काम करने के लिए फ़ाइल। यह @remote डेकोरेटर को सभी कॉन्फ़िगरेशन की आपूर्ति करने का एक साफ-सुथरा तरीका है। यह टीम के सदस्यों द्वारा उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइल को सेट करने के लिए एक बार के प्रयास के साथ SageMaker और AWS संबंधित पैरामीटर को कोड के बाहर रखता है। सभी कॉन्फ़िगरेशन सीधे डेकोरेटर तर्कों में भी प्रदान किए जा सकते हैं, लेकिन इससे लंबे समय में परिवर्तनों की पठनीयता और रखरखाव कम हो जाता है। साथ ही, कॉन्फ़िगरेशन फ़ाइल एक व्यवस्थापक द्वारा बनाई जा सकती है और एक वातावरण में सभी उपयोगकर्ताओं के साथ साझा की जा सकती है।

AWS सेवाओं वाले FAQ वाले डेटासेट को प्रीप्रोसेस करें

अगला कदम डेटासेट को प्रशिक्षण कार्य के लिए तैयार करने के लिए लोड और प्रीप्रोसेस करना है। सबसे पहले, आइए डेटासेट पर एक नज़र डालें:

एमएल 15194 इमेज001

यह AWS सेवाओं में से एक के लिए अक्सर पूछे जाने वाले प्रश्न दिखाता है। QLoRA के अलावा, बिटसनबाइट्स जमे हुए एलएलएम को 4-बिट में परिमाणित करने और संलग्न करने के लिए 4-बिट परिशुद्धता में परिवर्तित करने के लिए उपयोग किया जाता है लोरा उस पर एडाप्टर.

प्रत्येक FAQ नमूने को प्रॉम्प्ट प्रारूप में बदलने के लिए एक प्रॉम्प्ट टेम्पलेट बनाएँ:

रैंडम इंपोर्ट रैंडिंट से # कस्टम इंस्ट्रक्शन प्रॉम्प्ट स्टार्ट प्रॉम्प्ट_टेम्प्लेट = f"{{प्रश्न}}\n---\nउत्तर:\n{{answer}}{{eos_token}}" # टेम्प्लेट डेटासेट प्रत्येक सैंपल डीईएफ़ टेम्प्लेट_डेटासेट में प्रॉम्प्ट जोड़ने के लिए (नमूना): नमूना["पाठ"] = प्रॉम्प्ट_टेम्पलेट.फॉर्मेट(प्रश्न=नमूना["प्रश्न"], उत्तर=नमूना["उत्तर"], ईओएस_टोकन=टोकनाइज़र.ईओएस_टोकन) वापसी नमूना

अगला कदम इनपुट (टेक्स्ट) को टोकन आईडी में बदलना है। यह एक द्वारा किया जाता है हगिंग फेस ट्रांसफॉर्मर टोकनाइज़र.

ट्रांसफॉर्मर से आयात ऑटोटोकनाइज़र मॉडल_आईडी = "tiiuae/falcon-7b" टोकननाइज़र = AutoTokenizer.from_pretrained(model_id) # फाल्कन टोकननाइज़र सेट करें टोकननाइज़र.पैड_टोकन = टोकननाइज़र.ईओएस_टोकन

अब बस इसका उपयोग करें प्रॉम्प्ट_टेम्पलेट सभी FAQ को प्रॉम्प्ट प्रारूप में बदलने और ट्रेन और परीक्षण डेटासेट सेट करने का कार्य।

एमएल 15194 इमेज003

4. एडब्ल्यूएस सेवाओं के अक्सर पूछे जाने वाले प्रश्नों पर फाल्कन-7बी को फाइन ट्यून करें

अब आप प्रशिक्षण स्क्रिप्ट तैयार कर सकते हैं और प्रशिक्षण फ़ंक्शन को परिभाषित कर सकते हैं ट्रेन_एफएन और फ़ंक्शन पर @remote डेकोरेटर डालें।

प्रशिक्षण कार्य निम्नलिखित कार्य करता है:

  • डेटासेट को टोकनाइज़ और खंडित करता है
  • स्थापित करना BitsAndBytesConfig, जो निर्दिष्ट करता है कि मॉडल को 4-बिट में लोड किया जाना चाहिए लेकिन गणना करते समय इसे परिवर्तित किया जाना चाहिए bfloat16.
  • मॉडल लोड करें
  • उपयोगिता विधि का उपयोग करके लक्ष्य मॉड्यूल ढूंढें और आवश्यक मैट्रिक्स को अपडेट करें सभी_रैखिक_नाम खोजें
  • बनाएं लोरा कॉन्फ़िगरेशन जो अद्यतन मैट्रिक्स की रैंकिंग निर्दिष्ट करते हैं (एस), मापन कारक (lora_alpha), लोरा अपडेट मैट्रिसेस लागू करने के लिए मॉड्यूल (लक्ष्य_मॉड्यूल), लोरा परतों के लिए ड्रॉपआउट संभावना(लोरा_ड्रॉपआउट), कार्य_प्रकार, वगैरह।
  • प्रशिक्षण और मूल्यांकन प्रारंभ करें
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")

और आह्वान करें ट्रेन_एफएन()

ट्रेन_एफएन (मॉडल_आईडी, ट्रेन_डेटासेट, टेस्ट_डेटासेट)

ट्यूनिंग कार्य Amazon SageMaker प्रशिक्षण क्लस्टर पर चलेगा। ट्यूनिंग कार्य समाप्त होने तक प्रतीक्षा करें।

5. AWS सेवाओं से संबंधित नमूना प्रश्नों पर फाइन ट्यून मॉडल का परीक्षण करें

अब, मॉडल पर कुछ परीक्षण चलाने का समय आ गया है। सबसे पहले, आइए मॉडल लोड करें:

PEFT आयात से PeftModel, PeftConfig आयात टॉर्च ट्रांसफार्मर से आयात AutoModelForCausalLM डिवाइस = "cuda" यदि torch.cuda.is_available() अन्यथा 'mps' यदि torch.backends.mps.is_available() अन्यथा 'cpu' config = PeftConfig.from_pretrained(" ./मॉडल") मॉडल = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, Trust_remote_code=True) मॉडल = PeftModel.from_pretrained(model, "./model") model.to(device)

अब मूल उत्तर देखने के लिए प्रशिक्षण डेटासेट से एक नमूना प्रश्न लोड करें और फिर तुलना में उत्तर देखने के लिए ट्यून किए गए मॉडल से वही प्रश्न पूछें।

यहां प्रशिक्षण सेट से एक प्रश्न और मूल उत्तर का नमूना दिया गया है:

एमएल 15194 छवि005

अब, फाल्कन-7बी मॉडल को ट्यून करने के लिए भी यही प्रश्न पूछा जा रहा है:

एमएल 15194 छवि007

यह Amazon SageMaker Python SDK से @remote डेकोरेटर का उपयोग करके AWS सेवाओं FAQ डेटासेट पर फाइन ट्यूनिंग फाल्कन-7B के कार्यान्वयन को समाप्त करता है।

सफाई

अपने संसाधनों को साफ़ करने के लिए निम्नलिखित चरणों को पूरा करें:

  • अतिरिक्त लागत से बचने के लिए Amazon SageMaker Studio इंस्टेंस को बंद करें।
  • हगिंग फेस कैश निर्देशिका को साफ़ करके अपनी अमेज़ॅन इलास्टिक फ़ाइल सिस्टम (अमेज़ॅन ईएफएस) निर्देशिका को साफ़ करें:
    आरएम -आर ~/.कैश/हगिंगफेस/हब

निष्कर्ष

इस पोस्ट में, हमने आपको दिखाया कि QLoRA, हगिंग फेस PEFT का उपयोग करके फाल्कन-7B मॉडल को फाइन-ट्यून करने के लिए @रिमोट डेकोरेटर की क्षमताओं का प्रभावी ढंग से उपयोग कैसे किया जाए। bitsandbtyes प्रशिक्षण नोटबुक में महत्वपूर्ण परिवर्तन लागू किए बिना, और दूरस्थ क्लस्टर पर प्रशिक्षण कार्य चलाने के लिए अमेज़ॅन सेजमेकर क्षमताओं का उपयोग किया।

फाल्कन-7बी को फाइन-ट्यून करने के लिए इस पोस्ट के हिस्से के रूप में दिखाए गए सभी कोड उपलब्ध हैं गिटहब रिपॉजिटरी. रिपॉजिटरी में नोटबुक भी शामिल है जिसमें दिखाया गया है कि लामा-13बी को कैसे ठीक किया जाए।

अगले चरण के रूप में, हम आपको @रिमोट डेकोरेटर कार्यक्षमता की जांच करने के लिए प्रोत्साहित करते हैं पायथन एसडीके एपीआई और इसे अपनी पसंद के वातावरण और आईडीई में उपयोग करें। अतिरिक्त उदाहरण यहां उपलब्ध हैं अमेज़ॅन-सेजमेकर-उदाहरण आपको शीघ्रता से आरंभ करने के लिए भंडार। आप निम्नलिखित पोस्ट भी देख सकते हैं:


लेखक के बारे में

ब्रूनो पिस्टनब्रूनो पिस्टन मिलान स्थित AWS के लिए एक AI/ML स्पेशलिस्ट सॉल्यूशंस आर्किटेक्ट है। वह बड़े ग्राहकों के साथ काम करते हैं और उन्हें उनकी तकनीकी जरूरतों को गहराई से समझने और एआई और मशीन लर्निंग समाधान डिजाइन करने में मदद करते हैं जो एडब्ल्यूएस क्लाउड और अमेज़ॅन मशीन लर्निंग स्टैक का सबसे अच्छा उपयोग करते हैं। उनकी विशेषज्ञता में शामिल हैं: मशीन लर्निंग एंड टू एंड, मशीन लर्निंग औद्योगीकरण, और जेनरेटिव एआई। उसे अपने दोस्तों के साथ समय बिताना और नई जगहों की खोज करना, साथ ही नए गंतव्यों की यात्रा करना पसंद है।

विकेश पांडेविकेश पांडे AWS में एक मशीन लर्निंग स्पेशलिस्ट सॉल्यूशंस आर्किटेक्ट है, जो वित्तीय उद्योगों के ग्राहकों को जेनरेटिव AI और ML पर समाधान डिजाइन और निर्माण करने में मदद करता है। काम के अलावा, विकेश को विभिन्न व्यंजन आज़माना और आउटडोर खेल खेलना पसंद है।



स्रोत लिंक

उत्तर छोड़ दें

आपकी ईमेल आईडी प्रकाशित नहीं की जाएगी। आवश्यक फ़ील्ड चिह्नित हैं *

आप इन HTML टैग और विशेषताओं का उपयोग कर सकते हैं: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

hi_INHindi