Llama lernt das Coden

Einleitung

Code Llama ist eine Familie von hochmodernen, frei zugänglichen Versionen von Llama 2, die sich auf Code-Aufgaben spezialisiert haben. Wir freuen uns, die Integration in das Hugging Face-Ökosystem bekannt zu geben! Code Llama wurde unter der gleichen freizügigen Community-Lizenz wie Llama 2 veröffentlicht und ist auch für die kommerzielle Nutzung verfügbar.

Heute haben wir einige aufregende Neuigkeiten zu teilen:

  • Modelle auf dem Hub: Verfügbar mit ihren Modellkarten und Lizenzen.
  • Integration von Transformatoren: Für eine schnelle und effiziente produktionsbereite Inferenz.
  • Integration mit Textgenerierungsinferenz: Optimiert für schnelle Produktion.
  • Inferenzendpunkte: Bereit für den Einsatz in der Praxis.
  • Code-Benchmarks: Zur Leistungsbewertung der Modelle.

Inhaltsverzeichnis

  1. Einleitung
  2. Was ist Code Llama?
  3. Wie benutzt man Code Llama?
  4. Demo
  5. Transformatoren
  6. Code-Vervollständigung
  7. Code-Füllung
  8. Konversationsanweisungen
  9. 4-Bit-Laden
  10. Verwenden von Textgenerierungsinferenz und Inferenzendpunkten
  11. Auswertung
  12. Zusätzliche Ressourcen

Was ist Code Llama?

Die Code-Llama-Version führt eine Modellfamilie mit 7, 13 und 34 Milliarden Parametern ein. Diese Basismodelle wurden von Llama 2 initialisiert und dann mit 500 Milliarden Token an Codedaten trainiert. Meta hat diese Basismodelle für zwei verschiedene Varianten optimiert: einen Python-Spezialisten (100 Milliarden zusätzliche Token) und eine fein abgestimmte Version mit Anweisungen, die Anweisungen in natürlicher Sprache verstehen kann.

Die Modelle zeigen herausragende Leistungen in mehreren Programmiersprachen wie Python, C++, Java, PHP, C#, TypeScript und Bash. Die Basis- und Instruct-Varianten 7B und 13B unterstützen das Infill auf der Grundlage des umgebenden Inhalts und eignen sich daher ideal für den Einsatz als Code-Assistenten. Code Llama wurde mit einem 16k-Kontextfenster trainiert und verfügt über eine zusätzliche Long-Context-Feinabstimmung, die es ermöglicht, ein Kontextfenster von bis zu 100.000 Token zu verwalten.

Wie benutzt man Code Llama?

Code Llama ist im Hugging Face Ökosystem verfügbar, beginnend mit Version 4.33. Bis Version 4.33 veröffentlicht wird, kannst du es vom main branch installieren:

!pip install git+https://github.com/huggingface/transformers.git@main

Demo

Du kannst das Code Llama Model (13 Milliarden Parameter!) in diesem Space oder im eingebetteten Playground ausprobieren:

from transformers import AutoTokenizer, pipeline
import torch

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
pipeline = transformers.pipeline(
    "text-generation", model="codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16, device_map="auto",
)

sequences = pipeline(
    'def fibonacci(', do_sample=True, temperature=0.2, top_p=0.9,
    num_return_sequences=1, eos_token_id=tokenizer.eos_token_id,
    max_length=100,
)

for seq in sequences:
    print(f"Result: {seq['generated_text']}")

Code-Vervollständigung

Die 7B und 13B Modelle können für Text-/Code-Vervollständigung oder Infilling verwendet werden. Hier ein Beispiel:

from transformers import AutoTokenizer, pipeline
import torch

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
pipeline = transformers.pipeline(
    "text-generation", model="codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16, device_map="auto",
)

sequences = pipeline(
    'def fibonacci(', do_sample=True, temperature=0.2, top_p=0.9,
    num_return_sequences=1, eos_token_id=tokenizer.eos_token_id,
    max_length=100,
)

for seq in sequences:
    print(f"Result: {seq['generated_text']}")

Code-Füllung

Dieses spezialisierte Feature ist besonders für Code-Modelle relevant. Es generiert den Code, der am besten zu einem gegebenen Präfix und Suffix passt. Hier ein Beispiel:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "codellama/CodeLlama-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

prefix = 'def remove_non_ascii(s: str) -> str:\n """ '
suffix = "\n return result\n"
prompt = f" <PRE> {prefix} <SUF>{suffix} <MID>"

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
output = model.generate(inputs["input_ids"], max_new_tokens=200, do_sample=False)
output = output[0].to("cpu")
print(tokenizer.decode(output))

Konversationsanweisungen

Die Basis-Modelle können sowohl für Completion als auch für Infilling genutzt werden. Die Code Llama Veröffentlichung enthält auch ein fein abgestimmtes Instruktionsmodell, das in Konversationsschnittstellen verwendet werden kann. Hier ein Beispiel:

from transformers import AutoTokenizer, pipeline
import torch

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
pipeline = transformers.pipeline(
    "text-generation", model="codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16, device_map="auto",
)

user = 'In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month?'
prompt = f"<s>[INST] {user.strip()} [/INST]"

inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to("cuda")

4-Bit-Laden

Die Integration von Code Llama in Transformers ermöglicht sofortigen Zugriff auf fortgeschrittene Features wie das 4-Bit-Laden. Damit kannst du die großen 32B-Parameter-Modelle auf Consumer-GPUs wie der Nvidia 3090 laufen lassen! Hier ein Beispiel:

from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
import torch

model_id = "codellama/CodeLlama-34b-hf"
quantization_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config, device_map="auto")

prompt = 'def remove_non_ascii(s: str) -> str:\n """ '
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
output = model.generate(inputs["input_ids"], max_new_tokens=200, do_sample=True, top_p=0.9, temperature=0.1)
output = output[0].to("cpu")
print(tokenizer.decode(output))

Verwenden von Textgenerierungsinferenz und Inferenzendpunkten

Text Generation Inference ist ein produktionsreifer Inferenz-Container, entwickelt von Hugging Face, der eine einfache Bereitstellung großer Sprachmodelle ermöglicht. Du kannst mehr darüber lernen, wie du LLMs mit Hugging Face Inference Endpoints bereitstellst, indem du deren Blog besuchst.

Auswertung

Sprachmodelle für Code werden typischerweise auf Datensätzen wie HumanEval bewertet. Dieser Ansatz ermöglicht eine ganzheitliche Bewertung, indem HumanEval in über ein Dutzend Sprachen übersetzt wird.

Hier eine Übersicht der Modelle und deren Bewertungen:

ModellLizenzDatensatzKommerzielle NutzungPretraining Länge [Tokens]PythonJavaScriptDurchschnittliche Bewertung
CodeLlaMa-34BLlama 2 Lizenz2,500B45.1133.5730.79

StarCoderBase-15B | BigCode-OpenRail-M | ✅ | ✅ | 1,000B | 30.35 | 31.72 | 22.4 |
| WizardCoder-15B | BigCode-OpenRail-M | ❌ | ✅ | 1,035B | 58.12 | 41.91 | 32.07 |
| OctoCoder-15B | BigCode-OpenRail-M | ✅ | ✅ | 1,000B | 45.33 | 32.82 | 24.01 |
| CodeGeeX-2-6B | CodeGeeX Lizenz | ❌ | ❌ | 2,000B | 33.49 | 29.92 | 21.23 |
| CodeGen-2.5-7B-Mono | Apache-2.0 | ✅ | ✅ | 14B | | | |

Zusätzliche Ressourcen

Hier sind einige häufig gestellte Fragen (FAQ) zum Thema Code Llama und dessen Anwendung:

FAQ

1. Was ist Code Llama?

Code Llama ist eine spezialisierte Version von Llama 2, die sich auf Code-Aufgaben konzentriert. Es bietet hochmoderne, frei zugängliche Modelle zur Code-Vervollständigung und anderen Coding-Aufgaben und ist im Hugging Face-Ökosystem integriert.

2. Welche Programmiersprachen werden von Code Llama unterstützt?

Code Llama unterstützt mehrere Programmiersprachen, darunter Python, C++, Java, PHP, C#, TypeScript und Bash.

3. Wie kann ich Code Llama nutzen?

Code Llama kann im Hugging Face Ökosystem genutzt werden. Installiere es über die Hauptversion der Transformers-Bibliothek und nutze es in deinen Projekten für Text- und Code-Vervollständigung sowie andere Inferenzaufgaben.

4. Was sind die Hauptvorteile von Code Llama?

Die Hauptvorteile von Code Llama sind die verbesserte Produktivität durch Code-Vervollständigung in IDEs, die Automatisierung sich wiederholender Aufgaben wie das Schreiben von Docstrings oder Unit-Tests, und die Unterstützung für große Kontextfenster bis zu 100.000 Token.

5. Welche Modellvarianten gibt es bei Code Llama?

Es gibt mehrere Varianten von Code Llama, darunter Basismodelle und fein abgestimmte Modelle mit 7, 13 und 34 Milliarden Parametern. Einige Modelle sind speziell für Python optimiert, während andere allgemeiner für verschiedene Programmiersprachen angepasst sind.

6. Wie unterscheidet sich Code Llama von anderen Code-LLMs?

Code Llama zeichnet sich durch seine hochmoderne Performance und seine Integration in das Hugging Face-Ökosystem aus, das eine einfache Nutzung und Implementierung ermöglicht. Zudem bietet es spezialisierte Funktionen wie das Infilling von Code und Unterstützung für lange Kontextfenster.

Teile den Beitrag

Noch Fragen?

Du hast Fragen, benötigst ein Logo, Flyer , Homepage oder möchtest mehr erfahren?
Dann schreib mich gerne an :-)