Feinabstimmung: OpenAI-Modelle und deine Confluence-Daten

Auf Geschwindigkeit ausgelegt: ~ 10 ms Latenz, auch unter Last
Unglaublich schnelle Methode zum Erstellen, Verfolgen und Bereitstellen Ihrer Modelle!
- Verarbeitet mehr als 350 RPS auf nur 1 vCPU — kein Tuning erforderlich
- Produktionsbereit mit vollem Unternehmenssupport
Wenn ChatGPT das iPhone ist, dann muss der AppStore noch gebaut werden — und das wird eine Suite vertikaler Anwendungen sein, die darauf aufbauen. Jede Branche, jedes Unternehmen und jeder Einzelne wird diese Anwendungen auf kleine und große Weise entwickeln. Angefangen beim Aufbau eines ChatGPT für das Gesundheitswesen oder die Fertigung über das Schreiben von domänenspezifischen E-Mails für das Marketing, über die Beantwortung unternehmensspezifischer Fragen aus der internen Wissensdatenbank bis hin zum Aufbau persönlicher Suchmaschinen zur Beantwortung von Fragen wie — wie lautet Johns Adresse oder wann hat meine Schwiegermutter Geburtstag? Wir haben hier in unserem vorherigen Blogbeitrag eine Reihe von Beispielen geschrieben.
Warum reicht ChatGPT an sich für diese vertikalen Anwendungen nicht aus?
Um das zu verstehen, ist es wichtig, Clear und Deep Web zu verstehen:
- Web löschen: öffentlich zugängliche Webseiten, die von Suchmaschinen indexiert werden. z. B. Wikipedia, Bücher, Beiträge in sozialen Netzwerken usw.
- Deep Web: Teil des Internets, der sich hinter einem Authentifizierungssystem befindet. z. B. Ihre E-Mail- oder SaaS-Plattformen. Dies macht 96% des Webs aus.
Modelle wie ChatGPT werden mit einem riesigen Datensatz trainiert, aber all das ist im übersichtlichen Web verfügbar. Sie können also keine Frage stellen, deren Antwort von irgendetwas im Deep Web wie Ihren E-Mails oder privaten Dokumenten abhängt. Beim Lernen aus dem riesigen übersichtlichen Web-Datensatz bauen Modelle wie ChatGPT jedoch so viel Intelligenz über Sprache und Semantik auf, dass es für das System viel einfacher ist, aus kleinen Datenmengen neue Informationen für eine bestimmte Aufgabe zu lernen.
Kommen Sie zur Feinabstimmung
Die Feinabstimmung ist eine leistungsstarke Technik, die es uns ermöglicht, das Wissen und das Lernen eines vortrainierten Modells wie ChatGPT zu nutzen, um die Leistung des Modells bei einer neuen Aufgabe zu verbessern, indem wir es an einem kleineren, aufgabenspezifischen Datensatz trainieren. Nehmen wir zum Beispiel an, du möchtest ein System zur Beantwortung von Fragen für deine internen Unternehmensdokumente erstellen, die in Confluence gespeichert sind. Du kannst den gesamten Textinhalt aus deinem Confluence weitergeben und mit ihnen ein GPT-Modell optimieren.
Klingt einfach. Warum machen das nicht alle?
OpenAI hat zwar durch seine APIs zur Feinabstimmung eine Menge Reibung reduziert, erfordert aber immer noch ein gewisses Maß an Überlegung, Planung und Aufwand entlang verschiedener Achsen.
Vorbereitung der Daten
Die Daten, die Sie für die Feinabstimmung der Modelle benötigen, müssen in einem bestimmten Prompt-Complettion-Paarformat vorliegen.
{„prompt“:<prompt-text>, „Abschluss“:<ideal generated text>}
Ein paar Hinweise, die es zu beachten gilt:
- Es ist nicht trivial, beliebige Dokumente wie Confluence-Dokumente von Unternehmen zu nehmen und sie in hochwertige Beispiele im oben genannten Format umzuwandeln.
- Sie benötigen mindestens ein paar hundert Eingabeaufforderungen, was menschlichen Einsatz und Fachkenntnisse erfordert.
- Sorgfältige Trennzeichen kennzeichnen den Anfang und das Ende der Aufforderung sowie Vervollständigungen, die nicht im Text vorkommen. Sie müssen auch sicherstellen, dass die Eingabeaufforderungen später dieselben Trennzeichen verwenden.
- Wenn Sie die Anzahl der Beispiele erhöhen, wird die Leistung des Modells verbessert.
- Etwas so Einfaches wie das Hinzufügen eines Leerzeichens vor Beginn der Fertigstellung kann die Leistung verbessern.
Modellauswahl
OpenAI hat mehrere Modelle, die fein abgestimmt werden können, und jedes von ihnen hat Kompromisse, die berücksichtigt werden müssen.
- Ada: Kleinere, schnellere Modelle lassen sich leicht anpassen und eignen sich gut für eine Reihe von Aufgaben wie Klassifikation, Sprachgenerierung und Beantwortung von Fragen. Da es über weniger Parameter verfügt, ist es auch weniger leistungsfähig als andere Modelle und kann zu Einbußen bei der Präzision führen.
- Curie: Größer und leistungsfähiger als Ada und auch universell einsetzbar. Bei kleineren Datensätzen wird es aufgrund einer großen Anzahl von Parametern schwieriger, Feinabstimmungen vorzunehmen.
- Babbage: Konzipiert für NLP-Aufgaben, die Spezialkenntnisse wie Recht oder Medizin erfordern und sehr gut angepasst werden können. Es ist nicht so allgemein einsetzbar und nicht für die Feinabstimmung größerer Datensätze oder komplexerer Aufgaben geeignet.
- Da Vinci: Größtes und leistungsstärkstes Allzweckmodell. Es ist sehr schwer auf weniger leistungsfähiger Hardware zu trainieren und sollte für komplexe NLP-Aufgaben verwendet werden.
Hinweis: Sie können ein zuvor fein abgestimmtes Modell auch schrittweise optimieren. Aufgrund der Änderung der APIs gibt es einige Einschränkungen hinsichtlich des Zeitrahmens, sodass die Modelle nach dem 21. April 2022 optimiert worden sein müssen.
Auswahl von Hyperparametern
Wir haben versucht, die APIs von OpenAI mit Standardparametern zu optimieren, und sie haben bei einigen Aufgaben sehr gut funktioniert, aber wir konnten Verbesserungen von bis zu 40% erzielen, indem wir die Hyperparameter optimiert haben.
- Lernraten-Multiplikator: Der Standardwert ist 0,05, 0,1 oder 0,2, abhängig von der endgültigen Batch_Size. Die Lernrate für die Feinabstimmung ist die ursprüngliche Lernrate, die für das Vortraining verwendet wurde, multipliziert mit diesem Multiplikator. Die Lernrate bestimmt, wie schnell das Modell seine Gewichte während des Trainings anpasst. Eine zu hohe Lernrate kann dazu führen, dass das Modell zu einer suboptimalen Lösung konvergiert, während eine zu niedrige Lernrate dazu führen kann, dass das Modell zu langsam konvergiert oder bei einem lokalen Minimum hängen bleibt. OpenAI empfiehlt, für größere Chargengrößen höhere Lernraten zu verwenden, in der Regel jedoch zwischen 0,02 und 0,2 zu arbeiten.
- Chargengröße: Der Standardwert ist ~ 0,2% der Anzahl der Beispiele im Trainingssatz, begrenzt auf 256. Die Stapelgröße bestimmt, wie viele Beispiele in jeder Trainingsiteration verarbeitet werden. Eine größere Batchgröße kann zu schnelleren Trainingszeiten führen, aber sie kann auch dazu führen, dass das Modell überdimensioniert wird oder zu einer höheren Speicherauslastung führt. Es wird generell empfohlen, eine Batchgröße zu verwenden, die so groß wie möglich ist, ohne dass es zu einer übermäßigen Speicherauslastung kommt.
- Anzahl der Epochen: ist standardmäßig auf 4 eingestellt. Die Anzahl der Epochen bestimmt, wie oft das Modell für den gesamten Datensatz trainiert wird. Zu wenige Epochen können zu einer Unteranpassung führen, während zu viele Epochen zu einer Überanpassung führen können. Es wird generell empfohlen, die Leistung des Modells anhand eines Validierungssatzes zu überwachen und das Training abzubrechen, wenn sich die Leistung nicht mehr verbessert.
- Sofortiger Gewichtsverlust: ist standardmäßig auf 0,01 eingestellt. Das Gewicht, das für den Verlust der Eingabeaufforderungsmarken verwendet werden soll. Dadurch wird gesteuert, wie viel das Modell zu lernen versucht, um die Aufforderung zu generieren (im Vergleich zum Abschluss, der immer eine Gewichtung von 1,0 hat), und kann dem Training einen stabilisierenden Effekt verleihen, wenn die Abschlüsse zu kurz sind. Für kurze Aufforderungen empfiehlt OpenAI, diese Zahl zu erhöhen, und für lange Aufforderungen funktioniert eine kleine Gewichtung am besten.
- Modell: standardmäßig Curie. Die oben beschriebene Tabelle zur Modellauswahl ist ebenfalls ein Hyperparameter, aber wir waren der Meinung, dass sie eine besondere Erwähnung verdient, da sie in diesem Prozess als Ausgangspunkt wichtig ist.
Berücksichtigung der Kosten
Die Kosten für die Feinabstimmung variieren stark, je nachdem, für welche Parameter Sie sich entscheiden. Daher ist es sehr wichtig, ein solides Verständnis zu haben.
📌
Für 1 Million Tokens:
- Preis: 0,4$
- Babbage: 0,6$
- Curie: 3$
- Davinci: 30$.
- 1 Token besteht aus ungefähr 4 Zeichen oder 0,75 Wörtern.
- Davinci ist fast 100x teurer als Ada.
- Curie ist 10x teurer als Ada und ist das Standardmodell.
- Um es ins rechte Licht zu rücken: Wikipedia hat ungefähr 5 Milliarden Tokens, sodass die Feinabstimmung einer Curie satte 15000$ kosten würde. Dies ist nur eine akademische Aussage, da diese Modelle auf Wikipedia bereits vorab trainiert wurden. Bitte speichern Sie Ihr $$.
- Die Anzahl der Trainingstoken hängt auch von deinen Trainingsepochen ab. Im Grunde genommen die Gesamtzahl der Trainingstoken = Tokens in deiner Datei * Anzahl der Epochen.
📌
Die Verwendung fein abgestimmter Modelle ist deutlich teurer (~5x) als die vortrainierten Gegenstücke.
Für 1 Million Tokens
- Preis: 1,6$ gegenüber 0,4$
- Babbage: 2,4$ gegenüber 0,5$
- Curie 12$ gegenüber 2$
- DaVinci 120$ gegenüber 20$
Wenn Sie das Modell verwenden, wirken sich Parameter wie bestof und n auch auf Ihre Kosten aus, da Sie am Ende mehrere Vervollständigungen für eine einzige Aufforderung generieren. Erwägen Sie, max_response_length zu verwenden, um Kosten zu sparen oder die Verwendung der Parameter best_of und n zu reduzieren.
Fallstudie. Feinabstimmung mit Confluence Docs
Die Erstellung eines fein abgestimmten Modells für unseren eigenen Konfluenzdatensatz war nicht trivial. Es umfasste den folgenden 4-stufigen Prozess.

Abrufen von Daten
Es hat mich ein bisschen Mühe gekostet, alle Daten von Confluence über seine APIs zu lesen, da Confluence über umfangreiche Daten mit Tabellen, Überschriften und Unterüberschriften verfügt und ich diese aus Gründen der Benutzerfreundlichkeit in einfachen Text umwandeln musste. Außerdem war die Verwaltung von Berechtigungen und der richtigen Zugriffsebene nicht trivial. Schließlich konnten wir ein sehr einfaches Formular erstellen, in dem Sie die URL, den Benutzernamen und den API-Schlüssel eingeben und wir die Daten abrufen können.
Datenvorverarbeitung
Das war der schwierigste Teil. Hier haben wir mehrere Ansätze ausprobiert-
- Zufälliges Aufteilen von Sätzen: basierend auf der Anzahl der Wörter in Eingabeaufforderungen und Vervollständigungen
- Regex: Trennen von Sätzen, die auf Wörtern wie- und, aber, aber usw. basieren.
- Chat GPT: ChatGPT einen Kontext geben und es bitten, Fragen zu generieren.

Schließlich haben wir die meisten Paare aus #3 ausgewählt, aber auch eine Zufallsstichprobe von #1 und #2 oben hinzugefügt. Für unseren Datensatz generierten wir über 50.000 Paare von Aufforderungen und Vervollständigungen mit einer durchschnittlichen Länge von 17 Wörtern für die Aufforderung und 133 Wörtern für die Antwort, also insgesamt 150 Wörter pro Paar. Im Idealfall würde dieser Schritt viel mehr Experimente erfordern.

Feinabstimmung des Modells
Wir haben mit verschiedenen Modellen und Hyperparametern experimentiert und festgestellt, dass Curie tendenziell besser abschneidet als Ada oder Babbage, aber wir hatten das Gefühl, dass es Ada angesichts des Kostenkompromisses gut geht. Wir haben Davinci nicht ausprobiert. Wir mussten die Lernrate anpassen und haben uns auf 0,05 festgelegt, während wir das Modell für 6 Epochen laufen ließen. Das Training eines Curie-Trainings kostete etwa 30$ und Ada etwa 4$. Insgesamt hätte es uns durch eine Reihe von Experimenten vielleicht 400$ an OpenAI-Credits für die Feinabstimmung gekostet - wir hatten auch ein paar schlechte Läufe.

Testen
Wir haben festgestellt, dass das fein abgestimmte Modell bei unseren internen datensatzbezogenen Fragen strikt besser abschneidet als das Originalmodell. Wir ließen unser Team etwa 100 seltsame Aufforderungen ausprobieren und bewerteten sie manuell. Das ist nicht wissenschaftlich, hat aber für diesen einfachen Anwendungsfall funktioniert. Interessanterweise haben wir festgestellt, dass das fein abgestimmte Modell bei allgemeinen Abfragen in einigen Fällen schlechter abschneidet als das Originalmodell. Wir müssen immer noch debuggen, was hier passiert.

Das war eine unterhaltsame Übung und wir werden daran arbeiten, mit der Feinabstimmung anderer Datensätze zu experimentieren.
📌
Wenn du bestimmte Datensätze haben möchtest oder möchtest, dass ich diese App öffne, um sie für dein eigenes Confluence zu verwenden, kontaktiere mich unter nikunj@truefoundry.com
Wahre Gießerei ist ein ML Deployment PaaS über Kubernetes, um die Workflows von Entwicklern zu beschleunigen und ihnen gleichzeitig volle Flexibilität beim Testen und Bereitstellen von Modellen zu bieten und gleichzeitig die volle Sicherheit und Kontrolle für das Infra-Team zu gewährleisten. Über unsere Plattform ermöglichen wir Teams für maschinelles Lernen bereitstellen und überwachen Modelle innerhalb von 15 Minuten mit 100% iger Zuverlässigkeit, Skalierbarkeit und der Möglichkeit, innerhalb von Sekunden rückgängig zu machen. So können sie Kosten sparen und Modelle schneller für die Produktion freigeben, wodurch ein echter Geschäftswert erzielt wird.
TrueFoundry AI Gateway bietet eine Latenz von ~3—4 ms, verarbeitet mehr als 350 RPS auf einer vCPU, skaliert problemlos horizontal und ist produktionsbereit, während LiteLM unter einer hohen Latenz leidet, mit moderaten RPS zu kämpfen hat, keine integrierte Skalierung hat und sich am besten für leichte Workloads oder Prototyp-Workloads eignet.
Der schnellste Weg, deine KI zu entwickeln, zu steuern und zu skalieren















.png)




.png)






.webp)

.webp)



