Sprachgenerierung in Python mit Phi-2

Einrichtung und Installation

Installieren Sie das Python-Paket der ONNX Runtime generate()-API gemäß der Installationsanleitung.

Phi-2 ONNX-Modell erstellen

Das Paket onnxruntime-genai enthält einen Modell-Builder, der das Phi-2 ONNX-Modell mithilfe der Gewichte und Konfigurationen auf Huggingface generiert. Die Tools ermöglichen es Ihnen auch, die Gewichte von Hugging Face herunterzuladen, lokal gespeicherte Gewichte zu laden oder aus dem GGUF-Format zu konvertieren. Weitere Details finden Sie unter Erstellen von Modellen.

Wenn Sie die hier gezeigte Option -m verwenden, müssen Sie sich bei Hugging Face anmelden.

pip install huggingface-hub
huggingface-cli login

Sie können das Modell in verschiedenen Präzisionen erstellen. Dieser Befehl verwendet int4, da er das kleinste Modell erzeugt und auf einer CPU ausgeführt werden kann.

python -m onnxruntime_genai.models.builder -m microsoft/phi-2 -e cpu -p int4 -o ./example-models/phi2-int4-cpu

Sie können den Namen des Ausgabeordners, der mit der Option -o angegeben wird, durch einen Ordner Ihrer Wahl ersetzen.

Nachdem Sie das Skript ausgeführt haben, sehen Sie eine Reihe von Dateien in diesem Ordner. Dazu gehören die HuggingFace-Konfigurationen zu Ihrer Information sowie die folgenden generierten Dateien, die von der ONNX Runtime generate()-API verwendet werden.

  • model.onnx: das Phi-2 ONNX-Modell
  • model.onnx.data: die Gewichte des Phi-2 ONNX-Modells
  • genai_config.json: die von der ONNX Runtime generate()-API verwendete Konfiguration

Sie können die Werte in der Datei genai_config.json anzeigen und ändern. Der Abschnitt "model" sollte nicht aktualisiert werden, es sei denn, Sie haben ein eigenes Modell mit anderen Parametern verwendet.

Die Suchparameter können geändert werden. Sie möchten beispielsweise mit einem anderen Temperaturwert generieren. Diese Werte können auch über die unten gezeigte Methode set_search_options festgelegt werden.

Modell mit einem Beispiel-Prompt ausführen

Führen Sie das Modell mit dem folgenden Python-Skript aus. Sie können den Prompt und andere Parameter nach Bedarf ändern.

import onnxruntime_genai as og

prompt = '''def print_prime(n):
    """
    Print all primes between 1 and n
    """'''

model=og.Model(f'example-models/phi2-int4-cpu')

tokenizer = og.Tokenizer(model)

tokens = tokenizer.encode(prompt)

params=og.GeneratorParams(model)
params.set_search_options({"max_length":200})
params.input_ids = tokens

output_tokens=model.generate(params)[0]

text = tokenizer.decode(output_tokens)

print(text)

Batches von Prompts ausführen

Sie können auch Batches von Prompts durch das Modell laufen lassen.

prompts = [
    "This is a test.",
    "Rats are awesome pets!",
    "The quick brown fox jumps over the lazy dog.",
    ]

inputs = tokenizer.encode_batch(prompts)

params=og.GeneratorParams(model)
params.input_ids = tokens

outputs = model.generate(params)[0]

text = tokenizer.decode(output_tokens)

Ausgabe des Tokenizers streamen

Wenn Sie eine Anwendung entwickeln, die Token einzeln an die Benutzeroberfläche ausgeben muss, können Sie den Streaming-Tokenizer verwenden.

generator=og.Generator(model, params)
tokenizer_stream=tokenizer.create_stream()

print(prompt, end='', flush=True)

while not generator.is_done():
    generator.compute_logits()
    generator.generate_next_token_top_p(0.7, 0.6)
    print(tokenizer_stream.decode(generator.get_next_tokens()[0]), end='', flush=True)