Passen Sie Ihren Arbeitsablauf mithilfe der fmeval Bibliothek an - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Passen Sie Ihren Arbeitsablauf mithilfe der fmeval Bibliothek an

Sie können Ihre Modellevaluierung so anpassen, dass sie ein Modell berücksichtigt, das kein Amazon Bedrock-Modell ist, oder einen benutzerdefinierten Workflow für die Bewertung verwenden. JumpStart Wenn Sie Ihr eigenes Modell verwenden, müssen Sie ein benutzerdefiniertes ModelRunner Modell erstellen. Wenn Sie Ihren eigenen Datensatz für die Auswertung verwenden, müssen Sie ein DataConfig Objekt konfigurieren. Im folgenden Abschnitt wird gezeigt, wie Sie Ihren Eingabedatensatz formatieren, ein DataConfig Objekt so anpassen, dass er Ihren benutzerdefinierten Datensatz verwendet, und einen benutzerdefinierten Datensatz erstellenModelRunner.

Wenn Sie Ihren eigenen Datensatz verwenden möchten, um Ihr Modell auszuwerten, müssen Sie ein DataConfig Objekt verwenden, um das dataset_name und das dataset_uri des Datensatzes anzugeben, den Sie auswerten möchten. Wenn Sie einen integrierten Datensatz verwenden, ist das DataConfig Objekt bereits als Standard für Bewertungsalgorithmen konfiguriert.

Sie können jedes Mal, wenn Sie die evaluate Funktion verwenden, einen benutzerdefinierten Datensatz verwenden. Sie können evaluate beliebig oft aufrufen, um eine beliebige Anzahl von Datensätzen zu verwenden.

Konfigurieren Sie einen benutzerdefinierten Datensatz mit Ihrer Modellanforderung, die in der Fragenspalte angegeben ist, und der Zielantwort, die in der Spaltenantwort angegeben ist, wie folgt:

from fmeval.data_loaders.data_config import DataConfig from fmeval.constants import MIME_TYPE_JSONLINES config = DataConfig( dataset_name="tiny_dataset", dataset_uri="tiny_dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="question", target_output_location="answer", )

Die DataConfig Klasse enthält die folgenden Parameter:

  • dataset_name— Der Name des Datensatzes, den Sie zur Auswertung Ihres verwenden möchtenLLM.

    dataset_uri— Der lokale Pfad oder die einheitliche Ressourcenkennung (URI) zum S3-Speicherort Ihres Datensatzes.

  • dataset_mime_type— Das Format der Eingabedaten, die Sie zur Auswertung Ihrer Daten verwenden möchtenLLM. Die FMEval Bibliothek kann sowohl als MIME_TYPE_JSON auch unterstützenMIME_TYPE_JSONLINES.

  • model_input_location— (Optional) Der Name der Spalte in Ihrem Datensatz, die die Modelleingaben oder Eingabeaufforderungen enthält, die Sie auswerten möchten.

    Verwenden Sie einemodel_input_location, die den Namen Ihrer Spalte angibt. Die Spalte muss die folgenden Werte enthalten, die den folgenden zugehörigen Aufgaben entsprechen:

    • Geben Sie für Generierungs-, Toxizitäts - und Genauigkeitsbeurteilungen mit offenem Ende die Spalte an, die die Aufforderung enthält, auf die Ihr Modell reagieren soll.

    • Geben Sie für eine Aufgabe zur Beantwortung von Fragen die Spalte an, die die Frage enthält, auf die Ihr Modell eine Antwort generieren soll.

    • Geben Sie für eine Aufgabe zur Textzusammenfassung den Namen der Spalte an, die den Text enthält, den Ihr Modell zusammenfassen soll.

    • Geben Sie für eine Klassifizierungsaufgabe den Namen der Spalte an, die den Text enthält, den Ihr Modell klassifizieren soll.

    • Geben Sie für Bewertungen von Faktenwissen den Namen der Spalte an, die die Frage enthält, auf die das Modell die Antwort vorhersagen soll.

    • Geben Sie für Bewertungen der semantischen Robustheit den Namen der Spalte an, die die Eingabe enthält, die Ihr Modell stören soll.

    • Verwenden Sie für schnelle Stereotypauswertungen das sent_more_input_location und sent_less_input_location anstelle vonmodel_input_location, wie in den folgenden Parametern gezeigt.

  • model_output_location— (Optional) Der Name der Spalte in Ihrem Datensatz, die die prognostizierte Ausgabe enthält, die Sie mit der Referenzausgabe vergleichen möchten, die in enthalten ist. target_output_location Wenn Sie angebenmodel_output_location, FMEval wird keine Anfrage zur Inferenz an Ihr Modell gesendet. Stattdessen verwendet es die in der angegebenen Spalte enthaltene Ausgabe, um Ihr Modell auszuwerten.

  • target_output_location— Der Name der Spalte im Referenzdatensatz, die den wahren Wert enthält, der mit dem vorhergesagten Wert verglichen werden soll, der in enthalten istmodel_output_location. Nur für Faktenwissen, Genauigkeit und semantische Robustheit erforderlich. Für Faktenwissen sollte jede Zeile in dieser Spalte alle möglichen Antworten enthalten, die durch ein Trennzeichen getrennt sind. <OR>Lauten die Antworten auf eine Frage beispielsweise [„UK“, „England“], dann sollte die Spalte „UK England“ enthalten. Die Modellvorhersage ist korrekt, wenn sie eine der Antworten enthält, die durch das Trennzeichen getrennt sind.

  • category_location— Der Name der Spalte, die den Namen einer Kategorie enthält. Wenn Sie einen Wert für angebencategory_location, werden die Ergebnisse aggregiert und für jede Kategorie gemeldet.

  • sent_more_input_location— Der Name der Spalte, die eine eher voreingenommene Eingabeaufforderung enthält. Nur für die Stereotypisierung von Aufforderungen erforderlich. Vermeiden Sie unbewusste Vorurteile. Beispiele für Verzerrungen finden Sie im Datensatz Crows-pairs.

  • sent_less_input_location— Der Name der Spalte, die eine weniger systematische Eingabeaufforderung enthält. Nur für die Stereotypisierung von Eingabeaufforderungen erforderlich. Vermeiden Sie unbewusste Vorurteile. Beispiele für Verzerrungen finden Sie im Datensatz Crows-pairs.

  • sent_more_output_location— (Optional) Der Name der Spalte, die die prognostizierte Wahrscheinlichkeit enthält, dass die von Ihrem Modell generierte Antwortvariable mehr systematische Abweichungen enthält. Dieser Parameter wird nur bei Aufgaben zur Stereotypisierung von Eingabeaufforderungen verwendet.

  • sent_less_output_location— (Optional) Der Name der Spalte, die die vorhergesagte Wahrscheinlichkeit enthält, dass die von Ihrem Modell generierte Antwortvariable weniger systematische Abweichungen enthält. Dieser Parameter wird nur bei Aufgaben zur Stereotypisierung von Aufforderungen verwendet.

Wenn Sie der DataConfig Klasse ein neues Attribut hinzufügen möchten, das einer Datensatzspalte entspricht, müssen Sie das suffix _location am Ende des Attributnamens hinzufügen.

Um ein benutzerdefiniertes Modell auszuwerten, verwenden Sie eine Basisdatenklasse, um Ihr Modell zu konfigurieren und ein benutzerdefiniertes Modell zu erstellenModelRunner. Anschließend können Sie ModelRunner damit jedes beliebige Sprachmodell evaluieren. Verwenden Sie die folgenden Schritte, um eine Modellkonfiguration zu definieren, eine benutzerdefinierte ModelRunner zu erstellen und sie zu testen.

Die ModelRunner Schnittstelle hat eine abstrakte Methode wie folgt:

def predict(self, prompt: str) → Tuple[Optional[str], Optional[float]]

Diese Methode akzeptiert eine Eingabeaufforderung als Zeichenketteneingabe und gibt ein Tuple zurück, das eine Modelltextantwort und eine Eingabe-Log-Wahrscheinlichkeit enthält. Jeder ModelRunner muss eine predict Methode implementieren.

Erstellen Sie ein benutzerdefiniertes ModelRunner
  1. Definieren Sie eine Modellkonfiguration.

    Das folgende Codebeispiel zeigt, wie Sie einen dataclass Decorator auf eine benutzerdefinierte HFModelConfig Klasse anwenden, sodass Sie eine Modellkonfiguration für eine definieren können Hugging FaceModell:

    from dataclasses import dataclass @dataclass class HFModelConfig: model_name: str max_new_tokens: int seed: int = 0 remove_prompt_from_generated_text: bool = True

    Im vorherigen Codebeispiel gilt Folgendes:

    • Der Parameter max_new_tokens wird verwendet, um die Länge der Antwort zu begrenzen, indem die Anzahl der von einem zurückgegebenen Token begrenzt wirdLLM. Der Modelltyp wird festgelegt, indem ein Wert für die model_name Instanziierung der Klasse übergeben wird. In diesem Beispiel ist der Modellname auf gesetztgpt2, wie am Ende dieses Abschnitts gezeigt. Der Parameter max_new_tokens ist eine Option zur Konfiguration von Textgenerierungsstrategien mithilfe einer gpt2 Modellkonfiguration für ein vortrainiertes GPT OpenAI-Modell. Weitere AutoConfigModelltypen finden Sie unter.

    • Wenn der Parameter auf gesetzt remove_prompt_from_generated_text istTrue, enthält die generierte Antwort nicht die ursprüngliche Aufforderung, die in der Anfrage gesendet wurde.

    Weitere Parameter für die Textgenerierung finden Sie im Hugging Face Dokumentation für GenerationConfig.

  2. Erstellen Sie eine benutzerdefinierte Methode ModelRunner und implementieren Sie eine Vorhersagemethode. Das folgende Codebeispiel zeigt, wie Sie einen benutzerdefinierten Code ModelRunner für eine erstellen Hugging Face Modell unter Verwendung der im vorherigen Codebeispiel erstellten HFModelConfig Klasse.

    from typing import Tuple, Optional import torch from transformers import AutoModelForCausalLM, AutoTokenizer from fmeval.model_runners.model_runner import ModelRunner class HuggingFaceCausalLLMModelRunner(ModelRunner): def __init__(self, model_config: HFModelConfig): self.config = model_config self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name) self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name) def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]: input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) generations = self.model.generate( **input_ids, max_new_tokens=self.config.max_new_tokens, pad_token_id=self.tokenizer.eos_token_id, ) generation_contains_input = ( input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]] ).all() if self.config.remove_prompt_from_generated_text and not generation_contains_input: warnings.warn( "Your model does not return the prompt as part of its generations. " "`remove_prompt_from_generated_text` does nothing." ) if self.config.remove_prompt_from_generated_text and generation_contains_input: output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0] else: output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0] with torch.inference_mode(): input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"] model_output = self.model(input_ids, labels=input_ids) probability = -model_output[0].item() return output, probability

    Der vorherige Code verwendet eine benutzerdefinierte HuggingFaceCausalLLMModelRunner Klasse, die Eigenschaften von der FMEval ModelRunner Klasse erbt. Die benutzerdefinierte Klasse enthält einen Konstruktor und eine Definition für eine Vorhersagefunktion, die a zurückgibt. Tuple

    Weitere ModelRunner Beispiele finden Sie im Abschnitt model_runner der Bibliothek. fmeval

    Der HuggingFaceCausalLLMModelRunner Konstruktor enthält die folgenden Definitionen:

    • Die Konfiguration ist auf eingestelltHFModelConfig, wie am Anfang dieses Abschnitts definiert.

    • Das Modell ist auf ein vortrainiertes Modell aus dem eingestellt Hugging Face Auto-Klasse, die bei der Instanziierung mit dem Parameter model_name angegeben wird.

    • Der Tokenizer ist auf eine Klasse aus dem gesetzt Hugging Face Tokenizer-Bibliothek, die dem vortrainierten Modell entspricht, das von spezifiziert ist. model_name

    Die predict Methode in der HuggingFaceCausalLLMModelRunner Klasse verwendet die folgenden Definitionen:

    • input_ids— Eine Variable, die Eingaben für Ihr Modell enthält. Das Modell generiert die Eingabe wie folgt.

      • A tokenizer Konvertiert die in enthaltene Anfrage prompt in Token-Identifikatoren (IDs). Diese TokenIDs, bei denen es sich um numerische Werte handelt, die ein bestimmtes Token (Wort, Unterwort oder Zeichen) darstellen, können direkt von Ihrem Modell als Eingabe verwendet werden. Das Token IDs wird zurückgegeben als PyTorch Tensor-Objekte, wie von return_tensors="pt" spezifiziert. Andere Arten von Rückgabe-Tensortypen finden Sie in Hugging Face Dokumentation für apply_chat_template.

      • Token IDs werden an ein Gerät gesendet, auf dem sich das Modell befindet, damit sie vom Modell verwendet werden können.

    • generations— Eine Variable, die die von Ihnen generierte Antwort enthältLLM. Die Generate-Funktion des Modells verwendet die folgenden Eingaben, um die Antwort zu generieren:

      • Die input_ids aus dem vorherigen Schritt.

      • Der in max_new_tokens angegebene ParameterHFModelConfig.

      • A pad_token_id fügt der Antwort ein Satzende-Token (EOS) hinzu. Weitere Tokens, die Sie verwenden können, finden Sie im Hugging Face Dokumentation für PreTrainedTokenizer.

    • generation_contains_input— Eine boolesche Variable, die zurückkehrt, True wenn die generierte Antwort die Eingabeaufforderung in ihrer Antwort enthält, und False andernfalls. Der Rückgabewert wird anhand eines elementweisen Vergleichs der folgenden Werte berechnet.

      • Alle Token IDs in der Eingabeaufforderung, die in enthalten sind. input_ids["input_ids"][0]

      • Der Anfang des generierten Inhalts, der in enthalten istgenerations[0][: input_ids["input_ids"].shape[1]].

      Die predict Methode gibt eine Warnung zurück, wenn Sie remove_prompt_from_generated_text in Ihrer Konfiguration LLM an angegeben haben, die generierte Antwort jedoch keine Eingabeaufforderung enthält.

      Die Ausgabe der predict Methode enthält eine von der Methode zurückgegebene Zeichenfolge, die das batch_decode in der Antwort IDs zurückgegebene Token in für Menschen lesbaren Text umwandelt. Wenn Sie remove_prompt_from_generated_text als angegeben habenTrue, wird die Eingabeaufforderung aus dem generierten Text entfernt. Wenn Sie remove_prompt_from_generated_text als angegeben habenFalse, wird der generierte Text ohne spezielle Tokens zurückgegeben, die Sie in das Wörterbuch aufgenommen habenspecial_token_dict, wie von angegebenskip_special_tokens=True.

  3. Testen Sie IhreModelRunner. Senden Sie eine Musteranfrage an Ihr Modell.

    Das folgende Beispiel zeigt, wie Sie ein Modell mit dem gpt2 vortrainierten Modell aus dem testen Hugging Face AutoConfigKlasse:

    hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)

    model_nameGibt im vorherigen Codebeispiel den Namen des vortrainierten Modells an. Die HFModelConfig Klasse wird als hf_config mit einem Wert für den Parameter instanziiert und zur Initialisierung verwendetmax_new_tokens. ModelRunner

    Wenn Sie ein anderes vortrainiertes Modell von verwenden möchten Hugging Face, wählen Sie einen pretrained_model_name_or_path Wert from_pretrained unter AutoClass.

    Testen Sie zuletzt IhreModelRunner. Senden Sie eine Musteranfrage an Ihr Modell, wie im folgenden Codebeispiel gezeigt:

    model_output = model.predict("London is the capital of?")[0] print(model_output) eval_algo.evaluate_sample()