Titelbild von Jason Leung auf Unsplash
Dies ist der erste von wahrscheinlich vielen „Warum ich gemacht habe“-Beiträgen, der meine Gründe für die Entwicklung einer Software und das tiefere Eintauchen in zukünftige Verbesserungen erklärt.
Heute werde ich mich auf mein beliebtestes Projekt konzentrieren, TabbyAPI. TabbyAPI ist ein Python-basierter FastAPI-Server, der Benutzern die Interaktion mit Large Language Models (oder LLMs) mithilfe der ExllamaV2-Bibliothek ermöglicht und der OpenAI-API-Spezifikation entspricht.
Wenn Sie nicht sicher sind, was eines dieser Wörter bedeutet, sind Sie nicht im KI-Bereich. Aber das ist okay! Dieser Artikel soll meine Erfahrungen erklären, ohne Ihnen die ganze Küchenspüle der KI-Begriffe vor die Füße zu werfen.
Lassen Sie mich zurück in die Zeit im November 2023 gehen. KI boomte, Unternehmen veröffentlichten überall Modelle und der Hype-Zug schien kein Ende zu nehmen. Es scheint, als würde ich von einer Zeitspanne sprechen, die in der Antike liegt, aber damals fühlte sich jeder Tag wie ein ganzer Monat voller Innovationen an.
Angesichts des Ansturms dieser neuen Technologien konzentrierte ich mich darauf, sie mit meinem dürftigen 3090ti auszuführen. Ja, dürftig ist das richtige Wort, da 24 GB VRAM in einer Grafikkarte das Einstiegsniveau für den Betrieb der meisten KI-Modelle darstellen. Zu dieser Zeit war die Ausführung quantisierter Versionen von Modellen die Norm. Die Quantisierung ist analog zur Komprimierung, die es Benutzern ermöglicht, diese riesigen Modelle auf Verbraucher-GPUs auszuführen.
Das Format, das mir ans Herz gewachsen ist, war exl2, ein Format, das sich auf Geschwindigkeit, Optimierung und darauf konzentrierte, so viel wie möglich auf eine Grafikkarte zu bringen. und Token wurden mit Schallgeschwindigkeit erzeugt. Dieses Format ist also großartig! Was ist das Problem?
Das Problem liegt in der Ausführung des Modells. Exl2 ist Teil der ExllamaV2-Bibliothek, aber um ein Modell auszuführen, benötigt ein Benutzer einen API-Server. Die einzige verfügbare Option war die Verwendung von text-generation-webui (TGW), einem Programm, das jeden verfügbaren Loader in einem Gradio-Webui bündelt. Gradio ist ein gängiges „Baustein“-UI-Framework für die Python-Entwicklung und wird häufig für KI-Anwendungen verwendet. Dieses Setup war eine Zeit lang gut, bis es dann nicht mehr funktionierte.
Im Wesentlichen war der Hauptgrund für die Schaffung von Tabby Ärger. Der Arbeitsaufwand, der mit dem Laden eines Modells verbunden ist, hat mich müde gemacht. Ganz zu schweigen vom Overhead von Gradio und der schieren Menge an Abhängigkeiten von TGW. Ich respektiere den Entwickler, aber während TGW für viele Leute gut ist, die eine Komplettlösung wollen, war es für mich nicht gut.
Foto von Glenn Carstens-Peters auf Unsplash
ist einfach. Erstellen Sie einen API-Server, der auf meinem Computer installiert werden kann und für dessen Ausführung kein großer Aufwand erforderlich ist. Das klingt einfach, aber könnte ich es tatsächlich tun? Ich habe nicht viel Erfahrung in der KI-Modelltheorie, aber ich habe viel Erfahrung mit der Erstellung von Backend-Servern und dem Verständnis des API-Designs.
Deshalb brauchte ich jemanden, der mir half, aber wen? Betreten Sie turboderp, die Person hinter ExllamaV2. Seit er die Bibliothek erstellt hat, weiß er so ziemlich alles über die Funktionsweise von Modellen, was eine großartige Ergänzung zu meinen API-Kenntnissen darstellt. Darüber hinaus ist ein weiterer Interessent namens Splice aufgrund seiner Erfahrung mit Python beigetreten. Gemeinsam haben wir drei TabbyAPI gestartet.
Aber war der Plan wirklich so einfach? Na ja, irgendwie. Ich hatte zwar die Leute für den Job, aber meine Kenntnisse in Python und API-Servern waren im Grunde gleich Null. Am Ende habe ich ein Webserver-Framework namens FastAPI verwendet, was mir das Leben viel einfacher gemacht hat. Es ist auch in der Python-Community sehr beliebt und gut dokumentiert.
Nachdem ich FastAPI ein paar Tage lang verwendet hatte, war ich süchtig danach, Python-Webservercode zu schreiben. Die Dokumentation ist sehr gut, es gibt viele Beispiele online und die Entwickler sind offen für Feedback. Insgesamt ist die Community einladend und ich würde Python gerne öfter zum Networking nutzen.
Nach ein paar Wochen hatte ich das Gefühl, dass alles für eine öffentliche Bereitstellung bereit war, und beschloss, alles so gut wie möglich zu veröffentlichen. YOLO und pushe alles auf GitHub.
Wenn Sie ein Open-Source-Projekt der Welt veröffentlichen, müssen Sie mit Problemen rechnen ... Eine viele Probleme. Es gibt immer Anwendungsfälle, in die das Dienstprogramm nicht passt. Da Tabby ein Backend-Server ist, tauchten viele dieser Fälle auf. In diesem Beitrag werde ich nur ein paar Dinge erwähnen, mit denen ich anfangs nur schwer umgehen konnte.
Ein großes Problem war, dass ich Tabby mitten im RAG-Hype-Zyklus veröffentlicht habe. RAG steht für „Retrieval Augmented Generation“, also die Nutzung externer Dokumente zusätzlich zum Wissen des LLM, um eine Antwort zu erhalten. Das Problem bestand darin, dass diese neuen Techniken (z. B. Funktionsaufrufe) völlig andere API-Endpunkte und Methoden zur Ausführung von Aufgaben benötigen.
Darüber hinaus gibt es kaum oder gar keine Dokumentation darüber, wie diese Funktionen tatsächlich im Backend funktionieren. Bis heute habe ich den Tool-Call von OpenAI nicht implementiert, da ich keine Ahnung habe, wie er funktioniert. Der Mangel an Dokumentation ist in der KI-Welt leider weit verbreitet und erschwert Entwicklern die Möglichkeit, Code in ihre Projekte zu implementieren, ohne vorher viele Informationen zu sammeln.
Ein weiteres Problem, das mehrere Monate andauerte, war die Generierung mehrerer Benutzer. Es stellt sich heraus, dass die Handhabung verteilter Abfragen auf einem Server für einen Entwickler kein einfaches Thema ist. FastAPI bietet Unterstützung für diese Art von Workload, Tabby wurde jedoch mit synchronem Code geschrieben. Das bedeutete, dass ich asynchrones Programmieren in Python lernen musste (was bei weitem nicht einfach ist).
Das Schlimmste ist, dass KI-Entwickler asynchrones Python nicht mögen, während Netzwerkserver es akzeptieren. Das bedeutet, dass ich lernen musste, wie man in Form von Threading zwischen asynchronen und synchronen Bibliotheken kommuniziert. Dies ist ein noch tieferer Einblick in das Verständnis der Threading-Probleme von Python und warum das asynchrone Modell überhaupt existiert. Ich werde das alles in einem anderen Blogbeitrag besprechen, aber hoffentlich erklärt dies den Lernaufwand, den ich in den zwei bis drei Monaten bei der Bekämpfung dieser Probleme annehmen musste.
Schließlich arbeiteten Turbo und ich zusammen, um einen besseren Generator in der ExllamaV2-Bibliothek zu erstellen, der alle Mehrbenutzerprobleme und seltsamen Fehler aus Threading-Bibliotheken beseitigte. Nach 9 Monaten kann man mit Sicherheit sagen, dass Tabby endlich ein stabiles Programm zum Ausführen von Modellen ist.
Foto von Annie Spratt auf Unsplash
Während meiner gesamten Zeit als Softwareentwickler hatte ich nie eine Burnout-Phase. Das ist kaum zu glauben, da Burnout in der Softwarewelt weit verbreitet ist, aber ich wollte schon seit sechs Jahren immer etwas programmieren. Programmieren ist meine Lieblingsbeschäftigung und hilft mir, dem Stress des Tages zu entfliehen.
Allerdings haben Tabby und die KI-Community im Allgemeinen die Dinge verändert. Zu Beginn habe ich viele Freunde und Menschen gefunden, die gemeinsame Interessen an der Erforschung des boomenden Bereichs der KI hatten. Früher beteiligte sich meine Community fast jeden Tag an Sprachanrufen und konzentrierte sich auf den Austausch von Projekten und Ideen darüber, was es Neues in diesem Bereich gibt. Die Entwicklung hat Spaß gemacht und Spaß gemacht, da ich mit Gleichgesinnten abhängen und neue Ideen austauschen konnte.
Leider kamen diese Sprachanrufe immer seltener und seltener vor. Außerdem stand ich aufgrund des Abschlusses meines ersten Jahres meines Medizinstudiums unter großem Stress. In der Online-Welt war dies eine große Zeit der Einsamkeit für mich und die Entwicklung von Tabby fühlte sich zusätzlich zu meinem Leben als Medizinstudent wie eine Belastung an. Letztendlich gipfelten diese Ereignisse in einem großen Ball aus Frustration und Müdigkeit. Um das Problem zu lösen, habe ich beschlossen, eine unbestimmte Pause von der KI einzulegen.
Während meiner Pause verbrachte ich Zeit außerhalb von Tabby und verbrachte mehr Zeit damit, meine Sommerferien zu genießen. Ich habe tatsächlich an einigen älteren iOS-App-Projekten gearbeitet und Zeit mit meiner Familie verbracht. Mittlerweile beschäftige ich mich wieder mit der Entwicklung von Tabby. Die Sprachanrufe, an denen ich früher teilgenommen habe, werden aufgrund des nachlassenden KI-Hypes wahrscheinlich noch lange nicht mehr stattfinden. Es ist schwer zu schlucken, aber ich habe unterschiedliche Beweggründe für die Weiterentwicklung gefunden.
Tabby war das erste LLM-Projekt, das ich je gemacht habe. Irgendwie wurde es in der Community zu einem beliebten Namen und ich wurde ins kalte Wasser des Managements geworfen. Da ich das weiß, hier ein paar Gedanken, die ich aus dieser Erfahrung gelernt habe.
Wissen Sie, wen Sie ansprechen möchten: Jeder kann ein Open-Source-Projekt nutzen. Bei Tabby priorisiere ich Funktionen, die der Benutzerfreundlichkeit des Projekts, meinen Freunden und mir selbst zugute kommen. Indem ich diese Philosophie im Auge behalte, kann ich meinen Zeitplan verwalten und weiß, an welchen Funktionen ich arbeiten muss.
Erkennen Sie Ihre Grenzen: Burnout macht keinen Spaß. Tun Sie nicht das, was ich getan habe, und machen Sie sich selbst fertig, nur weil ein Benutzer zum x-ten Mal ein Problem hat. Wenn jemals Gefühle von Frustration, Wut oder Langeweile auftauchen, machen Sie eine Pause. Es tut gut, ab und zu zu entspannen.
Verbiegen Sie sich nicht für alle: Eine Idee mag auf den ersten Blick gut aussehen, aber die Leute verstehen nicht, dass der Entwickler diese Funktion danach beibehalten muss. Wenn es mühsam ist und nicht oft genutzt wird, wird die Funktion nicht beibehalten und wird zu technischen Schulden. Denken Sie daran, dass zufällige Fremde im Internet immer Ideen haben. Es liegt an Ihnen oder Ihrem Team, zu entscheiden, in welche Bereiche Sie Ihre Intelligenz investieren.
Erstellen Sie etwas, das Sie lieben und das Ihnen Spaß macht: Entwickler verlieren oft die Freude an einem Projekt, weil die Wartung mühsam sein und viel Zeit in Anspruch nehmen kann. Dies gilt insbesondere dann, wenn der Entwickler das Projekt nicht mehr aktiv nutzt. Finden Sie heraus, was Ihre Motivation ist. Wenn sich diese ändert, ist das in Ordnung.
Ich werde darauf wahrscheinlich in einem anderen Artikel näher eingehen, da dies ein eigenes Thema sein kann, aber ich habe das Gefühl, dass die Arbeit an Tabby mir mehr Erkenntnisse darüber gegeben hat, wie meine Projekte funktionieren sollen. Darüber hinaus wurde mein Wissen über die Open-Source-Community erweitert.
Ich bin allen Menschen dankbar, die täglich Beiträge leisten und Vorschläge zur Verbesserung von TabbyAPI und ExllamaV2 machen. Jeder hilft dabei, die Programme zu verfeinern und zu verbessern, damit sie für den allgemeinen Gebrauch besser funktionieren. Ich bin ein Mensch und das Aushelfen nimmt mir viel ab.
Auf absehbare Zeit werde ich die Arbeit an Tabby einschränken. Das Projekt läuft immer noch gut und viele verpflichten sich, es zu verbessern, aber meine geistige Gesundheit ist wichtiger und Pausen werden dabei helfen.
Vielen Dank für das Lesen dieser Retrospektive. Wenn Sie mehr über mich und meine Arbeit erfahren möchten, besuchen Sie bitte kingbri.dev.
Brian Dashores persönliche Website
Wichtig
Zusätzlich zur README-Datei lesen Sie bitte auch die Wiki-Seite, um Informationen zu den ersten Schritten zu erhalten!
Notiz
Benötigen Sie Hilfe? Treten Sie dem Discord-Server bei und erhalten Sie die Tabby-Rolle. Bitte seien Sie nett, wenn Sie Fragen stellen.
Eine FastAPI-basierte Anwendung, die die Generierung von Text mithilfe eines LLM (großes Sprachmodell) unter Verwendung des Exllamav2-Backends ermöglicht
Dieses Projekt ist als Rolling Release gekennzeichnet. Es kann später zu Fehlern und Änderungen kommen. Bitte beachten Sie, dass Sie bei Bedarf möglicherweise Abhängigkeiten neu installieren müssen.
TabbyAPI ist ein Hobbyprojekt ausschließlich für eine kleine Anzahl von Benutzern. Es ist nicht für die Ausführung auf Produktionsservern gedacht. Schauen Sie sich dazu bitte andere Backends an, die diese Workloads unterstützen.
Wichtig
Diese README-Datei dient nicht als Einstieg. Bitte lesen Sie das Wiki.
Weitere Informationen finden Sie im Wiki. Es enthält benutzerorientierte Dokumentation für Installation, Konfiguration, Probenahme, API-Nutzung und vieles mehr.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3