Direkt zum Inhalt

Feinabstimmung der Llama 3.2 Vision

Lerne, wie du ein multimodales Modell von Meta AI mit Hilfe des Unsloth-Frameworks auf den Amazon-Produktdatensatz abstimmst.
Aktualisierte 15. Jan. 2025  · 10 Min. Lesezeit

Wir haben zahlreiche Anleitungen zur Feinabstimmung großer Sprachmodelle (LLMs) erkundet, aber es gibt nur sehr wenige Ressourcen, die den Prozess der Feinabstimmung multimodaler Modelle abdecken. In diesem Tutorial werden wir ein hochmodernes multimodales Modell namens Llama 3.2 Vision Model erkunden und zeigen, wie wir es anhand des Amazon-Produktdatensatzes feinabstimmen können. Unser Ziel ist es, einen Generator für Produktbeschreibungen zu entwickeln, der genaue und vereinfachte Bildunterschriften für auf Amazon gelistete Produkte liefert.

Wenn du neu in der Feinabstimmung von LLMs bist, nimm bitte die Feinabstimmung mit Llama 3 Kurs, um dich mit den gängigen Methoden und Begriffen vertraut zu machen. Du kannst dir auch unser Llama 3.2 90B-Tutorial ansehen: . Darin erfährst du, wie du mit Streamlit für das Frontend, Llama 3.2 90B für die Erzeugung von Bildunterschriften und Groq als API eine App für Bildunterschriften erstellst.

Feinabstimmung des Llama 3.2 Vision Bildes

Bild vom Autor

Llama 3.2 Vision Modelle unterbieten

Llama 3.2 führt multimodale Modelle ein, die sowohl Bild- als auch Textdaten verarbeiten können, um natürliche und genaue Antworten zu erzeugen. Die Llama 3.2-Vision-Modelle sind in 11B- und 90B-Parameter-Varianten erhältlich und wurden speziell dafür entwickelt, Image Reasoning-Anwendungsfälle mit bemerkenswerter Präzision zu bewältigen. Diese Modelle übertreffen viele bestehende Open-Source- und geschlossene multimodale Modelle bei branchenüblichen Benchmarks.

Lies das Llama 3.2 Handbuch: Funktionsweise, Anwendungsfälle und mehr, um mehr über alle Modellvariablen im Detail zu erfahren.

Die Bildverarbeitungsmodelle von Llama 3.2 eignen sich hervorragend für Aufgaben wie das Verstehen von Dokumenten, die Analyse von Diagrammen und Grafiken, die Beschriftung von Bildern und das visuelle Grounding, bei dem natürlichsprachliche Beschreibungen verwendet werden, um Objekte in Bildern zu identifizieren.

Llama 3.2 Architektur des Visionsmodells

Das Llama 3.2 Vision Modell baut auf dem älteren Llama 3.1 Textmodell auf, das ein fortschrittliches Sprachmodell mit einer Transformatorarchitektur ist. Sie wurde mit überwachtem Lernen (SFT) und Verstärkungslernen mit menschlichem Feedback (RLHF) feinabgestimmt, um den menschlichen Präferenzen für Hilfsbereitschaft und Sicherheit zu entsprechen. 

Um die Bilderkennung zu erleichtern, enthält Llama 3.2 Vision einen separat trainierten Vision Adapter. Dieser Adapter verwendet Cross-Attention-Schichten, um die Ausgaben des Bildkodierers in das vortrainierte Llama 3.1-Sprachmodell zu integrieren, damit es sowohl text- als auch bildbasierte Aufgaben effektiv bearbeiten kann.

Hauptmerkmale von Llama 3.2 Vision

  • Bildverständnis: Sie kann Objekte in Bildern leicht erkennen und klassifizieren, was Aufgaben wie Bildunterschriften und Szeneninterpretation ermöglicht.
  • Komplexe OCR und Kartenverständnis: Die 90B-Version des Modells Llama 3.2 eignet sich hervorragend, um Erkenntnisse aus komplexen Visualisierungen wie Diagrammen und Grafiken zu gewinnen.
  • Dokument verstehen: Sie unterstützt eine durchgängige OCR (Optical Character Recognition), mit der du Text und Daten direkt aus Dokumenten extrahieren kannst.
  • Visuelle Erdung: Mit dem neuen Modell können Nutzer/innen Objekte lokalisieren oder Fragen zu visuellen Daten beantworten.

Llama 3.2 Vision Modell Anwendungsfälle

Llama 3.2 Vision eignet sich hervorragend für Anwendungsfälle wie visuelle Fragebeantwortung, Dokumentenanalyse, Bildunterschriften, Bild-Text-Retrieval und visuelles Grounding.

  1. Visuelle Fragenbeantwortung (VQA): Beantworte Fragen zu einem Bild, indem du seinen Inhalt verstehst.
  2. Dokument VQA (DocVQA): Analysiere Dokumente wie Karten oder Verträge und interpretiere sowohl Text als auch Layout, um Fragen zu beantworten.
  3. Bildunterschriften: Erstelle natürlichsprachliche Bildunterschriften, indem du Details extrahierst und Szenen in Bildern verstehst.
  4. Image-Text Retrieval: Verbinde Bilder mit Textbeschreibungen, um eine erweiterte Suche und Organisation zu ermöglichen.
  5. Visuelle Erdung: Erkenne Objekte oder Regionen in Bildern anhand von Beschreibungen in natürlicher Sprache.

Feinabstimmung der Llama 3.2 Vision auf dem Amazon Produktdatensatz

Für dieses Projekt werden wir Kaggle als Programmier- und Berechnungsumgebung, Unsloth als Feinabstimmungs-Framework und den Amazon-Produktbeschreibungsdatensatz verwenden. Unsloth ist schnell, verbraucht weniger GPU-Speicher und benötigt im Vergleich zu herkömmlichen Methoden weniger Codezeilen. 

Wenn du die LLMs für eine Lösung zur Texterstellung verfeinern willst, haben wir das perfekte Tutorial für dich: Llama 3.2 feinjustieren und lokal nutzen: Eine Schritt-für-Schritt-Anleitung.

1. Einrichten

Erstelle ein neues Kaggle-Notebook und stelle den Beschleuniger so ein, dass er zwei T4-GPUs verwendet. Füge deinen Hugging Face Token als Kaggle-Geheimnis hinzu, damit du dein Modell später sicher in dein Hugging Face-Repository übertragen kannst. Installiere dann das Python-Paket unsloth mit dem Befehl pip.

%%capture
!pip install unsloth

Entdecke mehr über Unsloth, indem du den Unsloth Guide liest : Optimieren und beschleunigen Sie die LLM-Feinabstimmung.

2. Lade das Modell

In diesem Setup laden wir das Modell Llama-3.2-11B-Vision-Instruct, insbesondere die von Unsloth bereitgestellte Version, die für eine effiziente Feinabstimmung und Inferenz optimiert ist. Das Modell wird in 4-Bit-Quantisierung geladen, um den Speicherbedarf und die Rechenanforderungen deutlich zu reduzieren, so dass auch große Visionsmodelle auf den T4-GPUs ausgeführt werden können.

from unsloth import FastVisionModel
import torch

model, tokenizer = FastVisionModel.from_pretrained(
    "unsloth/Llama-3.2-11B-Vision-Instruct",
    load_in_4bit = True,
    use_gradient_checkpointing = "unsloth",
)

3. Einrichten des LoRA

LoRA (Low-Rank Adaptation) ist eine Technik zur effizienten Feinabstimmung großer vortrainierter Modelle durch die Einführung lernfähiger Low-Rank-Matrizen in bestimmte Teile des Modells. Dieser Ansatz ist leichtgewichtig und rechnerisch effizient und ermöglicht eine aufgabenspezifische Feinabstimmung, ohne die Kernstruktur des vortrainierten Modells zu verändern.

Um ein Modell mit LoRA zu trainieren, konzentrieren wir uns auf die Auswahl und Feinabstimmung spezifischer Komponenten, wie z. B. Sehschichten, Sprachschichten, Aufmerksamkeitsmodule und MLP-Module. So können wir das Modell für bestimmte Aufgaben mit minimalen Änderungen an der ursprünglichen Architektur anpassen.

model = FastVisionModel.get_peft_model(
    model,
    finetune_vision_layers     = True, 
    finetune_language_layers   = True, 
    finetune_attention_modules = True,
    finetune_mlp_modules       = True,
    r = 16,           
    lora_alpha = 16,
    lora_dropout = 0,
    bias = "none",
    random_state = 3443,
    use_rslora = False,
    loftq_config = None,
)

4. Laden des Datensatzes

Laden Sie die philschmid/amazon-product-descriptions-vlm Datensatz aus dem Hugging Face Hub und wähle nur die ersten 500 Stichproben aus. Der Datensatz enthält Produktbilder und Produktbeschreibungen sowie andere notwendige Informationen.

from datasets import load_dataset
dataset = load_dataset("philschmid/amazon-product-descriptions-vlm", 
                       split = "train[0:500]")


dataset
Dataset({
    features: ['image', 'Uniq Id', 'Product Name', 'Category', 'Selling Price', 'Model Number', 'About Product', 'Product Specification', 'Technical Details', 'Shipping Weight', 'Variants', 'Product Url', 'Is Amazon Seller', 'description'],
    num_rows: 500
})

Dies ist eine der Abbildungen des Produkts. 

dataset[45]["image"]

Bild vom Spielzeugauto

Hier ist seine Beschreibung. 

dataset[45]["description"]
'Authentic Dale Earnhardt Jr. 1:24 scale diecast car. Nationwide Raw Finish.  Collectible model car for racing fans.  Perfect gift for NASCAR enthusiasts.'

5. Verarbeitung des Datensatzes

Jetzt werden wir den Datensatz verarbeiten, der nur den Text und die Bilder enthält. Die Prompt-Vorlagen enthalten Benutzerfragen, Bilder und Produktbeschreibungen. 

instruction = """
You are an expert Amazon worker who is good at writing product descriptions. 
Write the product description accurately by looking at the image.
"""


def convert_to_conversation(sample):
    conversation = [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": instruction},
                {"type": "image", "image": sample["image"]},
            ],
        },
        {
            "role": "assistant",
            "content": [{"type": "text", "text": sample["description"]}],
        },
    ]
    return {"messages": conversation}


pass


converted_dataset = [convert_to_conversation(sample) for sample in dataset]

Der neue Datensatz ist nicht tabellarisch, sondern folgt einem Prompt-Stil, der dem Format von OpenAI ähnelt.

converted_dataset[45]
{'messages': [{'role': 'user',
   'content': [{'type': 'text',
     'text': '\nYou are an expert Amazon worker who is good at writing product descriptions. \nWrite the product description accurately by looking at the image.\n'},
    {'type': 'image',
     'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x302>}]},
  {'role': 'assistant',
   'content': [{'type': 'text',
     'text': 'Authentic Dale Earnhardt Jr. 1:24 scale diecast car. Nationwide Raw Finish.  Collectible model car for racing fans.  Perfect gift for NASCAR enthusiasts.'}]}]}

6. Modellinferenz vor der Feinabstimmung

Wir wählen das 46. Beispiel aus dem Datensatz aus und führen eine Inferenz durch, um festzustellen, wie gut es die Produktbeschreibung ohne Feinabstimmung schreibt.

FastVisionModel.for_inference(model)  # Enable for inference!

image = dataset[45]["image"]

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": instruction},
        ],
    }
]
input_text = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)
inputs = tokenizer(
    image,
    input_text,
    add_special_tokens=False,
    return_tensors="pt",
).to("cuda")

from transformers import TextStreamer

text_streamer = TextStreamer(tokenizer, skip_prompt=True)
_ = model.generate(
    **inputs,
    streamer=text_streamer,
    max_new_tokens=128,
    use_cache=True,
    temperature=1.5,
    min_p=0.1
)

Die erstellte Beschreibung ist lang und ungenau. Sogar der Schreibstil ist anders. 

The image showcases a race car featuring the well-known sponsorship branding "Nationwide," likely the primary vehicle in the Nationwide Series. The vehicle has a blue hood with the "Nationwide" logo prominently displayed and white text that reads, "on your side," on the windscreen. The car is predominantly white and grey, adorned with sponsor decals on various parts of the vehicle.

The front grille showcases the Chevrolet "Bowtie" logo, and the car is equipped with Chevrolet emblems and other sponsor decals, including:

• A white 88 logo on the front windscreen

Notably, the vehicle's wheels are equipped with "GoodYear

7. Einrichten des Modells für die Feinabstimmung

Wir werden nun das Modell für das Training einstellen und einen SFT-Trainer (Supervised Fine-Tuning) initialisieren, um ein Bildverarbeitungsmodell für das Training mit einem benutzerdefinierten Datensammler, einem Datensatz und einer Trainingskonfiguration vorzubereiten, die für ein effizientes Fine-Tuning optimiert sind.

from unsloth import is_bf16_supported
from unsloth.trainer import UnslothVisionDataCollator
from trl import SFTTrainer, SFTConfig

FastVisionModel.for_training(model)  # Enable for training!

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    data_collator=UnslothVisionDataCollator(model, tokenizer),  # Must use!
    train_dataset=converted_dataset,
    args=SFTConfig(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=5,
        max_steps=30,
        learning_rate=2e-4,
        fp16=not is_bf16_supported(),
        bf16=is_bf16_supported(),
        logging_steps=5,
        optim="adamw_8bit",
        weight_decay=0.01,
        lr_scheduler_type="linear",
        seed=3407,
        output_dir="outputs",
        report_to="none",  # For Weights and Biases
        remove_unused_columns=False,
        dataset_text_field="",
        dataset_kwargs={"skip_prepare_dataset": True},
        dataset_num_proc=4,
        max_seq_length=2048,
    ),
)

8. Das Modell trainieren

Starte den Trainingsprozess, indem du den trainer.train() Code ausführst. 

trainer_stats = trainer.train()

Das Modell hat eine Epoche in 16 Minuten abgeschlossen, und der Trainingsverlust hat sich allmählich verringert. Das ist ein gutes Ergebnis.

Modell-Feinabstimmung Trainingsverlust.

9. Modellinferenz nach der Feinabstimmung

Wir werden nun unser Modell testen, um zu prüfen, ob die Feinabstimmung erfolgreich war. Wir werden dasselbe Beispielbild aus dem Datensatz auswählen und die Inferenz darauf anwenden.

FastVisionModel.for_inference(model)  # Enable for inference!

image = dataset[45]["image"]

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": instruction},
        ],
    }
]
input_text = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)
inputs = tokenizer(
    image,
    input_text,
    add_special_tokens=False,
    return_tensors="pt",
).to("cuda")

from transformers import TextStreamer

text_streamer = TextStreamer(tokenizer, skip_prompt=True)
_ = model.generate(
    **inputs,
    streamer=text_streamer,
    max_new_tokens=128,
    use_cache=True,
    temperature=1.5,
    min_p=0.1
)

Die Ergebnisse sind toll, aber nicht ganz genau. Die Hashtags waren unnötig. Um optimale Ergebnisse zu erzielen, müssen wir das Modell mit dem gesamten Datensatz mit mindestens 3 Eposh trainieren. 

Bring the thrill of NASCAR racing to your desk or shelf with the 1/64 Die-Cast 2016 NASCAR 88 Dale Earnhardt Jr. Nationwide Chevrolet SS!  Highly detailed and precision engineered, this collectible die-cast car captures the iconic look of Earnhardt's famous No. 88 ride. Perfect for kids and adults alike, this miniature masterpiece makes a great gift. #NASCAR #DieCast #CollectibleCars #DaleEarnhardtJr #Nationwide<|eot_id|>

10. Speichern des Modells und des Tokenizers

Wir speichern das Modell lokal und schieben es dann zum Hugging Face Hub. Um das Modell auf den Hugging Face-Server hochzuladen, müssen wir uns mit unserem Hugging Face-Token anmelden. 

Entdecke die transformative Welt von Hugging Face, dem Open-Source-Hub der KI-Community für maschinelles Lernen und große Sprachmodelle (LLMs), indem du den Blog liest . Was ist Hugging Face? Die Open-Source-Oase der KI-Community.

from huggingface_hub import login
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()

hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN")
login(hf_token)

Danach speicherst du das Modell und den Tokenizer lokal.

model.save_pretrained("llama_3.2_vision_amazon_product") # Local saving
tokenizer.save_pretrained("llama_3.2_vision_amazon_product")

Verwende dann push_to_hub, um das Modell auf dem Hugging Face Hub zu speichern.

model.push_to_hub(
    "kingabzpro/llama_3.2_vision_amazon_product"
)  # Online saving
tokenizer.push_to_hub(
    "kingabzpro/llama_3.2_vision_amazon_product"
)  # Online saving
Saved model to https://huggingface.co/kingabzpro/llama_3.2_vision_amazon_product

Mit dem obigen Befehl wird das neue Modell-Repository erstellt und alle Dateien an Hugging Face übertragen. 

Feinabgestimmtes Sichtmodell für den Hugging Face Hub.

Source: kingabzpro/llama_3.2_vision_amazon_product

Wenn du Probleme beim Ausführen des obigen Codes hast, schau bitte im Kaggle-Notizbuch nach: Feinabstimmung der Llama 3.2 Vision auf dem Amazon-Datensatz

Fazit

Die Feinabstimmung der Llama 3.2 Vision-Modelle eröffnet eine neue Welt der Möglichkeiten, insbesondere in Szenarien, in denen sowohl Bilder als auch Text benötigt werden, um relevante und genaue Ergebnisse zu liefern. Durch die Feinabstimmung mit einem benutzerdefinierten Datensatz können wir die Leistung verbessern und den Stil für Anwendungen wie Visual Question Answering (VQA), Document VQA (DocVQA), Image Captioning und Image-Text Retrieval anpassen.

In diesem Tutorial tauchen wir tief in die Llama 3.2 Vision Modelle ein. Wir stimmen die 11B-Variante des Modells auch auf den Amazon-Produktbeschreibungsdatensatz ab, um einen hochgradig angepassten Produktbeschreibungsgenerator zu erstellen, der den gewünschten Stil annimmt und genaue Produktbeschreibungen liefert.

Im nächsten Schritt lernst du, wie du die KI-Anwendung erstellst und mit einem Docker-Image in der Cloud bereitstellst, indem du der Anleitung folgst: Wie man LLM-Anwendungen mit Docker einsetzt: Eine Schritt-für-Schritt-Anleitung.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Als zertifizierter Data Scientist ist es meine Leidenschaft, modernste Technologien zu nutzen, um innovative Machine Learning-Anwendungen zu entwickeln. Mit meinem fundierten Hintergrund in den Bereichen Spracherkennung, Datenanalyse und Reporting, MLOps, KI und NLP habe ich meine Fähigkeiten bei der Entwicklung intelligenter Systeme verfeinert, die wirklich etwas bewirken können. Neben meinem technischen Fachwissen bin ich auch ein geschickter Kommunikator mit dem Talent, komplexe Konzepte in eine klare und prägnante Sprache zu fassen. Das hat dazu geführt, dass ich ein gefragter Blogger zum Thema Datenwissenschaft geworden bin und meine Erkenntnisse und Erfahrungen mit einer wachsenden Gemeinschaft von Datenexperten teile. Zurzeit konzentriere ich mich auf die Erstellung und Bearbeitung von Inhalten und arbeite mit großen Sprachmodellen, um aussagekräftige und ansprechende Inhalte zu entwickeln, die sowohl Unternehmen als auch Privatpersonen helfen, das Beste aus ihren Daten zu machen.

Themen

Top KI-Kurse

Zertifizierung verfügbar

Kurs

Feinschliff mit Llama 3

2 hr
298
Mit TorchTune kannst du Llama für deine eigenen Aufgaben abstimmen und lernst Techniken für eine effiziente Feinabstimmung, wie z.B. die Quantisierung.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Mehr anzeigenMehr anzeigen