Feinabstimmung von LoRA mit Granite LLM

Feinabstimmung von Granite mit LoRa

Low-Rank Adaptation (LoRA) ist eine effiziente Methode zur Feinabstimmung, welche die Anzahl der trainierbaren Parameter reduziert und so die Geschwindigkeit und Ressourcennutzung des Trainings erhöht sowie gleichzeitig die gleiche Ausgabequalität gewährleistet. Anstatt alle Parameter in einem neuronalen Netz während der Feinabstimmung zu aktualisieren, friert LoRA die ursprünglich vortrainierten Gewichtungen ein und fügt kleine, trainierbare Low-Rank-Matrizen hinzu, welche den für die neue Aufgabe erforderlichen Änderungen näher kommt. Dieser Ansatz basiert auf der Hypothese, dass die Gewichtungsaktualisierungen während der Anpassung einen niedrigen „intrinsischen Rang“ haben.

Ein zusätzlicher Vorteil von LoRA besteht darin, dass der generierte Adapter leicht und portabel ist und leicht gespeichert werden kann, da die vortrainierten Gewichtungen eingefroren werden.

In diesem Tutorial verwenden Sie LLaMa Factory. LLaMa Factory ist ein großes Sprachmodell (LLM) Trainings- und Feinabstimmungsplattform mit niedrigem und keinem Code, die es Benutzern ermöglicht, LLMs auf benutzerdefinierten Datensätzen abzustimmen, die Leistung zu bewerten und Modelle zu bedienen. Es verfügt sowohl über eine Web-Benutzeroberfläche als auch über eine CLI, ist einfach zu bedienen und unterstützt über 100 LLMs. Die Plattform unterstützt Datensätze in den Formaten Alpaca und ShareGPT. Die LLaMa Factory ist nicht die einzige Möglichkeit zur Feinabstimmung von LLMs, die PEFT Bibliothek für parametereffiziente Feinabstimmung ist eine weitere Option für die Aktualisierung großer Modelle. PEFT bietet die Möglichkeit, quantisiert LoRA (QLoRA) auszuführen, um das fein abgestimmte Modell noch weiter zu verdichten. In diesem Tutorial verwenden Sie eine nicht quantisierte Version von Granite 3.3.

Obwohl LLaMa Factory ohne den Einsatz umfangreicher Rechenressourcen ausgeführt werden kann, benötigt es eine GPU und erhebliche Speicherressourcen. In diesem Tutorial verwenden Sie LLaMa Factory auf watsonx®, um GPU-Ressourcen und Speicher für den generierten Adapter bereitzustellen.

Konfiguration

Watson Studio Konfiguration

a. Loggen Sie sich in watsonx.ai® mit Ihrem IBM Cloud® Account ein.

b. Erstellen Sie ein watsonx.ai-Projekt. Notieren Sie sich Ihre Projekt-ID unter „Projekt“ > „Verwalten“ > „Allgemein“ > „Projekt-ID“.  
Sie benötigen diese ID für dieses Tutorial.

c. Erstellen Sie eine Instanz eines watsonx.ai Laufzeit-Services. Für dieses Tutorial müssen Sie eine kostenpflichtige Instanz erstellen, um auf eine GPU zuzugreifen.

d. Generieren Sie eine watsonx Programmierschnittstelle (API-Schlüssel).

e. Verknüpfen Sie den watsonx.ai Laufzeit-Service mit dem Projekt, das Sie in watsonx.ai erstellt haben.

Cloud Object Storage

a. Um Cloud Object Storage für Ihr Notebook zu erstellen, gehen Sie zu https://cloud.ibm.com/ und wählen Sie dann „Instanz erstellen“.

b. Sie gelangen zu einem Erstellungsdialog, in dem Sie einen Preistarif auswählen können. Für dieses Tutorial ist ein Standardplan ausreichend.

c. Geben Sie Ihrer Cloud Object Storage-Instanz dann einen Namen.

d. Sobald Sie Ihre Instanz erstellt haben, gehen Sie zurück zum Projekt, wählen Sie „Neues Asset“ und dann „Mit einer Datenquelle verbinden“ aus.

Bild zeigt die watsonx-Datenverbindung für Cloud Object Storage Konfigurieren der Datenverbindung für Cloud Object Storage

e. Wählen Sie „Cloud Object Storage“ aus

f. Wählen Sie im nächsten Dialog namentlich die Instanz aus, die Sie in den Schritten ad erstellt haben.

g. Wählen Sie „Erstellen“.

Erstellen Sie ein Jupyter Notebook

Erstellen Sie ein Jupyter Notebook.

a. Wählen Sie die Registerkarte „Assets“ in Ihrer Projektumgebung.

b. Klicken Sie auf „Neues Asset“.

c. Wählen Sie im linken Bereich die Option „Mit Modellen arbeiten“ aus.

d. Klicken Sie auf „Arbeiten mit Daten und Modellen unter Verwendung von Python- und R-Notebooks“.

e. Geben Sie einen Namen für Ihr Notizbuch in das Feld Name ein. Wählen Sie Laufzeit 23.1 auf Python (4 vCPU 16 GB RAM) aus, um die Konfiguration zu definieren.

f. Wählen Sie „Erstellen“.

Einrichtung

Als Nächstes installieren Sie Abhängigkeiten in der Laufzeitumgebung. Zuerst generiert Llama-Factory die Low-Rank-Adapter, anschließend formatiert Pandas den Datensatz im Alpaca-Format.

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

Überprüfen Sie die GPU-Umgebung

Als Nächstes stellen Sie sicher, dass Ihre watsonX-Umgebung eine Torch-kompatible GPU bereitstellt, die für die Verwendung von LLaMa-Factory erforderlich ist.

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.")

Wenn der vorherige Codeausschnitt nicht „Keine GPU gefunden“ ausgibt, können Sie fortfahren.

Als Nächstes importieren Sie Bibliotheken, um Daten zu bearbeiten und die LLaMa Factory-Konfigurationsdatei für das Training zu erstellen.

# Import libraries
import pandas as pd
import json
import yaml

Laden Sie den MedReason-Datensatz herunter und verarbeiten Sie ihn.

In diesem Tutorial verwenden Sie einen Teil des MedReason- Datensatzes. MedReason ist ein umfangreicher, hochwertiger Datensatz für medizinische Schlussfolgerungen, mit dem erklärbare medizinische Problemlösungen in LLMs ermöglicht werden sollen. Während sich MedReason auf die Schlussfolgerung eines Modells und die Validierung der Denkketten konzentriert, die ein Modell verwendet, ist es in diesem Fall auch hilfreich, einen Datensatz bereitzustellen, der zu aktuell ist, um in den Trainingsdaten für IBM® Granite 3.3 enthalten zu sein.

Granite 3.3 wurde so konzipiert, dass es durch Feinabstimmung lernt; beides wird mit Llama Factory durchgeführt. Granite-Modelle können auch mit begrenzten Computerressourcen effizient fein abgestimmt werden.

Verwenden Sie eine Auswahl des MedReason Datensatzes von 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 benötigt den Datensatz im Alpaca- oder ShareGPT-Format. Daher formatieren wir die Question and Answer-Felder des ursprünglichen Rechtsdatensatzes, um Anweisungs-, Eingabe- und Ausgabefelder gemäß Alpaca-Format zu erhalten.

Alpaca ist ein JSON-Format zur Darstellung von Anweisungen, Benutzereingaben und Systemausgaben, etwa so:

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

Da MedReason nicht im Alpaca-Format vorliegt, erstellen Sie in der nächsten Zelle einen Alpaca-Datensatz:

!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 verwendet eine spezielle Datei, um zu verstehen, wie Datensätze für das Training geladen werden. Diese Datei muss im Pfad „data/dataset_info.json“ vorhanden sein. Daher müssen wir eine Datei „dataset_info.json“ erstellen, die den Pfad zu dem neuen formatierten medizinischen Datensatz enthält, den wir für die Llama Factory CLI erstellt haben, damit diese auf den Datensatz zugreifen kann. Weitere Informationen zur Datei „dataset_info.json“ finden Sie in der Dokumentation. Innerhalb des Llama-Repositorys gibt es Datensätze, die zur Verfügung stehen. Da wir jedoch unseren eigenen Datensatz verwenden, müssen wir unseren Datensatz der JSON-Datei hinzufügen.

# "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)

Nachdem das Alpaca-formatierte JSON-Objekt in der Umgebung gespeichert wurde, können Sie mit dem Training beginnen.

Feinabstimmung

Der nächste Schritt besteht darin, die Trainingskonfigurationen einzurichten und die Konfigurationen dann in eine YAML-Datei zu schreiben, die LLaMa zum Ausführen des Trainings verwendet.

Jetzt führen Sie eine überwachte Feinabstimmung (SFT) für die Teilmenge des MedReason-Datensatzes durch. LLaMa Factory unterstützt verschiedene Arten von Training. Einige der am häufigsten verwendeten sind:

  • Vortraining: Hierbei wird ein Modell zunächst anhand eines umfangreichen Datensatzes trainiert, um Antworten auf grundlegende Sprache und Ideen zu generieren.

  • Überwachte Feinabstimmung (SFT): Hier erhält ein Modell zusätzliches Training mit kommentierten Daten, um die Genauigkeit für eine bestimmte Funktion oder ein bestimmtes Thema zu erhöhen.

  • Belohnungsmodellierung: Hier erwirbt das Modell Wissen darüber, wie es einen bestimmten Anreiz oder eine bestimmte Belohnung erreichen kann, die sich auf die Optimierung der Output-Proximal-Richtlinien (PPO) auswirken.

  • Training: eine Technik des verstärkenden Lernens (RL), bei der das Modell durch Richtlinien-Gradiententechniken weiter verfeinert wird, um seine Effektivität in einem bestimmten Umfeld zu steigern.

Es gibt viele Einstellungen, die bei der Konfiguration von LoRA verwendet werden, aber einige der wichtigsten und am häufigsten verwendeten sind: - Lernrate (LR): Die Lernrate bestimmt, wie stark jeder Modellparameter bei jeder Iteration des Trainings aktualisiert wird. Eine höhere LR kann die Konvergenz beschleunigen, indem sie größere Updates zulässt, riskiert jedoch, die optimale Lösung zu überschreiten oder um sie herum zu oszillieren. Eine niedrigere LR führt zu einer langsameren, aber stabileren Konvergenz, wodurch das Risiko einer Instabilität in der Nähe der optimalen Lösung verringert wird.

  • loraplus_lr_ratio: In diesem Schritt wird das Verhältnis der Lernraten festgelegt. Im Allgemeinen sollte es > 1 sein, aber die optimale Wahl von loraplus_lr_ratio ist modell- und aufgabenabhängig. Als Richtlinie sollte loraplus_lr_ratio größer sein, wenn die Aufgabe schwieriger ist und das Modell seine Funktionen aktualisieren muss, damit es gut lernt. In diesem Fall hilft es, die Lernrate etwas kleiner zu gestalten (z. B. um den Faktor 2) als typische LoRA-Lernraten.

  • Effektive Batch-Größe: Die richtige Konfiguration Ihrer Batch-Größe ist entscheidend, um die Stabilität des Trainings mit den VRAM-Beschränkungen der von Ihnen verwendeten GPU in Einklang zu bringen. Die effektive Batch-Größe wird durch das Produkt aus „per_device_train_batch_size“ * „gradient_accumulation_steps“ festgelegt. Eine größere effektive Batch-Größe führt im Allgemeinen zu einem reibungsloseren und stabileren Training, erfordert aber möglicherweise auch mehr VRAM, als Ihre GPU enthält. Eine kleinere effektive Batch-Größe kann zu mehr Varianz führen.

Hier der Code, um das Training zu konfigurieren:

# 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)

Die nächste Zelle trainiert das Modell. Dies kann bis zu 10 Minuten dauern:

!llamafactory-cli train train_granite3_lora_med.yaml;

Cloud Object Storage verwenden

Als Nächstes erstellen Sie zwei Methoden, um Daten aus IBM Cloud Object Storage hoch- und herunterzuladen:

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')

Die nächste Zelle enthält die Zugangsdaten von Cloud Object Storage.

Klicken Sie in Ihrem Notizbuch auf die Registerkarte „Codeausschnitte“ in der rechten Ecke. Dieser Schritt öffnet ein Menü mit verschiedenen Optionen für generierte Codeausschnitte. Wählen Sie „Daten lesen“ aus:

Der Dialog zur Verwendung eines Code-Snippets in Watson Studio Verwenden eines vorbereiteten Code-Snippets in Watson Studio

Dieser Schritt öffnet ein Menü zur Auswahl einer Datendatei. Wenn Sie noch nichts in Ihre Cloud Object Storage-Instanz hochgeladen haben, müssen Sie etwas hochladen, um Zugangsdaten zu generieren, und das kann ein klassischer Datensatz wie „wine.csv“ sein.

Auswahl eines Assets in Watson Studio Auswahl eines Assets in Watson Studio

Nachdem Sie auf „Auswählen“ geklickt haben, können Sie nun das Zugangsdaten-Snippet unter der Option „Laden als“ generieren. Wählen Sie „Code in Zelle einfügen“:

Einfügen eines generierten Code-Snippets in Watson Studio Einfügen eines generierten Code-Snippets in Watson Studio

Dieser Schritt erzeugt eine Zelle wie die folgende mit Zugangsdaten, die die korrekten IDs und generierten Endpunkte enthält:

# @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': ''
}

Hier der Zip-Ordner mit dem Adapter und den Informationen über den Adapter selbst:

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

Überprüfen Sie, dass Sie das Zip korrekt erstellt haben:

!ls

Inferenz

Es ist an der Zeit, die Inferenz durchzuführen. Die Inferenz wird durch die HuggingFace-Generierung unterstützt, die eine „model.generate()“- Methode zur Textgenerierung mittels PyTorch bereitstellt.

Dieses Tutorial zeigt, wie man dem Basismodell eine medizinische Frage aus dem MedReason-Datensatz stellt. Wahrscheinlich kann das Basismodell diese Frage nicht beantworten, da es sich um ein Modell mit allgemeinem Verwendungszweck handelt, das mit großen und heterogenen Datensätzen trainiert wurde.

Richten Sie zunächst die Inferenzkonfigurationen ein:

# 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)

Jetzt stellen Sie dem Chatbot eine der Fragen aus dem MedReason-Datensatz:

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"
'''

Erstellen Sie einen neuen Prompt mit der Frage und übergeben Sie ihn an das Basismodell:

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})

Hier sehen Sie die Beispielausgabe des Granite 3.3-Basismodells:

Benutzer:

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"

Antwort:

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.

Die korrekte Antwort aus dem Datensatz lautet:

answer: Cardiac rhabdomyoma

Das Basismodell liefert also nicht die richtige Antwort.

Inferenz mit dem feinabgestimmten LoRA-Adapter

Wir vergleichen die Ergebnisse, indem wir sie mit dem Basismodell und dem LoRA-optimierten Adapter ausführen. Anschließend stellen wir dieselbe Frage, um zu sehen, inwiefern die Anpassung an den Rechtsdatensatz es dem Modell ermöglichte, medizinische Fragen besser zu verstehen und zu beantworten.

Die folgende Zelle ist nicht erforderlich, wenn Sie LoRA in derselben Sitzung ausgeführt haben. Wenn Sie jedoch zum Jupyter Notebook zurückkehren und das Training nicht erneut durchführen möchten, können Sie die feinabgestimmten Adapter von Ihrer COS-Instanz herunterladen.

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

Jetzt konfigurieren Sie die Optionen für das ChatModel, damit es die Adapter einbezieht.

# 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)

Jetzt können wir dieselbe Denkaufgabe auch dem feinabgestimmten Modell stellen:

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"
'''

Erstellen Sie ein neues Prompt mit der Frage und leiten sie an das feinabgestimmte Modell weiter:

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

Beispielausgabe aus dem feinabgestimmten Modell:

Benutzer:

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"

Antwort:

Cardiac rhabdomyoma

Diesmal erzeugte das Modell dank des trainierten Adapters tatsächlich die richtige Antwort.

Ein Aspekt, den es zu beachten gilt: Das Modell reagiert nicht mehr mit seiner Schlussfolgerung. Dieses Ergebnis ist darauf zurückzuführen, dass der für LoRA verwendete Datensatz als erwartete Modellausgabe nur die richtige Antwort enthält. Die LoRA-Feinabstimmung kann nicht nur dazu verwendet werden, neue Informationen zu liefern, sondern auch, um dem Modell Anweisungen zu geben, wie es reagieren soll.

Zusammenfassung

In diesem Tutorial haben Sie die LoRA-Feinabstimmung des IBM granite-3.3-2b-Instruct- Modells mit neuem medizinischen Wissen und einer detaillierten Vorlage für die Reaktion darauf vorgenommen. Sie haben gesehen, dass Granite 3.3 selbst mit einem kleinen Modell und begrenzten Stichproben aus dem Datensatz lernen kann.

Weiterführende Lösungen
Basismodelle

Erkunden Sie die Foundation-Model-Bibliothek im watsonx-Portfolio von IBM zur zuverlässigen Skalierung generativer KI für Ihr Unternehmen.

Entdecken sie watsonx.ai
Lösungen im Bereich künstlicher Intelligenz

Setzen Sie KI in Ihrem Unternehmen ein – mit branchenführendem Fachwissen im Bereich KI und dem Lösungsportfolio von IBM an Ihrer Seite.

Erkunden Sie KI-Lösungen
KI-Beratung und -Services

Erfinden Sie kritische Workflows und Abläufe neu, indem Sie KI einsetzen, um Erfahrungen, Entscheidungsfindung in Echtzeit und den geschäftlichen Nutzen zu maximieren.

KI-Services entdecken
Gehen Sie den nächsten Schritt

Erkunden Sie die Foundation-Model-Bibliothek im watsonx-Portfolio von IBM zur zuverlässigen Skalierung generativer KI für Ihr Unternehmen.

Entdecken sie watsonx.ai Erkunden Sie die KI-Modelle von IBM Granite