- Meta hat Code Llama, ein auf Code spezialisiertes Modell auf Basis von Llama 2, veröffentlicht und stellt es für Forschung und kommerzielle Nutzung kostenlos unter derselben Community-Lizenz bereit
- Code Llama akzeptiert sowohl Code als auch Prompts in natürlicher Sprache und unterstützt Codegenerierung, Codevervollständigung und Debugging; abgedeckt werden unter anderem Python, C++, Java, PHP, TypeScript, C# und Bash
- Die Modellgrößen sind in 7B, 13B, 34B und 70B unterteilt; kleinere Modelle sind bei niedriger Latenz im Vorteil, während 34B und 70B auf bessere Coding-Unterstützung abzielen
- Es gibt ein Basismodell, ein Python-spezialisiertes Modell sowie eine auf das Verständnis natürlicher Sprachanweisungen abgestimmte Instruct-Variante; für die tatsächliche Codegenerierung wird die Nutzung von Instruct empfohlen
- Code Llama 34B erreichte in Metas eigener Bewertung 53,7 % bei HumanEval und 56,2 % bei MBPP; der Ansatz soll durch ein öffentliches, auf Code spezialisiertes Modell Community-Bewertungen und die Behebung von Schwachstellen fördern
Veröffentlichungsmodell und 70B-Update
- Meta hat Code Llama veröffentlicht, ein großes Sprachmodell, das aus Text-Prompts Code erzeugen kann
- Code Llama zielt auf Spitzenleistung unter öffentlich verfügbaren LLMs für Code ab und konzentriert sich darauf, Entwickler-Workflows schneller und effizienter zu machen sowie die Einstiegshürde für Coding-Lernende zu senken
- Es wird kostenlos für Forschung und kommerzielle Nutzung bereitgestellt und unter derselben Community-Lizenz wie Llama 2 vertrieben
- Mit dem Update vom 29. Januar 2024 wurde Code Llama 70B, das größte und leistungsfähigste Modell der Code-Llama-Familie, ergänzt
- CodeLlama - 70B: Basismodell für Code
- CodeLlama - 70B - Python: auf Python spezialisiertes 70B-Modell
- Code Llama - 70B - Instruct: ein 70B-Modell, das per Fine-Tuning auf das Verständnis natürlicher Sprachanweisungen abgestimmt wurde
Ein für Codeaufgaben angepasstes Modell auf Basis von Llama 2
- Code Llama ist eine auf Code spezialisierte Version von Llama 2, die zusätzlich mit einem code-spezifischen Datensatz trainiert wurde
- Es kann sowohl Code als auch Prompts in natürlicher Sprache als Eingabe annehmen und für verschiedene Coding-Aufgaben genutzt werden
- Codegenerierung
- Erzeugung natürlicher Sprache über Code
- Codevervollständigung
- Debugging
- Ein Beispiel-Prompt ist eine Anfrage in natürlicher Sprache wie „Schreibe eine Funktion, die die Fibonacci-Folge ausgibt“
- Zu den unterstützten Sprachen gehören Python, C++, Java, PHP, TypeScript (JavaScript), C# und Bash
Modellgrößen, Trainingsdaten und Latenz-Auswahl
- Code Llama ist in Parametergrößen von 7B, 13B, 34B und 70B verfügbar
- Die Modelle außer 70B wurden mit 500B Token aus Code und codebezogenen Daten trainiert, 70B mit 1T Token
- Die Basis- und Instruct-Modelle mit 7B und 13B wurden mit Fill-in-the-Middle (FIM) trainiert, sodass neuer Code in die Mitte bestehenden Codes eingefügt werden kann
- Damit werden Aufgaben wie sofortige Codevervollständigung unterstützt
- Je nach Modellgröße unterscheiden sich Serving-Kosten und Latenzeigenschaften
- Das 7B-Modell kann auf einer einzelnen GPU bereitgestellt werden
- 34B und 70B liefern die besten Ergebnisse und bessere Coding-Unterstützung
- 7B und 13B sind schneller und eignen sich daher besser für Aufgaben, die niedrige Latenz erfordern, etwa Codevervollständigung in Echtzeit
- Code-Llama-Modelle liefern stabile Generierung bei einem Kontext von bis zu 100.000 Token
- Alle Modelle wurden mit Sequenzen von 16.000 Token trainiert
- Bei Eingaben von bis zu 100.000 Token zeigen sie Verbesserungen
- Lange Eingabesequenzen helfen nicht nur bei der Erzeugung langer Programme, sondern auch dabei, dem Modell mehr Kontext aus einer Codebasis zu übergeben und so die Relevanz der generierten Ergebnisse zu erhöhen
- Beim Debugging großer Codebasen kann es schwierig sein, sämtlichen Code zu erfassen, der mit einem bestimmten Problem zusammenhängt; Entwickler können daher dem Modell große zusammenhängende Codeblöcke übergeben
Drei Varianten: Basis, Python und Instruct
- Die Code-Llama-Familie umfasst neben dem Basismodell auch ein Python-spezialisiertes Modell und eine Instruct-Variante
- Code Llama - Python ist ein sprachspezifisches Modell, das zusätzlich mit 100B Token Python-Code feinabgestimmt wurde
- Python ist die am häufigsten gebenchmarkte Sprache bei der Codegenerierung
- Python und PyTorch spielen in der KI-Community eine wichtige Rolle
- Code Llama - Instruct ist eine Variante, die Instruction-Fine-Tuning und Alignment durchlaufen hat
- Das Training wird mit Eingaben in Form natürlicher Sprachanweisungen und erwarteten Ausgaben fortgesetzt
- Sie ist darauf ausgelegt, besser zu verstehen, welches Ergebnis Menschen von einem Prompt erwarten
- Für die tatsächliche Codegenerierung wird die Nutzung von Code Llama - Instruct empfohlen
- Der Grund ist, dass es per Fine-Tuning darauf abgestimmt wurde, hilfreiche und sichere Antworten in natürlicher Sprache zu erzeugen
- Code Llama und Code Llama - Python werden nicht für allgemeine Aufgaben in natürlicher Sprache empfohlen
- Beide Modelle sind nicht darauf ausgelegt, Anweisungen in natürlicher Sprache zu folgen
- Code Llama ist für code-spezifische Aufgaben gedacht und eignet sich nicht als Basismodell für andere Aufgaben
- Nutzer müssen die Lizenz und die Richtlinie zur zulässigen Nutzung einhalten
Benchmarks und Sicherheitsbewertung
- Meta verwendet die Benchmarks HumanEval und MBPP, um die Leistung von Code Llama zu bewerten
- In Metas eigenen Benchmarks zeigte Code Llama eine bessere Leistung als Open-Source-LLMs, die auf Code spezialisiert sind, und als Llama 2
- Code Llama 34B erreichte 53,7 % bei HumanEval und 56,2 % bei MBPP
- Im Vergleich zu anderen öffentlich verfügbaren Lösungen auf dem neuesten Stand war dies die höchste Punktzahl
- Es wurde als auf Augenhöhe mit ChatGPT bewertet
- Vor der Veröffentlichung wurden mehrere Sicherheitsmaßnahmen angewendet, und im Red-Teaming-Prozess wurde das Risiko der Erzeugung von Schadcode quantitativ bewertet
- Es wurden Prompts erstellt, die mit klarer Absicht nach Schadcode fragten
- Die Antworten von Code Llama wurden im Vergleich zu Antworten von ChatGPT (GPT3.5 Turbo) bewertet
- Den Ergebnissen zufolge lieferte Code Llama sicherere Antworten
- Details zum Red Teaming durch Fachleute aus den Bereichen Responsible AI, Offensive Security Engineering, Malware-Entwicklung und Software Engineering finden sich im Forschungspapier
Veröffentlichte Materialien und verantwortungsvolle Nutzung
- Entwickler nutzen LLMs bereits für vielfältige Aufgaben, vom Schreiben neuer Software bis zum Debugging bestehenden Codes
- Code Llama soll Entwickler-Workflows effizienter machen, damit sie sich auf stärker menschenzentrierte Aufgaben statt auf repetitive Arbeiten konzentrieren können
- Meta ist der Ansicht, dass LLMs fürs Coding in Bezug auf Innovation und Sicherheit stark von einem offenen Ansatz profitieren können
- Ein öffentliches, auf Code spezialisiertes Modell ermöglicht es der Community, die Fähigkeiten des Modells zu bewerten, Probleme zu finden und Schwachstellen zu beheben
- Das Trainingsrezept von Code Llama ist im GitHub-Repository veröffentlicht
- Die Modellgewichte sind auf der Llama-Seite verfügbar
- Das Forschungspapier enthält Entwicklungsdetails, Benchmark-Testmethoden, Einschränkungen, bekannte Herausforderungen, Gegenmaßnahmen und Themen für künftige Untersuchungen
- Auch der Responsible Use Guide wurde aktualisiert und bietet Leitlinien für die verantwortungsvolle Entwicklung nachgelagerter Modelle
- Definition von Inhaltsrichtlinien und Gegenmaßnahmen
- Datenaufbereitung
- Fine-Tuning von Modellen
- Leistungsbewertung und -verbesserung
- Umgang mit Risiken auf Eingabe- und Ausgabeebene
- Aufbau von Transparenz und Meldemechanismen in der Nutzerinteraktion
- Entwickler sollten Modelle mit code-spezifischen Evaluierungs-Benchmarks bewerten und Sicherheitsforschung zu Anwendungsfällen wie der Erzeugung von Malware, Computerviren und bösartigem Code durchführen
- Empfohlen werden außerdem die Nutzung von Sicherheitsdatensätzen für automatische und menschliche Evaluationen sowie Red Teaming auf Basis adversarialer Prompts
Nächste Schritte und Ressourcen
- Code Llama ist darauf ausgelegt, Software Engineers in vielen Bereichen zu unterstützen, darunter Forschung, Industrie, Open-Source-Projekte, NGOs und Unternehmen
- Es bleiben weitere Anwendungsfälle, die über das hinausgehen, was das Basismodell und das Instruct-Modell bieten können
- Meta hofft, dass Code Llama andere dazu anregt, Llama 2 zu nutzen, um neue Werkzeuge für Forschung und kommerzielle Produkte zu entwickeln
- Zugehörige Ressourcen
1 Kommentare
Meinungen auf Hacker News
Läuft mit llama.cpp fast sofort, sodass man es lokal leicht ausprobieren kann: https://github.com/ggerganov/llama.cpp/issues/2766
Beim Ausführen von CodeLlama-7b-Python mit q4_0-Quantisierung erzeugte es auf den Python-Prompt „Gib die ersten 10 Primzahlen aus“ plausiblen Code inklusive
print_primes,is_primeundmain.Es wird spannend zu sehen, wie die größeren Modelle abschneiden, insbesondere nach Community-Tuning und mit besserem Kontext/Prompt.
In
primes_upto(limit: int)markiert man zusammengesetzte Zahlen mit einem booleschen Array, und wenn man mititertools.islicenur die ersten 10 ausgibt, erhält man2 3 5 7 11 13 17 19 23 29.print("1, 2, 3, 5, 7, 11... and so on!Llama2 kam zwar auch schon vor über einem Monat heraus, aber ich warte seit Wochen auf Zugriff; und da dieses Modell über dasselbe Formular läuft, erwarte ich nicht viel.
Ich frage mich, ob sie es auf anderem Weg bekommen haben.
Natürlich ist das weitgehend eine Definitionsfrage, und es mag Communities oder Fachgebiete geben, in denen 1 als Primzahl gilt, aber beim Einsatz von Sprachmodellen treten solche Feinheiten zutage.
¹) https://www.google.com/search?q=is+1+a+prime+number
Für mich persönlich ist der Kernpunkt, dass es eine stabile Generierung mit bis zu 100.000 Tokens Kontext bieten soll.
Alle Modelle wurden mit Sequenzen von 16.000 Tokens trainiert und sollen selbst bei Eingaben von bis zu 100.000 Tokens Verbesserungen zeigen.
Beim Lesen des Papers fiel mir allerdings auf, dass die Genauigkeit beim Abrufen zentraler Informationen nach 16k Tokens stark abnimmt; wie nützlich der 100k-Kontext in der Praxis ist, muss sich also noch zeigen.
Im Paper taucht Unnatural Code Llama auf; abgesehen davon, dass es bei MBPP pass@100 knapp hinter Code Llama Python und bei HumanEval pass@1 knapp hinter GPT-4 liegt, übertrifft es in allen Benchmarks andere Modelle/Finetunings deutlich.
Meta sagt nur, dass dieses Modell später nicht veröffentlicht wird, ohne es zu erklären; daher frage ich mich, warum sie ein so beeindruckend wirkendes Modell nicht herausgeben.
Einfach Transformer-Schichten mit einer Breite von 100k zu verwenden, dürfte kostenmäßig unmöglich sein; welchen Trick haben sie also genutzt?
Selbst das 7B-Modell von Code Llama scheint konkurrenzfähig mit Codex zu sein, dem Modell hinter Copilot.
https://ai.meta.com/blog/code-llama-large-language-model-cod...
GitHub hat mit „Copilot X“ mehrfach gesagt, dass es sich in Richtung GPT-4 bewegt[1][2].
[0] https://github.blog/2023-07-28-smarter-more-efficient-coding...
[1] https://github.com/features/preview/copilot-x
[2] https://github.blog/2023-07-20-github-copilot-chat-beta-now-...
Beim Programmieren lasse ich 7B ständig in einem Terminal-Tab offen für Fragen wie „Wie mache ich dieses zufällige Ding?“, und für mich hat es Google/Stack Overflow fast ersetzt.
Code Llama Python ist speziell auf Python abgestimmt und daher sehr interessant.
Ich frage mich, ob man domänenspezifische LLMs bauen könnte – etwa ein Modell, das sich allgemein gut mit Rust auskennt, eines für Linux, eines für Genomik, eines für physikalische Modellierung – und sie miteinander sprechen lässt, damit sie Probleme gemeinsam lösen.
Das klingt nach einer ziemlich verrückten Zukunft, in der Maschinen wirklich arbeiten.
Wahrscheinlich ist es aber eher ein Ansatz mit einigen großen Modellen als mit vielen kleinen.
Vor ein paar Monaten gab es einen ähnlichen Versuch für Godot-Skripte, der angeblich ziemlich gut ist: https://github.com/minosvasilias/godot-dodo
Dass es nicht mehr solcher Versuche gab, liegt meiner Ansicht nach daran, dass das Basis-Llama im Vergleich zu seinen anderen Stärken beim Coden nicht besonders gut war und Dinge wie Starcoder relativ untergingen.
Falls du es noch nicht kennst, solltest du nach Society of Mind suchen.
C ist niedrig genug angesiedelt und bleibt in seltenen Momenten trotzdem noch lesbar.
Das beste Modell, Unnatural Code Llama, wurde nicht veröffentlicht
Wahrscheinlich, weil es vermutlich mit GPT-4-basierten Daten trainiert wurde und damit gegen die Nutzungsbedingungen von OpenAI verstoßen könnte
Laut dem „Unnatural“-Paper[1] werden „unnatural“ Daten mithilfe eines LLM erzeugt, und wenn möglich würde man dafür wohl das beste LLM verwenden wollen
[1] https://arxiv.org/pdf/2212.09689.pdf
TheBloke macht keine halben Sachen[1]
Ich vermute, dass die quantisierten Versionen noch heute erscheinen, und freue mich sehr darauf, ein 34B-Python-Modell mit 4-Bit-Quantisierung auszuprobieren, das offenbar genau in eine 3090 passen dürfte
[1] https://huggingface.co/TheBloke/CodeLlama-13B-Python-fp16
ollama run codellama:7b-instructhttps://ollama.ai/blog/run-code-llama-locally
Weitere Modelle werden gerade hochgeladen: https://ollama.ai/library/codellama
Um Code Llama lokal auszuführen, kann man die quantisierte Version mit 7B Parametern mit dem Open-Source-Tool Ollama herunterladen und starten: https://github.com/jmorganca/ollama
ollama run codellama "write a python function to add two numbers"Completion-Modelle, Python-Modelle und Modelle mit weiteren Parametergrößen sollen ebenfalls bald hinzugefügt werden
Ein Kontextfenster mit 100.000 Tokens ist nicht schlecht, aber ich frage mich, welchen Kontext ein eingebettetes Code-Modell auswählt, wenn es mit Codebases größer als 100K Tokens arbeitet
Ich frage mich auch, ob sich neue Überlegungen ergeben, wenn man beim Programmieren weiß, dass solche Tools weit verbreitet sein und stark genutzt werden
Sollten wir mehr oder weniger Kommentare schreiben, kürzeren und weniger gut lesbaren Code schreiben, um weniger Tokens zu verbrauchen, die Dateistruktur oder Namenskonventionen ändern – kurz: Wie müssen wir uns anpassen, um solche Tools optimal zu nutzen?
Man kann Code zwar kontextunabhängiger machen und auf weniger Tokens reduzieren, aber dadurch wird er sowohl für Menschen als auch für Sprachmodelle verwirrender
Im Extremfall, wenn man nur einbuchstabige Funktionen und Variablen wie
i,j,kverwendet, kann das Modell nichts mehr ableiten und produziert beliebigen UnsinnDie Lösung ist, große Aufgaben so wie bei der üblichen Komplexitätsbewältigung in kleine Blackbox-Module und APIs zu zerlegen, sodass tokenintensive Implementierungen verborgen und für die Nutzung irrelevant werden
Wenn man dem LLM Funktionssignaturen, gute Beschreibungen und ein paar Nutzungsbeispiele gibt, kann es die Funktion verwenden, ohne die Implementierung zu kennen
Knappheit verschlechtert nur die Fähigkeit des LLM, Code zu verarbeiten, löst aber das Problem der Kontextlänge nicht und skaliert selbst im besten Fall nicht
100k Tokens sind ausreichend viel, solche Dinge sind also nicht nötig
Diese Informationen lassen sich in einer für LLMs gut darstellbaren Form komprimieren
Wenn man beispielsweise die Implementierung einer Methode in einer C++-Klasse erzeugen möchte, könnte man dem LLM eine komprimierte Version der Header-Dateien geben, die der Compiler beim Kompilieren dieser Klasse sehen würde
Durch Entfernen von Whitespace und Kommentaren sowie durch Reduzieren von Makros lassen sich viele Tokens sparen
Header der Standardbibliothek könnte man eventuell weglassen, da das LLM sie durch das Fine-Tuning wahrscheinlich gut kennt
Eine typische vorverarbeitete C++-Datei kann selbst mit etwas Optimierung an das 100K-Limit stoßen, daher braucht es unbedingt Middleware, die vor der Übergabe an das LLM zusätzlich bereinigt
Das Modell liefert dann bessere Schlussfolgerungen und Vorschläge
Ähnlich ist es bei Daten: korrekt getaggte Daten und sprechende Feldnamen machen die Antworten eines LLMs viel brauchbarer
Ich hoffe insgeheim, dass die Verbreitung solcher Tools Kolleginnen und Kollegen endlich dazu bringt, Code zu kommentieren und keine dreibuchstabigen Variablennamen mehr zu verwenden
Die Auswahl, welche Dateien an GPT-4 übergeben werden, erfolgte embeddingsbasiert
Aus den Embeddings der einzelnen Dateien und einem aus der Instruktion erzeugten Embedding wurde mit etwas einfacher Nachbearbeitung ausgewählt, welche Dateien wahrscheinlich relevant sind
Das ist nicht perfekt, war aber für mittelgroße Codebases meistens ausreichend und für sehr große Codebases nicht geeignet
Wegen dieser Implementierung begann ich, Dateien kürzer zu machen und Inhalte in andere Dateien zu verschieben
Dateien mit mehr als 1.000 Zeilen fraßen das ganze Kontextfenster auf und waren daher problematisch; bei einem 100k-Kontextfenster wäre das weniger schlimm, aber ich denke, Dateien sollte man ohnehin kurz halten
Es gibt auch intelligentere Ansätze, etwa einzelne Funktionen/Klassen statt ganzer Dateien einzubetten und zu übergeben, also wird sicher bald jemand etwas Besseres bauen
Wahrscheinlich muss man seine Coding-Patterns kaum ändern, nur um KI zu nutzen
Aufgeteilten Code zu einer großen Datei zusammenzuführen, Kommentare zu kürzen und Whitespace zu entfernen, kann ein Präprozessor für LLMs erledigen
Copilot hat bisher gut funktioniert, aber das Interface ist die Grenze
Es wirkt, als wüsste es nur, wie man das nächste Textfragment vorhersagt
Ich frage mich, wer eine Code-KI baut, die Refactorings vorschlägt wie „Diese Zeilen wiederholen sich, sie sollten in eine Funktion ausgelagert werden“ oder „Diese Struktur wäre so umgebaut einfacher zu verwenden“
Auf Cody.dev kann man Embeddings für das gesamte Repository erstellen, sodass es einen viel größeren Kontext zur Codebase und zum Problem hat, das man lösen möchte
Zur Info: Ich bin vor ein paar Wochen zu Sourcegraph gewechselt
Ich denke, wirklich Robustem gibt es noch nichts
Einfach Code markieren und eine Anfrage stellen; die Nutzung von Code Llama wird ebenfalls unterstützt: https://continue.dev/docs/walkthroughs/codellama
IntelliJ IDEA schlägt beides bereits lokal von sich aus vor
Es kann große Blöcke doppelten Codes finden und automatisch in Funktionen refaktorisieren, und es gibt viele Inspektionen, die Refactorings vorschlagen, um Code klarer zu machen
Als ich zuletzt davon gehört habe, war es in der Beta und funktionierte nicht gut
Selbst auf der Beispielseite ist der „add types“-Brush zu strikt, weil
aundbaufnullgeprüft werden, und „fix simple bug“ ist eher ein TippfehlerAus Sicht eines völligen Anfängers, der solche Modelle noch nie selbst betrieben hat, frage ich mich, welche Hardware nötig ist
Im README konnte ich dazu nicht viel finden
Die Vorstellung, solche Modelle nutzen zu können, ohne Quellcode zu einem großen Tech-Unternehmen hochzuladen, gefällt mir wirklich sehr
Man installiert die App und führt nur ein paar Shell-Befehle aus
Vermutlich wird auch dieses Modell bald verfügbar sein, und dann sollte man es wohl zusammen mit der Continue-Erweiterung für VS Code nutzen können
Es ist zwar etwas langsam, aber Swap scheint ein ausreichender Ersatz zu sein, wenn der benötigte große RAM nicht vorhanden ist
Ollama sagt, dass für das Ausführen des 13B-Modells 32 GB nötig sind, aber ich betreibe das Modell
llama2:13bauf einem MBP mit 16 GB7B dürfte sogar auf einem smarten Toaster laufen
Alternativ dürfte llama.cpp-CPU-Inferenz auf den meisten Maschinen funktionieren