Papier | ? HuggingFace-Kollektion | Diskussionsseite
Wir stellen die Granite-Serie reiner Decoder-Codemodelle für Codegenerierungsaufgaben vor (z. B. Beheben von Fehlern, Erklären von Code, Dokumentieren von Code), trainiert mit Code, der in 116 Programmiersprachen geschrieben wurde. Eine umfassende Evaluierung der Granite-Code-Modellfamilie bei verschiedenen Aufgaben zeigt, dass unsere Modelle unter den verfügbaren Open-Source-Code-LLMs stets die modernste Leistung erreichen.
Zu den Hauptvorteilen der Granite Code-Modelle gehören:
Die Familie der Granite-Code-Modelle gibt es in zwei Hauptvarianten:
Sowohl Basis- als auch Instruct-Modelle sind in den Größen 3B, 8B, 20B und 34B erhältlich.
Unser Prozess zur Vorbereitung von Code-Pretraining-Daten umfasst mehrere Phasen. Zunächst sammeln wir eine Kombination aus öffentlich verfügbaren Datensätzen (z. B. GitHub Code Clean, Starcoder-Daten), öffentlichen Code-Repositories und Problemen von GitHub. Zweitens filtern wir die gesammelten Codedaten basierend auf der Programmiersprache, in der die Daten geschrieben sind (die wir anhand der Dateierweiterung ermittelt haben). Dann filtern wir auch Daten mit geringer Codequalität heraus. Drittens wenden wir eine aggressive Deduplizierungsstrategie an, die sowohl exakte als auch unscharfe Deduplizierung umfasst, um Dokumente mit (nahezu) identischem Codeinhalt zu entfernen. Schließlich wenden wir einen HAP-Inhaltsfilter an, der die Wahrscheinlichkeit verringert, dass Modelle hasserfüllte, beleidigende oder profane Sprache erzeugen. Wir stellen außerdem sicher, dass personenbezogene Daten (PII) geschwärzt werden, indem wir PII-Inhalte (z. B. Namen, E-Mail-Adressen, Schlüssel, Passwörter) durch entsprechende Token (z. B. ⟨NAME⟩, ⟨E-MAIL⟩, ⟨SCHLÜSSEL⟩, ⟨PASSWORT⟩) ersetzen. . Wir scannen außerdem alle Datensätze mit ClamAV, um Malware-Instanzen im Quellcode zu identifizieren und zu entfernen. Zusätzlich zum Sammeln von Codedaten für das Modelltraining kuratieren wir mehrere öffentlich verfügbare hochwertige Datensätze in natürlicher Sprache, um die Fähigkeiten des Modells im Sprachverständnis und im mathematischen Denken zu verbessern.
Die Granite Code Base- Modelle werden auf 3-4T-Tokens von Codedaten und Datensätzen in natürlicher Sprache im Zusammenhang mit Code trainiert. Die Daten werden über Byte-Pair-Encoding (BPE) tokenisiert, wobei derselbe Tokenizer wie StarCoder verwendet wird. Wir nutzen hochwertige Daten mit zwei Trainingsphasen wie folgt:
Granite Code Instruct-Modelle sind auf die folgenden Arten von Befehlsdaten abgestimmt: 1) Code-Commits aus CommitPackFT, 2) hochwertige mathematische Datensätze, insbesondere haben wir MathInstruct und MetaMathQA verwendet, 3) Code-Befehlsdatensätze wie Glaive-Code-Assistant- v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 und eine kleine Sammlung synthetischer API-Aufrufdatensätze sowie 4) hochwertige Sprachanweisungsdatensätze wie HelpSteer und eine offene, lizenzgefilterte Version von Platypus .
Wir führen eine umfassende Bewertung unserer Codemodelle anhand einer umfassenden Liste von Benchmarks durch, zu denen unter anderem HumanEvalPack, MBPP und MBPP+ gehören. Dieser Benchmark-Satz umfasst verschiedene Codierungsaufgaben in häufig verwendeten Programmiersprachen (z. B. Python, JavaScript, Java, Go, C++, Rust).
Unsere Ergebnisse zeigen, dass Granite-Code-Modelle starke Open-Source-Modelle in allen Modellgrößen übertreffen. Die folgende Abbildung zeigt, wie Granite-8B-Code-Base
Mistral-7B
, LLama-3-8B
und andere Open-Source-Modelle bei drei Codierungsaufgaben übertrifft. Weitere Auswertungsergebnisse stellen wir in unserem Beitrag zur Verfügung.
Um eines unserer Modelle zu verwenden, wählen Sie einen geeigneten model_path
aus:
ibm-granite/granite-3b-code-base-2k
ibm-granite/granite-3b-code-instruct-2k
ibm-granite/granite-8b-code-base-4k
ibm-granite/granite-8b-code-instruct-4k
ibm-granite/granite-20b-code-base-8k
ibm-granite/granite-20b-code-instruct-8k
ibm-granite/granite-34b-code-base-8k
ibm-granite/granite-34b-code-instruct-8k
from transformers import AutoModelForCausalLM , AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm-granite/granite-3b-code-base-2k" # pick anyone from above list
tokenizer = AutoTokenizer . from_pretrained ( model_path )
# drop device_map if running on CPU
model = AutoModelForCausalLM . from_pretrained ( model_path , device_map = device )
model . eval ()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer ( input_text , return_tensors = "pt" )
# transfer tokenized inputs to the device
for i in input_tokens :
input_tokens [ i ] = input_tokens [ i ]. to ( device )
# generate output tokens
output = model . generate ( ** input_tokens )
# decode output tokens into text
output = tokenizer . batch_decode ( output )
# loop over the batch to print, in this example the batch size is 1
for i in output :
print ( i )
Wir verwenden Dolomite Engine zur Feinabstimmung (oder Anleitungsabstimmung) aller unserer Modelle. Wir stellen Beispielskripts für die Feinabstimmung ibm-granite/granite-3b-code-base
bereit. Um die Modelle zu verfeinern, befolgen Sie einfach diese Schritte:
git clone https://github.com/IBM/dolomite-engine/
cd dolomite-engine
# you might need to modify configs/granite-example/training.yml
sh scripts/finetune.sh configs/granite-example/training.yml
# once the model is trained, convert to HuggingFace-compatible safetensors
sh scripts/export.sh configs/granite-example/export.yml
Tipp
Wenn Sie padding-freie Transformer verwenden möchten, um beim Training Speicherbedarf und FLOPs zu sparen, befolgen Sie die Anweisungen in der Dolomite Engine README für weitere Details.
Bitte lesen Sie unsere Richtlinien und unseren Verhaltenskodex, um zu unserem Projekt beizutragen.
Die Modellkarten für jede Modellvariante sind im jeweiligen HuggingFace-Repository verfügbar. Bitte besuchen Sie unsere Sammlung hier.
Das Modell Ihrer Wahl (in diesem Beispiel „granite-3b-code-base“) kann wie folgt geklont werden:
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
Alle Granite-Codemodelle werden unter der Apache 2.0-Lizenz vertrieben.
Bitte teilen Sie uns Ihre Kommentare zu unserer Familie von Codemodellen mit, indem Sie unsere Sammlung besuchen. Wählen Sie das Repository des Modells aus, zu dem Sie Feedback geben möchten. Gehen Sie dann zur Registerkarte „Community“ und klicken Sie auf „Neue Diskussion“ . Alternativ können Sie Fragen/Kommentare auch auf unserer Github-Diskussionsseite posten.