الضبط الدقيق لنموذج Granite LLM باستخدام LoRA

الضبط الدقيق لنموذج Granite باستخدام LoRA

التكيف منخفض الرتبة تُعَد LoRA طريقة فعّالة [للضبط الدقيق] (https://www.ibm.com/sa-ar/think/topics/fine-tuning) تقلِّل عدد المَعلمات القابلة للتدريب، ما يؤدي إلى زيادة سرعة التدريب وخفض استهلاك الموارد مع الحفاظ على جودة المخرجات نفسها. بدلًا من تحديث جميع المَعلمات في [الشبكة العصبية] (https://www.ibm.com/sa-ar/think/topics/neural-networks) أثناء الضبط الدقيق، تعمل LoRA على تجميد الأوزان المدرَّبة مسبقًا الأصلية وتضيف مصفوفات منخفضة الرتبة صغيرة قابلة للتدريب تُقارب التغييرات المطلوبة للمهمة الجديدة. تستند هذه الطريقة إلى الفرضية القائلة بأن تحديثات الأوزان أثناء التكيف تكون لها "رتبة جوهرية" منخفضة.

من الفوائد الإضافية لتقنية LoRA هي أنه بما أن الأوزان المدرَّبة مسبقًا تبقى ثابتة، فإن المحوِّل الذي تم إنشاؤه يكون خفيف الوزن وقابلًا للنقل ويمكن تخزينه بسهولة.

في هذا البرنامج التعليمي، سوف تستخدم LLaMa Factory. تُعَد LLaMa Factory منصة تدريب وضبط دقيق [للنماذج اللغوية الكبيرة] (LLM) (https://www.ibm.com/sa-ar/think/topics/large-language-models) منخفضة التعليمات البرمجية أو دون تعليمات برمجية، وتُتيح للمستخدمين ضبط النماذج على مجموعات بيانات مخصصة وتقييم الأداء ونشر النماذج. تحتوي المنصة على واجهة ويب وواجهة سطر أوامر سهلة الاستخدام، وتدعم أكثر من 100 نموذج لغوي كبير (LLM). تدعم المنصة مجموعات البيانات بتنسيقات Alpaca وShareGPT. لا تُعَد LLaMa Factory الطريقة الوحيدة لضبط النماذج اللغوية الكبيرة (LLMs) بدقة، إذ تُعَد مكتبة [PEFT] (https://www.ibm.com/sa-ar/think/topics/parameter-efficient-fine-tuning) الخاصة بالضبط الفعَّال للمَعلمات خيارًا آخر لتحديث النماذج الكبيرة. تُتيح PEFT إمكانية تنفيذ LoRA المكمَّمة (QLoRA) (https://www.ibm.com/sa-ar/think/topics/quantization) بهدف زيادة ضغط النموذج المضبوط بدقة بشكل أكبر. في هذا البرنامج التعليمي، ستستخدم إصدارًا غير مكمَّم من Granite 3.3.

رغم أن منصة LLaMa Factory يمكن تشغيلها دون الحاجة إلى موارد حسابية ضخمة، إلا أنها تتطلب وجود [وحدة معالجة رسومات (GPU)] (https://www.ibm.com/sa-ar/think/topics/gpu) وموارد ذاكرة كبيرة نسبيًا. في هذا الدليل، ستستخدم منصة LLaMa Factory على ®watsonx لتوفير موارد GPU ومساحة تخزين للمحوِّل الذي يتم إنشاؤه.

التكوين

تكوين Watson Studio

أ. سجِّل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.

ب. أنشئ مشروع watsonx.ai. دوِّن معرِّف مشروعك من خلال المسار: المشروع > إدارة > عام > معرِّف المشروع  
ستحتاج إلى هذا المعرِّف لهذا البرنامج التعليمي.

ج. أنشئ مثيل خدمة watsonx.ai Runtime. بالنسبة لهذا البرنامج التعليمي، ستحتاج إلى إنشاء مثيل مدفوع للوصول إلى وحدة معالجة الرسومات (GPU).

د. أنشئ واجهة برمجة التطبيقات watsonx (مفتاح API).

هـ. اربط خدمة watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.

Cloud Object Storage

أ. لإنشاء Cloud Object Storage لدفتر ملاحظاتك، ستنتقل إلى https://cloud.ibm.com/ ثم حدِّد "إنشاء مثيل (Create Instance)".

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

ج. اختَر اسمًا لمثيل Cloud Object Storage الخاص بك.

د. بمجرد إنشاء المثيل الخاص بك، ارجع إلى المشروع واختَر "أصل جديد (New Asset)"، ثم اختَر "الاتصال بمصدر بيانات (Connect to a data source)".

صورة توضِّح اتصال watsonx.data لـ Cloud Object Storage تكوين اتصال البيانات لـ Cloud Object Storage

هـ. اختَر "Cloud Object Storage"

و. في مربع الحوار التالي، اختَر المثيل الذي أنشأته في الخطوات أد بالاسم.

ز. اختَر "إنشاء (Create)".

إنشاء Jupyter Notebook

إنشاء Jupyter Notebook.

أ. اختَر علامة التبويب "الأصول (Assets)" في بيئة مشروعك.

ب. انقر فوق "أصل جديد (New asset)".

ج. حدِّد خيار "العمل باستخدام النماذج (Working with models)" في اللوحة اليسرى.

د. انقر فوق العمل مع البيانات والنماذج باستخدام دفاتر ملاحظات Python وR.

هـ. أدخِل اسمًا لدفتر الملاحظات الخاص بك في حقل الاسم. اختَر Runtime 23.1 على Python ‏(4 vCPU و16 GB RAM) لتحديد إعدادات التكوين.

و. اختَر "إنشاء (Create)".

الإعداد

بعد ذلك، ستقوم بتثبيت التبعيات على وقت التشغيل. أولاً، llama-factory لتوليد محولات التصنيف المنخفض، ثم Pandas لتنسيق مجموعة البيانات بصيغة Alpaca.

!pip install -q llamafactory 2>/dev/null
# pandas needed to format the dataset
!pip install -q --upgrade pandas 2>/dev/null

تحقق من بيئة وحدة معالجة الرسومات

بعد ذلك، ستتأكد من أن بيئة watsonx لديك قدمت وحدة معالجة رسومات متوافقة مع Torch المطلوبة لاستخدام LLaMa-Factory.

import torch

try:
  assert torch.cuda.is_available() is True
except AssertionError:
  print("No GPU found, please set up a GPU before using LLaMA Factory.")

إذا لم ينشر مقطع الرمز البرمجي السابق عبارة "لم يتم العثور على وحدة معالجة رسومات"، فأنت بخير.

بعد ذلك، ستقوم باستيراد المكتبات لمعالجة البيانات وإنشاء ملف تكوين LLaMa Factory المستخدم في التدريب.

# Import libraries
import pandas as pd
import json
import yaml

قم بتحميل ومعالجة مجموعة البيانات

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

تم تصميم Granite 3.3 للتعلم من خلال الضبط الدقيق، وكلاهما سيتم تشغيله مع LLaMa Factory. يمكن ضبط Granite بدقة حتى مع موارد الحوسبة المحدودة.

ستقوم بتحميل اختيار من مجموعة بيانات MedReason من GitHub:

from datasets import load_dataset

training = pd.read_json("https://raw.githubusercontent.com/UCSC-VLAA/MedReason/refs/heads/main/eval_data/medbullets_op4.jsonl", lines=True)

LLaMa Factory يتطلب تنسيق مجموعة البيانات مسبقاً بتنسيقات Alpaca أو ShareGPT. لذا، نقوم بإعادة تنسيق حقول الأسئلة والأجوبة في مجموعة البيانات لتحتوي على حقول التعليمات والإدخال والإخراج وفقا لتنسيق Alpaca.

ألباكا هو تنسيق JSON لتمثيل التعليمات، وإدخال المستخدم، ومخرجات النظام كما يلي:

{
    "instruction": "user instruction (required)",
    "input": "user input (optional)",
    "output": "model response (required)",
    "system": "system prompt (optional)",
}

لأن MedReason غير منسق بتنسيق Alpaca، ستقوم بإنشاء مجموعة البيانات في الخلية التالية:

!mkdir -p data

# Format Med Dataset to Alpaca Format
formatted_data = [
    {
        "instruction": row["question"] + str(row["options"]),
        "input": "",
        "output": row["answer"]
    }
    for _, row in training.iterrows()
]

# output formatted MedReason dataset
with open("data/med.json", "w", encoding="utf-8") as f:
  json.dump(formatted_data, f, indent=2, ensure_ascii=False)

Llama Factory يستخدم ملفاً محدداً لفهم كيفية تحميل مجموعات البيانات للتدريب. يجب أن يكون هذا الملف موجودًا في المسار "data / dataset_info.json". وبالتالي، يجب علينا إنشاء ملف "dataset_info.json" يتضمن المسار إلى مجموعة البيانات الطبية المنسقة الجديدة التي أنشأناها لواجهة برمجة Llama Factory CLI للوصول إلى مجموعة البيانات. للحصول على تفاصيل حول ملف "dataset_info.json" راجع الوثائق. داخل مستودع Llama Factory هناك مجموعات بيانات متاحة للاستخدام، ومع ذلك، بما أننا نستخدم مجموعة بيانات مخصصة خاصة بنا يجب أن نضيف مجموعة البيانات إلى ملف JSON.

# "med" will be the identifier for the dataset 
# which points to the local file that contains the dataset
dataset_info = {
  "med": {
    "file_name": "med.json",
  }
}

# Create dataset_info.json with legal dataset so can reference with llama factory
with open("data/dataset_info.json", "w", encoding="utf-8") as f:
  json.dump(dataset_info, f, indent=2, ensure_ascii=False)

الآن بعد أن تم حفظ كائن JSON المنسق بتنسيق Alpaca في البيئة، أنت جاهز لبدء التدريب.

الضبط الدقيق

الخطوة التالية هي إعداد تكوينات التدريب ثم كتابة التكوينات إلى ملف YAML الذي تستخدمه LLaMa-Factory لتشغيل التدريب.

ستُجري الآن الضبط الدقيق الخاضع للإشراف (SFT) على المجموعة الفرعية لمجموعة بيانات MedReason. تدعم LLaMa Factory عدة أنواع مختلفة من التدريب. ومن أكثرها استخدامًا ما يلي:

  • التدريب الأوَّلي: حيث يخضع النموذج لتدريب أوَّلي باستخدام مجموعة بيانات شاملة لتوليد استجابات للغة والأفكار الأساسية.

  • الضبط الدقيق الخاضع للإشراف (SFT): حيث يتلقى النموذج تدريبًا إضافيًا مع بيانات مشروحة لتعزيز الدقة لوظيفة معينة أو في موضوع معين.

  • نمذجة المكافآت: حيث يكتسب النموذج المعرفة حول كيفية تحقيق حافز أو مكافأة محددة، والتي ستوجّه سياسة إخراج النموذج باستخدام تحسين السياسة القريبة (PPO).

  • التدريب: تقنية تعلم معزز (RL) يتم من خلالها صقل النموذج بشكل أكبر باستخدام أساليب تدرّج السياسات لتعزيز فاعليته في بيئة محددة.

هناك العديد من الإعدادات المستخدمة عند تكوين LoRA، لكن بعضًا منها يُعَد الأكثر أهمية والاستخدام شيوعًا.

  • معدل التعلم (LR): يحدِّد مدى تأثير كل تحديث في مَعلمات النموذج في كل دورة تدريبية. يمكن لمعدل التعلم الأعلى تسريع عملية التقارب من خلال السماح بتحديثات أكبر، لكنه قد يؤدي إلى تجاوز الحل الأمثل أو التذبذب حوله. ويؤدي معدل التعلم المنخفض إلى تقارب أبطأ لكنه أكثر استقرارًا، ما يقلل من مخاطر عدم الاستقرار قرب الحل الأمثل.

  • loraplus_lr_ratio: تحدِّد هذه الخطوة نسبة معدلات التعلم. بشكل عام، يجب أن يكون أكبر من 1، لكن الاختيار الأمثل لـ loraplus_lr_ratio يعتمد على النموذج ونوع المهمة. كدليل إرشادي، ينبغي أن تكون قيمة loraplus_lr_ratio أكبر عندما تكون المهمة أصعب ويحتاج النموذج لتحديث ميزاته للتعلم بشكل جيد. في هذه الحالة، يُفيد جَعْل معدل التعلم أصغر قليلًا (على سبيل المثال، بمعامل مرتين) مقارنةً بمعدلات التعلم المعتادة في LoRA.

  • **الحجم الفعَّال للدفعة: يُعَد ضبط حجم الدفعة بشكل صحيح أمرًا حيويًا لتحقيق توازن بين استقرار التدريب وحدود ذاكرة الفيديو (VRAM) الخاصة بوحدة GPU المستخدمة. يتم تحديد الحجم الفعّال للدفعة من خلال حاصل ضرب "per_device_train_batch_size" في "gradient_accumulation_steps". عادةً ما يؤدي الحجم الفعّال الأكبر للدفعة إلى تدريب أكثر سلاسة واستقرارًا، لكنه قد يتطلب أيضًا ذاكرة VRAM أكبر من المتوفرة في GPU. قد يؤدي الحجم الفعَّال الأصغر للدفعة إلى زيادة التباين أثناء التدريب.

إليك الرمز البرمجي الذي يهيئ التدريب:

# setup training configurations
args = dict(
  stage="sft",  # do supervised fine-tuning
  do_train=True,  # we're actually training
  model_name_or_path="ibm-granite/granite-3.3-2b-instruct",  # use IBM Granite 3.3 2b instruct model
  dataset="med",  # use medical datasets we created
  template="granite3",   # use granite3 prompt template
  finetuning_type="lora", # use LoRA adapters to save memory
  lora_target="all",  # attach LoRA adapters to all linear layers
  loraplus_lr_ratio=16.0,  # use LoRA+ algorithm with lambda=16.0
  output_dir="granite3_lora",  # the path to save LoRA adapters
  per_device_train_batch_size=4,  # the batch size
  gradient_accumulation_steps=2,  # the gradient accumulation steps
  learning_rate=1e-4,  # the learning rate
  num_train_epochs=3.0, # the epochs of training
  max_samples=500,  # use 500 examples in each dataset
  fp16=True,  # use float16 mixed precision training
  report_to="none", # disable wandb logging
)

# create training config file to run with llama factory
with open("train_granite3_lora_med.yaml", "w", encoding="utf-8") as file:
  yaml.dump(args, file, indent=2)

ستقوم الخلية التالية بتدريب النموذج ويمكن أن يستغرق تشغيله ما يصل إلى 10 دقائق:

!llamafactory-cli train train_granite3_lora_med.yaml;

استخدام Cloud Object Storage

بعد ذلك، ستنشئ طريقتين لرفع وتنزيل البيانات من IBM Cloud Object Storage:

from ibm_botocore.client import Config
import ibm_boto3

def upload_file_cos(credentials, local_file_name, key):  
    cos = ibm_boto3.client(service_name='s3',
    ibm_api_key_id=credentials['IBM_API_KEY_ID'],
    ibm_service_instance_id=credentials['IAM_SERVICE_ID'],
    ibm_auth_endpoint=credentials['IBM_AUTH_ENDPOINT'],
    config=Config(signature_version='oauth'),
    endpoint_url=credentials['ENDPOINT'])
    try:
        res=cos.upload_file(Filename=local_file_name, Bucket=credentials['BUCKET'],Key=key)
    except Exception as e:
        print(Exception, e)
    else:
        print(' File Uploaded')


def download_file_cos(credentials,local_file_name,key):  
    cos = ibm_boto3.client(service_name='s3',
    ibm_api_key_id=credentials['IBM_API_KEY_ID'],
    ibm_service_instance_id=credentials['IAM_SERVICE_ID'],
    ibm_auth_endpoint=credentials['IBM_AUTH_ENDPOINT'],
    config=Config(signature_version='oauth'),
    endpoint_url=credentials['ENDPOINT'])
    try:
        res=cos.download_file(Bucket=credentials['BUCKET'],Key=key,Filename=local_file_name)
    except Exception as e:
        print(Exception, e)
    else:
        print('File Downloaded')

الخلية التالية تحتوي على بيانات اعتماد Cloud Object Storage.

في دفتر ملاحظاتك، انقر فوق علامة التبويب Code Snippets (مقتطفات من التعليمات البرمجية) في الزاوية اليسرى. تفتح هذه الخطوة قائمة بها العديد من الخيارات لمقتطفات التعليمات البرمجية التي تم إنشاؤها. حدد "Read Data" (قراءة البيانات):

مربع الحوار لاستخدام مقتطف من التعليمات البرمجية في Watson Studio استخدام مقتطف التعليمات البرمجية المُعَد في Watson Studio

تفتح هذه الخطوة قائمة لتحديد ملف بيانات. إذا لم تكن قد قمت بتحميل أي ملفات إلى مثيل Cloud Object Storage الخاص بك، فستحتاج إلى رفع ملف ما لإنشاء بيانات الاعتماد، ويمكن أن يكون ذلك مجموعة بيانات تقليدية مثل "wine.csv".

تحديد أصل بيانات في Watson Studio تحديد أصل بيانات في Watson Studio

بعد النقر على "اختيار (Select)"، يمكنك الآن توليد مقتطف بيانات الاعتماد ضمن خيار "Load as". اختَر "إدراج الكود في الخلية (Insert code to cell)".

إدراج مقتطف من التعليمات البرمجية التي تم توليدها في Watson Studio إدراج مقتطف من التعليمات البرمجية التي تم توليدها في Watson Studio

هذه الخطوة تولد خلية مثل الخلية التالية مع بيانات اعتماد تحتوي على المعرفات ونقاط النهاية الصحيحة:

# @hidden_cell
# The following code contains metadata for a file in your project storage.
# You might want to remove secret properties before you share your notebook.

storage_metadata = {
    'IAM_SERVICE_ID': '',
    'IBM_API_KEY_ID': '',
    'ENDPOINT': '',
    'IBM_AUTH_ENDPOINT': '',
    'BUCKET': '',
    'FILE': ''
}

الآن مجلد zip الذي يحتوي على المحول ومعلومات المحول نفسه:

!zip -r "granite3_lora.zip" "granite3_lora"

تحقق من أنك أنشأت ملف zip بشكل صحيح:

!ls

الاستدلال

حان الوقت الآن لتشغيل الاستدلال. سيتم دعم الاستدلال من خلال توليد HuggingFace ، والذي يوفر طريقة "model.generate()" لتوليد النص باستخدام PyTorch.

يظهر هذا البرنامج التعليمي طرح سؤال طبي مأخوذ من مجموعة البيانات MedReason على النموذج الأساسي. من المنطقي أن النموذج الأساسي قد لا يكون قادرًا على الإجابة عن هذا السؤال لأنه نموذج للأغراض العامة تم تدريبه على مجموعات بيانات كبيرة ومتنوعة.

أولا، قم بإعداد تكوينات الاستدلال:

# setup inference configurations
args = dict(
  model_name_or_path="ibm-granite/granite-3.3-2b-instruct",  # use IBM Granite 3.3 2b instruct model
  template="granite3",  # set to the same one used in training, template for constructing prompts
  infer_backend="huggingface"  # choices: [huggingface, vllm]
)

# create inference config file to run with llama factory
with open("inference_config.yaml", "w", encoding="utf-8") as file:
  yaml.dump(args, file, indent=2)

الآن ستسأل روبوت المحادثة أحد الأسئلة من مجموعة البيانات MedReason:

from llamafactory.chat import ChatModel
chat_model = ChatModel(args)
messages = []

# run inference chatbot
question = '''
A 1-year-old girl is brought to a neurologist due to increasing seizure frequency over the past 2 months. 
She recently underwent a neurology evaluation which revealed hypsarrhythmia on electroencephalography (EEG) with a mix of slow waves, multifocal spikes, and asynchrony. 
Her parents have noticed the patient occasionally stiffens and spreads her arms at home. She was born at 38-weeks gestational age without complications. 
She has no other medical problems. Her medications consist of lamotrigine and valproic acid. Her temperature is 98.3\u00b0F (36.8\u00b0C), blood pressure is 90/75 mmHg, pulse is 94/min, and respirations are 22/min. 
Physical exam reveals innumerable hypopigmented macules on the skin and an irregularly shaped, thickened, and elevated plaque on the lower back. 
Which of the following is most strongly associated with this patient's condition?"
"A": "Cardiac rhabdomyoma", "B": "Glaucoma", "C": "Optic glioma", "D": "Polyostotic fibrous dysplasia"
'''

أنشئ رسالة جديدة باستخدام السؤال ومررها إلى النموذج الأساسي:

messages.append({"role": "user", "content": question})

response = ""
for new_text in chat_model.stream_chat(messages):
    response += new_text

print(response)
messages.append({"role": "assistant", "content": response})

إليك عينة المخرجات من نموذج Granite الأساسي:

المستخدم:

A 1-year-old girl is brought to a neurologist due to increasing seizure frequency over the past 2 months. 
She recently underwent a neurology evaluation which revealed hypsarrhythmia on electroencephalography (EEG) with a mix of slow waves, multifocal spikes, and asynchrony. 
Her parents have noticed the patient occasionally stiffens and spreads her arms at home. She was born at 38-weeks gestational age without complications. 
She has no other medical problems. Her medications consist of lamotrigine and valproic acid. Her temperature is 98.3\F (36.8\C), blood pressure is 90/75 mmHg, pulse is 94/min, and respirations are 22/min. 
Physical exam reveals innumerable hypopigmented macules on the skin and an irregularly shaped, thickened, and elevated plaque on the lower back. 
Which of the following is most strongly associated with this patient's condition?"
"A": "Cardiac rhabdomyoma", "B": "Glaucoma", "C": "Optic glioma", "D": "Polyostotic fibrous dysplasia"

** الاستجابة **:

The most strongly associated condition with this patient's condition is "C": "Optic glioma".

The patient's symptoms of hypsarrhythmia on EEG, seizure frequency increase, and the presence of hypopigmented macules and a thickened plaque on the lower back are indicative of a neurological disorder. Optic glioma is a type of brain tumor that can present with these symptoms, including seizures and visual disturbances.

Option A, "Cardiac rhabdomyoma", typically presents with cardiac involvement and is not associated with the described EEG findings or skin manifestations.

Option B, "Glaucoma", is an eye disease that can lead to vision loss but is not associated with the EEG findings or skin lesions described.

Option D, "Polyostotic fibrous dysplasia", is a bone disorder characterized by multiple bone lesions and is not associated with the neurological symptoms and EEG findings presented.

Therefore, based on the clinical presentation, the most likely diagnosis is an optic glioma.

الإجابة الصحيحة من مجموعة البيانات هي:

answer: Cardiac rhabdomyoma

لذا فإن النموذج الأساسي لا يولد الإجابة الصحيحة.

استنتج باستخدام محول LoRa الذي تم ضبطه بدقة

نقارن النتائج من خلال التشغيل مقابل الطراز الأساسي ومحول LoRa المضبوط. ثم نطرح نفس السؤال لنرى كيف سمح الضبط مع مجموعة البيانات القانونية للنموذج بفهم الأسئلة الطبية والإجابة عليها بشكل أفضل.

لن تكون الخلية التالية ضرورية إذا كنت قد أجريت LoRA في الجلسة نفسها. ومع ذلك، إذا كنت ستعود إلى دفتر Jupyter Notebook ولا تريد إعادة التدريب، يمكنك تنزيل المحولات المضبوطة من مثيل COS الخاص بك.

download_file_cos(credentials, "granite3_lora.zip", "granite3_lora.zip")
!unzip granite3_lora.zip

الآن يتعين عليك تكوين الخيارات لنموذج ChatModel بحيث يتضمن المحولات.

# setup inference configurations
args = dict(
  model_name_or_path="ibm-granite/granite-3.3-2b-instruct",  # use IBM Granite 3.3 2b instruct model
  adapter_name_or_path="granite3_lora", # load the saved LoRA adapters
  template="granite3", # set to the same one used in training, template for constructing prompts
  finetuning_type="lora", # which fine-tuning technique used in training
  infer_backend="huggingface" # choices: [huggingface, vllm]
)

# create inference config file to run with llama factory
with open("inference_config.yaml", "w", encoding="utf-8") as file:
  yaml.dump(args, file, indent=2)


from llamafactory.chat import ChatModel
chat_model = ChatModel(args)

الآن يمكننا اختبار نفس التحدي المنطقي للنموذج المضبوط بدقة:

messages = []

# run inference chatbot
question = '''
A 1-year-old girl is brought to a neurologist due to increasing seizure frequency over the past 2 months. 
She recently underwent a neurology evaluation which revealed hypsarrhythmia on electroencephalography (EEG) with a mix of slow waves, multifocal spikes, and asynchrony. 
Her parents have noticed the patient occasionally stiffens and spreads her arms at home. She was born at 38-weeks gestational age without complications. 
She has no other medical problems. Her medications consist of lamotrigine and valproic acid. Her temperature is 98.3\u00b0F (36.8\u00b0C), blood pressure is 90/75 mmHg, pulse is 94/min, and respirations are 22/min. 
Physical exam reveals innumerable hypopigmented macules on the skin and an irregularly shaped, thickened, and elevated plaque on the lower back. 
Which of the following is most strongly associated with this patient's condition?"
"A": "Cardiac rhabdomyoma", "B": "Glaucoma", "C": "Optic glioma", "D": "Polyostotic fibrous dysplasia"
'''

إنشاء رسالة جديدة باستخدام السؤال وتمريرها إلى النموذج المضبوط بدقة:

messages.append({"role": "user", "content": question})

response = ""
for new_text in chat_model.stream_chat(messages):
    response += new_text

print(response)
messages.append({"role": "assistant", "content": response})
Cardiac rhabdomyoma

عينة من مخرجات النموذج المضبوط بدقة:

المستخدم:

A 1-year-old girl is brought to a neurologist due to increasing seizure frequency over the past 2 months. 
She recently underwent a neurology evaluation which revealed hypsarrhythmia on electroencephalography (EEG) with a mix of slow waves, multifocal spikes, and asynchrony. 
Her parents have noticed the patient occasionally stiffens and spreads her arms at home. She was born at 38-weeks gestational age without complications. 
She has no other medical problems. Her medications consist of lamotrigine and valproic acid. Her temperature is 98.3\u00b0F (36.8\u00b0C), blood pressure is 90/75 mmHg, pulse is 94/min, and respirations are 22/min. 
Physical exam reveals innumerable hypopigmented macules on the skin and an irregularly shaped, thickened, and elevated plaque on the lower back. 
Which of the following is most strongly associated with this patient's condition?"
"A": "Cardiac rhabdomyoma", "B": "Glaucoma", "C": "Optic glioma", "D": "Polyostotic fibrous dysplasia"

** الاستجابة **:

Cardiac rhabdomyoma

هذه المرة ، أنشأ النموذج الإجابة الصحيحة، بفضل المحول المدرب.

أحد الجوانب التي يجب ملاحظتها، هو أن النموذج لم يعد يستجيب بمنطقه. هذه النتيجة لأن مجموعة البيانات المستخدمة في LoRA تحتوي فقط على الإجابة الصحيحة كمخرجات النموذج المتوقعة. يمكن استخدام الضبط الدقيق لـ LoRA لتوفير معلومات جديدة وكذلك لتوجيه النموذج حول كيفية الاستجابة.

ملخص

في هذا الدليل، قمت بتخصيص نموذج IBM Granite-3.3-2b-Instruct باستخدام LoRA لإضافة معرفة طبية جديدة وقالب مفصَّل لكيفية الرد. لقد لاحظت قدرة نموذج Granite 3.3 على التعلم حتى مع نموذج صغير وعدد محدود من العينات من مجموعة البيانات.

حلول ذات صلة
نماذج الأساس

استكشف مكتبة نماذج الأساس من IBM في محفظة watsonx لتوسيع نطاق الذكاء الاصطناعي التوليدي لأعمالك بثقة.

اكتشف watsonx.ai
حلول الذكاء الاصطناعي

استفد من الذكاء الاصطناعي في عملك بالاستعانة بخبرة IBM الرائدة في مجال الذكاء الاصطناعي ومحفظة حلولها المتوفرة لك.

استكشف حلول الذكاء الاصطناعي
الاستشارات والخدمات المتعلقة بالذكاء الاصطناعي

أعدّ ابتكار عمليات ومهام سير العمل الحساسة بإضافة الذكاء الاصطناعي لتعزيز التجارب وصنع القرارات في الوقت الفعلي والقيمة التجارية.

استكشف خدمات الذكاء الاصطناعي
اتخِذ الخطوة التالية

استكشف مكتبة نماذج الأساس من IBM في محفظة IBM watsonx لتوسيع نطاق الذكاء الاصطناعي التوليدي لأعمالك بثقة.

اكتشف watsonx.ai استكشف نماذج الذكاء الاصطناعي من IBM Granite