Evaluieren Sie ein JumpStart Modell auf schnelle Stereotypisierung - 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.

Evaluieren Sie ein JumpStart Modell auf schnelle Stereotypisierung

Sie können einen ModelRunner Wrapper auf hoher Ebene verwenden, um ein SageMaker JumpStart Amazon-Modell auf schnelle Stereotypisierung hin zu evaluieren. Der Algorithmus für die Eingabeaufforderung zur Stereotypisierung misst die Wahrscheinlichkeit, dass Ihr Modell in seiner Antwort Verzerrungen kodiert. Zu diesen Vorurteilen gehören Vorurteile in Bezug auf Rasse, Geschlecht, sexuelle Orientierung, Religion, Alter, Nationalität, Behinderung, körperliches Erscheinungsbild und sozioökonomischen Status.

In diesem Tutorial wird gezeigt, wie Sie das Falcon 7-B-Modell vom Technology Innovation Institute (verfügbar unter) laden und dieses Modell bitten, Antworten auf JumpStart Eingabeaufforderungen zu generieren. Anschließend zeigt dieses Tutorial, wie die Antworten auf die Stereotypisierung von Eingabeaufforderungen anhand des integrierten Open-Source-Challenge-Datensatzes von CROWS-Pairs bewertet werden.

In den Abschnitten dieses Tutorials wird gezeigt, wie Sie Folgendes tun können:

  • Einrichten Ihrer -Umgebung

  • Führen Sie Ihre Modellevaluierung durch.

  • Sehen Sie sich Ihre Analyseergebnisse an.

So richten Sie Ihre Umgebung ein

Voraussetzungen
Installieren Sie die erforderlichen Bibliotheken
  1. Installieren Sie die SageMakerfmeval,, und andere erforderliche Bibliotheken in Ihrem Code wie folgt:

    !pip3 install sagemaker !pip3 install -U pyarrow !pip3 install -U accelerate !pip3 install "ipywidgets>=8" !pip3 install jsonlines !pip install fmeval !pip3 install boto3==1.28.65 import sagemaker
  2. Laden Sie den JSON Lines Beispieldatensatz crows-pairs_sample.jsonl in Ihr aktuelles Arbeitsverzeichnis herunter.

  3. Überprüfen Sie mithilfe des folgenden Codes, ob Ihre Umgebung die Beispiel-Eingabedatei enthält:

    import glob # Check for fmeval wheel and built-in dataset if not glob.glob("crows-pairs_sample.jsonl"): print("ERROR - please make sure file exists: crows-pairs_sample.jsonl")
  4. Definieren Sie ein JumpStart Modell wie folgt:

    from sagemaker.jumpstart.model import JumpStartModel model_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*", )
  5. Stellen Sie das JumpStart Modell bereit und erstellen Sie einen Endpunkt wie folgt:

    my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name
  6. Definieren Sie eine Eingabeaufforderung und das Format der Modellanforderung oder Payload wie folgt:

    prompt = "London is the capital of" payload = { "inputs": prompt, "parameters": { "do_sample": True, "top_p": 0.9, "temperature": 0.8, "max_new_tokens": 1024, "decoder_input_details" : True, "details" : True }, }

    Im vorherigen Codebeispiel sind die folgenden Parameter in der Modellanforderung enthalten:

    • do_sample— Weist das Modell an, während der Modellinferenz Stichproben aus den Rohdaten des Modells (vor der Normalisierung) zu ziehen, um den Modellantworten Vielfalt und Kreativität zu verleihen. Standardeinstellung: False. Wenn Sie do_sample auf einstellenTrue, müssen Sie einen Wert für einen der folgenden Parameter angeben:temperature,top_k, top_p oder. typical_p

    • top_p— Steuert die Zufälligkeit, indem der Satz von Tokens begrenzt wird, der bei der Generierung des nächsten Tokens berücksichtigt werden soll. Höhere Werte von top_p ermöglichen einen Satz, der ein breiteres Vokabular enthält. Niedrigere Werte beschränken den Tokensatz auf Wörter mit höherer Wahrscheinlichkeit. Die Bereiche für top_p sind größer als 0 und kleiner als1.

    • temperature— Steuert die Zufälligkeit des generierten Textes. Höhere Werte von temperature weisen das Modell an, mehr zufällige und vielfältigere Antworten zu generieren. Niedrigere Werte führen zu besser vorhersehbaren Antworten. Die Werte für temperature müssen positiv sein.

    • max_new_tokens— Beschränkt die Länge der Antwort, indem die Anzahl der von Ihrem Modell zurückgegebenen Token begrenzt wird. Standardeinstellung: 20.

    • decoder_input_details— Gibt Informationen über die Log-Wahrscheinlichkeiten zurück, die das Modell jedem potenziellen nächsten Token und dem entsprechenden Token IDs zugewiesen hat. Wenn auf gesetzt decoder_input_details istTrue, müssen Sie auch details auf setzen, True um die angeforderten Details zu erhalten. Standardeinstellung: False.

    Weitere Informationen zu den Parametern für dieses Hugging Face Modell finden Sie unter types.py.

Senden Sie eine Beispiel-Inferenzanfrage

Um Ihr Modell zu testen, senden Sie eine Musteranfrage an Ihr Modell und drucken Sie die Modellantwort wie folgt aus:

response = predictor.predict(payload) print(response[0]["generated_text"])

Wenn Ihr Modell im vorherigen Codebeispiel die Antwort geliefert hat[{"response": "this is the output"}], wird die print Anweisung zurückgegebenthis is the output.

Richten Sie ein FMEval

  1. Laden Sie die erforderlichen Bibliotheken für die Ausführung FMEval wie folgt:

    import fmeval from fmeval.data_loaders.data_config import DataConfig from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunner from fmeval.constants import MIME_TYPE_JSONLINES from fmeval.eval_algorithms.prompt_stereotyping import PromptStereotyping, PROMPT_STEREOTYPING from fmeval.eval_algorithms import EvalAlgorithm
  2. Richten Sie die Datenkonfiguration für Ihren Eingabedatensatz ein.

    Wenn Sie kein integriertes Dataset verwenden, muss Ihre Datenkonfiguration die Spalte identifizieren, in der die meisten Verzerrungen enthalten sindsent_more_input_location. Sie müssen auch die Spalte identifizieren, die weniger systematische Verzerrung enthältsent_less_input_location. Wenn Sie ein integriertes Dataset von verwenden JumpStart, werden diese Parameter FMEval automatisch über die Modellmetadaten übergeben.

    Geben Sie die sent_less_input_location Spalten sent_more_input_location und für eine Aufgabe zur Stereotypisierung von Eingabeaufforderungen, den Namen, die Uniform Resource Identifier (URI) und MIME den Typ an.

    config = DataConfig( dataset_name="crows-pairs_sample", dataset_uri="crows-pairs_sample.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, sent_more_input_location="sent_more", sent_less_input_location="sent_less", category_location="bias_type", )

    Weitere Informationen zu Spalteninformationen, die für andere Aufgaben erforderlich sind, finden Sie im Abschnitt Verwenden eines benutzerdefinierten Eingabe-Datasets unter. Verwenden Sie einen benutzerdefinierten Eingabedatensatz

  3. Richten Sie einen benutzerdefinierten Code ein, ModelRunner wie im folgenden Codebeispiel gezeigt:

    js_model_runner = JumpStartModelRunner( endpoint_name=endpoint_name, model_id=model_id, model_version=model_version, output='[0].generated_text', log_probability='[0].details.prefill[*].logprob', content_template='{"inputs": $prompt, "parameters": {"do_sample": true, "top_p": 0.9, "temperature": 0.8, "max_new_tokens": 1024, "decoder_input_details": true,"details": true}}', )

    Das vorherige Codebeispiel spezifiziert Folgendes:

    • endpoint_name— Der Name des Endpunkts, den Sie im vorherigen Schritt Erforderliche Bibliotheken installieren erstellt haben.

    • model_id— Die ID, die zur Angabe Ihres Modells verwendet wurde. Dieser Parameter wurde bei der Definition des JumpStart Modells angegeben.

    • model_version— Die Version Ihres Modells, mit der Ihr Modell spezifiziert wurde. Dieser Parameter wurde bei der Definition des JumpStart Modells angegeben.

    • output— Erfasst die Ausgabe des Falcon 7b-Modells, das seine Antwort in einem generated_text Schlüssel zurückgibt. Wenn Ihr Modell die Antwort geliefert hat[{"generated_text": "this is the output"}], kehrt [0].generated_text es zurück. this is the output

    • log_probability— Erfasst die von diesem JumpStart Modell zurückgegebene logarithmische Wahrscheinlichkeit.

    • content_template— Gibt an, wie Ihr Modell mit Anfragen interagiert. Die Beispielkonfigurationsvorlage dient lediglich der Erläuterung des vorherigen Beispiels und ist nicht erforderlich. Die Parameter in der Inhaltsvorlage sind dieselben, für die deklariert wurdenpayload. Weitere Informationen zu Parametern für dieses Hugging Face Modell finden Sie unter types.py.

  4. Konfigurieren Sie Ihren Bewertungsbericht und speichern Sie ihn in einem Verzeichnis, wie im folgenden Beispielcode gezeigt:

    import os eval_dir = "results-eval-prompt-stereotyping" curr_dir = os.getcwd() eval_results_path = os.path.join(curr_dir, eval_dir) + "/" os.environ["EVAL_RESULTS_PATH"] = eval_results_path if os.path.exists(eval_results_path): print(f"Directory '{eval_results_path}' exists.") else: os.mkdir(eval_results_path)
  5. Richten Sie einen Parallelisierungsfaktor wie folgt ein:

    os.environ["PARALLELIZATION_FACTOR"] = "1"

    A PARALLELIZATION_FACTOR ist ein Multiplikator für die Anzahl der gleichzeitigen Batches, die an Ihre Compute-Instance gesendet werden. Wenn Ihre Hardware Parallelisierung zulässt, können Sie diese Zahl so einstellen, dass die Anzahl der Aufrufe für Ihren Evaluierungsjob multipliziert wird. Wenn Sie beispielsweise 100 Aufrufe haben und diese Option auf eingestellt PARALLELIZATION_FACTOR ist, führt Ihr Job Aufrufe aus. 2 200 Sie können die Variable PARALLELIZATION_FACTOR auf einen Wert erhöhen oder sie 10 ganz entfernen. Einen Blog zur Verwendung von AWS Lambda finden Sie PARALLELIZATION_FACTOR unter Neue AWS Lambda-Skalierungssteuerungen für Kinesis- und DynamoDB-Ereignisquellen.

Führen Sie Ihre Modellevaluierung durch

  1. Definieren Sie Ihren Bewertungsalgorithmus. Das folgende Beispiel zeigt, wie Sie einen PromptStereotyping Algorithmus definieren:

    eval_algo = PromptStereotyping()

    Beispiele für Algorithmen, die Metriken für andere Bewertungsaufgaben berechnen, finden Sie unter Evaluieren Sie Ihr Modell inVerwenden Sie die fmeval Bibliothek, um eine automatische Bewertung durchzuführen.

  2. Führen Sie Ihren Bewertungsalgorithmus aus. Das folgende Codebeispiel verwendet das Modell und die Datenkonfiguration, die zuvor definiert wurden, und eineprompt_template, mit der Ihre Eingabeaufforderung wie folgt an das Modell übergeben wird: feature

    eval_output = eval_algo.evaluate(model=js_model_runner, dataset_config=config, prompt_template="$feature", save=True)

    Ihre Modellausgabe kann sich von der vorherigen Beispielausgabe unterscheiden.

Sehen Sie sich Ihre Analyseergebnisse an

  1. Analysieren Sie einen Bewertungsbericht anhand des vom Bewertungsalgorithmus zurückgegebenen eval_output Objekts wie folgt:

    import json print(json.dumps(eval_output, default=vars, indent=4))

    Der vorherige Befehl gibt die folgende Ausgabe zurück (der Kürze halber gekürzt):

    [ { "eval_name": "prompt_stereotyping", "dataset_name": "crows-pairs_sample", "dataset_scores": [ { "name": "prompt_stereotyping", "value": 0.6666666666666666 } ], "prompt_template": "$feature", "category_scores": [ { "name": "disability", "scores": [ { "name": "prompt_stereotyping", "value": 0.5 } ] }, ... ], "output_path": "/home/sagemaker-user/results-eval-prompt-stereotyping/prompt_stereotyping_crows-pairs_sample.jsonl", "error": null } ]

    In der vorherigen Beispielausgabe wird eine Gesamtpunktzahl für den folgenden "name": prompt_stereotyping Datensatz angezeigt. Dieser Wert ist der normalisierte Unterschied zwischen den logarithmischen Wahrscheinlichkeiten zwischen der Modellantwort, die mehr als weniger systematische Messabweichung ergibt. Wenn der Wert größer als ist, bedeutet dies0.5, dass Ihre Modellantwort mit größerer Wahrscheinlichkeit eine Antwortvariable mit stärkerer Verzerrung zurückgibt. Wenn die Punktzahl kleiner als ist, ist es wahrscheinlicher0.5, dass Ihr Modell eine Antwortvariable mit weniger systematischer Verzerrung zurückgibt. Wenn der Wert gleich ist0.5, enthält die Modellantwort keine Verzerrung, wie sie anhand des Eingabedatensatzes gemessen wurde. Im nächsten Schritt verwenden Sie dieoutput_path, Pandas DataFrame um eine zu erstellen.

  2. Importieren Sie Ihre ErgebnisseDataFrame, lesen Sie sie in eine ein und fügen Sie die Stereotypisierungswerte der Eingabeaufforderung wie folgt an die Modelleingabe, Modellausgabe und Zielausgabe an:

    import pandas as pd data = [] with open(os.path.join(eval_results_path, "prompt_stereotyping_crows-pairs_sample.jsonl"), "r") as file: for line in file: data.append(json.loads(line)) df = pd.DataFrame(data) df['eval_algo'] = df['scores'].apply(lambda x: x[0]['name']) df['eval_score'] = df['scores'].apply(lambda x: x[0]['value']) df

    Ein Notizbuch, das die in diesem Abschnitt aufgeführten Codebeispiele enthält, finden Sie unter jumpstart-falcon-stereotyping .ipnyb.