Einführung

Das Trainieren und Feinabstimmen von Sprachmodellen kann komplex sein, insbesondere wenn Effizienz und Effektivität angestrebt werden. Ein effektiver Ansatz besteht in der Verwendung von parametereffizienten Feinabstimmungstechniken wie Low-Rank-Adaption (LoRA) in Kombination mit Feinabstimmung von Anweisungen. Dieser Artikel beschreibt die wichtigsten Schritte und Überlegungen zur Feinabstimmung des großen Sprachmodells LlaMa 2 mithilfe dieser Methode. Er untersucht die Verwendung des Unsloth-KI Framework, um den Feinabstimmungsprozess noch schneller und effizienter zu gestalten.

Wir werden Schritt für Schritt vorgehen, um das Thema besser zu verstehen!

Was ist Unsloth?

Unsloth AI ist eine bahnbrechende Plattform, die die Feinabstimmung und das Coaching von Sprachmodellen (Llama 2) rationalisiert und sie schneller und effizienter macht. Dieser Artikel basiert auf einer praktischen Sitzung von Daniel Han, dem Mitbegründer von Unsloth AI. Daniel ist leidenschaftlich daran interessiert, Innovationen an ihre Grenzen zu bringen. Mit umfangreicher Erfahrung bei Nvidiaer hat die KI- und maschinelle Lernbranche maßgeblich beeinflusst. Lassen Sie uns den Alpaca-Datensatz einrichten, um die Feinabstimmung von Llama 2 mit Unsloth zu verstehen.

Einrichten des Datensatzes

Der Alpaca-Datensatz ist aufgrund seiner Einfachheit und Effektivität beliebt zum Trainieren von Sprachmodellen. Er umfasst 52.000 Zeilen, die jeweils drei Spalten enthalten: Anweisung, Eingabe und Ausgabe. Der Datensatz ist auf Hugging Face verfügbar und wird vorbereinigt geliefert, was Zeit und Aufwand bei der Datenaufbereitung spart.

Der Alpaca-Datensatz hat drei Spalten: Anweisung, Eingabe und Ausgabe. Die Anweisung gibt die Aufgabe vor, die Eingabe liefert den Kontext oder die Frage und die Ausgabe ist die erwartete Antwort. Eine Anweisung könnte beispielsweise lauten: „Geben Sie drei Tipps, um gesund zu bleiben“, wobei die Ausgabe drei relevante Gesundheitstipps sind. Nun formatieren wir den Datensatz, um sicherzustellen, dass der Datensatz kompatibel ist.

Formatieren des Datensatzes

Wir müssen es richtig formatieren, um sicherzustellen, dass der Datensatz mit unserem Trainingscode übereinstimmt. Die Formatierungsfunktion fügt eine zusätzliche Spalte (Textual content) hinzu, die Anweisung, Eingabe und Ausgabe in einer einzigen Eingabeaufforderung kombiniert. Diese Eingabeaufforderung wird zum Coaching in das Sprachmodell eingespeist.

Hier ist ein Beispiel, wie ein formatierter Datensatzeintrag aussehen könnte:

  • Auftrag: „Geben Sie drei Tipps, um gesund zu bleiben.“
  • Eingabe: „“
  • Ausgabe: „1. Ernähren Sie sich ausgewogen. 2. Treiben Sie regelmäßig Sport. 3. Schlafen Sie ausreichend.“
  • Textual content: „Nachfolgend finden Sie eine Anweisung, die eine Aufgabe beschreibt. Schreiben Sie eine Antwort, die die Anforderung angemessen ergänzt. nn Anweisung: Geben Sie drei Tipps, um gesund zu bleiben. nn Antwort: 1. Ernähren Sie sich ausgewogen. 2. Treiben Sie regelmäßig Sport. 3. Schlafen Sie ausreichend.

Der <EOS> Token ist entscheidend, da es das Ende der Sequenz anzeigt und verhindert, dass das Modell endlosen Textual content generiert. Lassen Sie uns das Modell für eine bessere Leistung trainieren.

Trainieren des Modells

Sobald das Datensatz richtig formatiert ist, fahren wir mit der Trainingsphase fort. Wir verwenden die Unsloth Rahmen, der die Effizienz des Trainingsprozesses steigert.

Schlüsselparameter zum Trainieren des Modells

  • Batchgröße: Bestimmt, wie viele Proben verarbeitet werden, bevor die Modellparameter aktualisiert werden. Eine typische Batchgröße ist 2.
  • Gradientenakkumulation: Gibt an, wie viele Batches akkumuliert werden sollen, bevor ein Rückwärtsdurchlauf durchgeführt wird. Normalerweise auf 4 eingestellt.
  • Aufwärmschritte: Erhöhen Sie zu Beginn des Trainings die Lernrate schrittweise. Häufig wird ein Wert von 5 verwendet.
  • Max. Schritte: Begrenzt die Anzahl der Trainingsschritte. Zu Demonstrationszwecken kann dies auf 3 eingestellt werden, aber normalerweise würden Sie eine höhere Zahl wie 60 verwenden.
  • Lernrate: Steuert die Schrittweite während der Optimierung. Ein Wert von 2e-4 ist Normal.
  • Optimierer: AdamW 8-bit wird empfohlen, um den Speicherverbrauch zu reduzieren.

Durchführen des Trainings

Das Trainingsskript verwendet den formatierten Datensatz und die angegebenen Parameter zur Feinabstimmung Lama 2. Das Skript enthält Funktionen zum Umgang mit dem EOS-Token und zum Sicherstellen einer ordnungsgemäßen Sequenzbeendigung während des Trainings und der Inferenz.

Inferenz um die Fähigkeiten des Modells zu überprüfen

Nach dem Coaching testen wir die Fähigkeit des Modells, auf der Grundlage neuer Eingabeaufforderungen geeignete Antworten zu generieren. Wenn wir das Modell beispielsweise mit „Setzen Sie die Fibonacci-Folge fort: 0, 1, 1, 2, 3, 5, 8, 13“ auffordern, sollte das Modell „21“ generieren.

# alpaca_prompt = Copied from above

FastLanguageModel.for_inference(mannequin) # Allow native 2x quicker inference

inputs = tokenizer(

(

   alpaca_prompt.format(

       "Proceed the fibonnaci sequence.", # instruction

       "1, 1, 2, 3, 5, 8", # enter

       "", # output - depart this clean for era!

   )

), return_tensors = "pt").to("cuda")

outputs = mannequin.generate(**inputs, max_new_tokens = 64, use_cache = True)

tokenizer.batch_decode(outputs)

Sie können auch einen TextStreamer für kontinuierliche Inferenz verwenden – so können Sie die Generierung Token für Token verfolgen, anstatt die ganze Zeit zu warten!

# alpaca_prompt = Copied from above
FastLanguageModel.for_inference(mannequin) # Allow native 2x quicker inference
inputs = tokenizer(
(
   alpaca_prompt.format(
       "Proceed the fibonnaci sequence.", # instruction
       "1, 1, 2, 3, 5, 8", # enter
       "", # output - depart this clean for era!
   )
), return_tensors = "pt").to("cuda")


from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = mannequin.generate(**inputs, streamer = text_streamer, max_new_tokens = 128)

Nachfolgend finden Sie eine Anweisung, die eine Aufgabe beschreibt, gepaart mit einer Eingabe, die weiteren Kontext liefert. Schreiben Sie eine Antwort, die die Anfrage angemessen ergänzt.

Anweisung:

Setzen Sie die Fibonacci-Folge fort.

Eingang:

1, 1, 2, 3, 5, 8

Antwort:

13, 21, 34, 55, 89, 144

LoRa-Modellintegration

Zusätzlich zu herkömmlichen Feinabstimmungstechniken kann die Einbindung des LoRa-Modells (Log-odds Ratio Consideration) die Effizienz und Effektivität des Sprachmodelltrainings weiter verbessern. Das LoRa-Modell, das für seinen Aufmerksamkeitsmechanismus bekannt ist, nutzt Log-Odds-Ratios, um Token-Abhängigkeiten zu erfassen und das Kontextverständnis zu verbessern.

Hauptvorteile des LoRa-Modells:

  1. Verbessertes Kontextverständnis: Der LoRa-Modelle Durch den Aufmerksamkeitsmechanismus können Token-Abhängigkeiten innerhalb der Eingabesequenz besser erfasst werden, was zu einem verbesserten Kontextverständnis führt.
  2. Effiziente Aufmerksamkeitsberechnung: Das LoRa-Modell optimiert die Aufmerksamkeitsberechnung mithilfe von Log-Odds-Ratios, was zu schnelleren Trainings- und Inferenzzeiten als bei herkömmlichen Aufmerksamkeitsmechanismen führt.
  3. Verbesserte Modellleistung: Die Integration des LoRa-Modells in die Trainingspipeline kann die Modellleistung verbessern, insbesondere bei Aufgaben, die weitreichende Abhängigkeiten und ein differenziertes Kontextverständnis erfordern.

Speichern und Laden des Modells

Nach dem Coaching kann das Modell lokal gespeichert oder hochgeladen werden auf Umarmendes Gesicht für einfaches Teilen und Bereitstellen. Das gespeicherte Modell umfasst:

  • adapter_config.json
  • adapter_model.bin

Diese Dateien sind für das Neuladen des Modells und die Fortsetzung der Inferenz oder des weiteren Trainings unerlässlich.

Um das endgültige Modell als LoRA-Adapter zu speichern, verwenden Sie Huggingfaces „push_to_hub“ für eine On-line-Speicherung oder „save_pretrained“ für eine lokale Speicherung.

mannequin.save_pretrained("lora_model") # Native saving

tokenizer.save_pretrained("lora_model")

# mannequin.push_to_hub("your_name/lora_model", token = "...") # On-line saving

# tokenizer.push_to_hub("your_name/lora_model", token = "...") # On-line saving

Now, if you wish to load the LoRA adapters we simply saved for inference, set False to True:

if False:

   from unsloth import FastLanguageModel

   mannequin, tokenizer = FastLanguageModel.from_pretrained(

       model_name = "lora_model", # YOUR MODEL YOU USED FOR TRAINING

       max_seq_length = max_seq_length,

       dtype = dtype,

       load_in_4bit = load_in_4bit,

   )

   FastLanguageModel.for_inference(mannequin) # Allow native 2x quicker inference

# alpaca_prompt = You MUST copy from above!

inputs = tokenizer(

(

   alpaca_prompt.format(

       "What's a well-known tall tower in Paris?", # instruction

       "", # enter

       "", # output - depart this clean for era!

   )

), return_tensors = "pt").to("cuda")

outputs = mannequin.generate(**inputs, max_new_tokens = 64, use_cache = True)

tokenizer.batch_decode(outputs)

Feinabstimmung unstrukturierter Protokolle

Ja, Feinabstimmung kann für unstrukturierte Protokolle verwendet werden, die in Blob-Dateien gespeichert sind. Der Schlüssel liegt darin, den Datensatz richtig vorzubereiten, was einige Zeit dauern kann, aber machbar ist. Es ist wichtig zu beachten, dass das Verschieben in niedrigere Bits im Modell normalerweise die Genauigkeit verringert, wenn auch oft nur um etwa 1 %.

Bewertung der Modellleistung

Wenn die Leistung eines Modells nach der Feinabstimmung nachlässt, ist häufig Überanpassung der Grund. Um dies zu beurteilen, sollten Sie sich den Bewertungsverlust ansehen. Anleitungen zur Bewertung des Verlusts finden Sie auf unserer Wiki-Seite auf GitHub. Um zu vermeiden, dass während der Bewertung der Speicher ausgeht, verwenden Sie eine Genauigkeit von Float 16 und verringern Sie die Batchgröße. Die Normal-Batchgröße liegt normalerweise bei etwa 8, aber Sie müssen sie für die Bewertung möglicherweise weiter verringern.

Auswertung und Überanpassung

Überwachen Sie den Auswertungsverlust, um zu prüfen, ob Ihr Modell überangepasst ist. Wenn der Verlust zunimmt, ist Überanpassung wahrscheinlich, und Sie sollten in Erwägung ziehen, den Trainingslauf abzubrechen.

Tipps und Techniken zur Feinabstimmung

Hier sind die Tipps und Techniken, die Sie kennen müssen:

Speicherverwaltung

  • Verwenden Sie während der Auswertung die Genauigkeit Float 16, um Speicherprobleme zu vermeiden.
  • Für die Feinabstimmung ist häufig weniger Speicher erforderlich als für andere Vorgänge, z. B. das Speichern des Modells, insbesondere bei optimierten Arbeitsabläufen.

Bibliotheksunterstützung für Batch-Inferenz

  • Bibliotheken wie Unsloft ermöglichen Batch-Inferenz und erleichtern so die gleichzeitige Verarbeitung mehrerer Eingabeaufforderungen.

Zukünftige Richtungen

  • Als Modelle wie GPT-5 und auch in Zukunft wird die Feinabstimmung weiterhin related bleiben, insbesondere für diejenigen, die keine Daten auf Dienste wie OpenAI hochladen möchten. Die Feinabstimmung bleibt entscheidend, um spezifisches Wissen und Fähigkeiten in Modelle einzubringen.

Weiterführende Themen

  • Automatische Optimierung beliebiger Modelle: Wir arbeiten an der Optimierung jeder Modellarchitektur mithilfe eines automatischen Compilers mit dem Ziel, die Kompilierungsfunktionen von PyTorch nachzuahmen.
  • Umgang mit großen Sprachmodellen: Mehr Daten und ein höherer Rang bei der Feinabstimmung können die Ergebnisse für groß angelegte Sprachmodelle verbessern. Darüber hinaus kann die Anpassung von Lernraten und Trainingsepochen die Modellleistung verbessern.
  • Umgang mit Angst und Unsicherheit: Angesichts der Fortschritte bei Modellen wie GPT-4 und darüber hinaus gibt es häufig Bedenken hinsichtlich der Zukunft der Feinabstimmung. Die Feinabstimmung bleibt jedoch von entscheidender Bedeutung, insbesondere für Open-Supply-Modelle, die für die Demokratisierung der KI und den Widerstand gegen die Monopolisierung der KI-Fähigkeiten durch große Technologieunternehmen von entscheidender Bedeutung sind.

Abschluss

Die Feinabstimmung und Optimierung von Sprachmodellen sind entscheidende Aufgaben in der KI, die eine sorgfältige Datensatzvorbereitung, Speicherverwaltung und Auswertungstechniken erfordern. Die Verwendung von Datensätzen wie dem Alpaka Datensätze und Instruments wie die Modelle Unsloth und LoRa können die Modellleistung erheblich verbessern.

Um KI-Instruments effektiv nutzen zu können, ist es wichtig, über die neuesten Entwicklungen auf dem Laufenden zu bleiben. High-quality-tune Llama 2 ermöglicht die Anpassung von Modellen und verbessert so deren Anwendbarkeit in verschiedenen Bereichen. Wichtige Techniken wie Gradientenakkumulation, Aufwärmschritte und optimierte Lernraten verfeinern den Trainingsprozess für mehr Effizienz und Leistung. Fortgeschrittene Modelle wie LoRamit verbesserten Aufmerksamkeitsmechanismen und effektiven Speicherverwaltungsstrategien, wie z. B. der Verwendung von Float-16-Präzision während der Auswertung, tragen zur optimalen Ressourcennutzung bei. Überwachungstools wie NVIDIA SMI helfen, Probleme wie Überanpassung und Speicherüberlauf zu vermeiden.

Während sich die KI mit Modellen wie GPT-5 weiterentwickelt, bleibt die Feinabstimmung für die Einbringung spezifischer Kenntnisse in die Modelle von entscheidender Bedeutung, insbesondere für Open-Supply-Modelle, die die KI demokratisieren.

Häufig gestellte Fragen

F1: Woher weiß ich, ob mein Datensatz groß genug ist?

A: Mehr Daten verbessern normalerweise die Modellleistung. Um die Ergebnisse zu verbessern, sollten Sie Ihren Datensatz mit einem von Hugging Face kombinieren.

F2: Welche Ressourcen werden zum Debuggen und Optimieren empfohlen?

A: NVIDIA SMI ist ein nützliches Device zur Überwachung der GPU-Speichernutzung. Wenn Sie Colab verwenden, bietet es auch integrierte Instruments zur Überprüfung der VRAM-Nutzung.

F3: Erzählen Sie mir etwas über die Quantisierung und ihre Auswirkungen auf die Modellspeicherung.

A: Die Quantisierung trägt zur Reduzierung der Modellgröße und des Speicherbedarfs bei, kann jedoch zeitaufwändig sein. Wählen Sie immer die geeignete Quantisierungsmethode und vermeiden Sie die gleichzeitige Aktivierung aller Optionen.

F4: Wann sollte ich Feinabstimmung statt Retrieval-Augmented Technology (RAG) wählen?

A: Aufgrund der höheren Genauigkeit ist die Feinabstimmung in Produktionsumgebungen häufig die bevorzugte Wahl. RAG kann bei allgemeinen Fragen mit großen Datensätzen nützlich sein, bietet jedoch möglicherweise nicht das gleiche Maß an Präzision.

F5: Was ist die empfohlene Anzahl von Epochen für die Feinabstimmung und in welchem ​​Verhältnis steht sie zur Datensatzgröße?

A: Normalerweise werden 1 bis 3 Epochen empfohlen. Einige Untersuchungen empfehlen bis zu 100 Epochen für kleine Datensätze, aber die Kombination Ihres Datensatzes mit einem Hugging Face-Datensatz ist im Allgemeinen vorteilhafter.

F6: Gibt es Mathematikressourcen, die Sie für das Modelltraining empfehlen würden?

A: Ja, Andrew Ngs CS229-Vorlesungen, MITs OpenCourseWare zur linearen Algebra und verschiedene YouTube-Kanäle mit Schwerpunkt auf KI und maschinellem Lernen sind hervorragende Ressourcen, um Ihr Verständnis der Mathematik hinter dem Modelltraining zu verbessern.

F7: Wie kann ich die Speichernutzung während des Modelltrainings optimieren?

A: Durch aktuelle Entwicklungen konnte der Speicherbedarf um 30 % gesenkt werden, bei leichtem Zeitgewinn. Entscheiden Sie sich beim Speichern von Modellen für eine einzige Methode, z. B. das Speichern in 16 Bit oder das Hochladen in Hugging Face, um den Speicherplatz effizient zu verwalten.

Für ausführlichere Anleitungen zur Feinabstimmung von LLaMA 2 und anderen großen Sprachmodellen besuchen Sie unseren DataHour-Sitzung zum Thema LLM-Feintuning für Anfänger mit Unsloth.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert