Evalúe un JumpStart modelo para estereotipar rápidamente - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Evalúe un JumpStart modelo para estereotipar rápidamente

Puedes usar un ModelRunner envoltorio de alto nivel para evaluar un SageMaker JumpStart modelo de Amazon para crear estereotipos rápidamente. El algoritmo de estereotipado rápido mide la probabilidad de que el modelo codifique sesgos en su respuesta. Estos sesgos incluyen los de raza, género, orientación sexual, religión, edad, nacionalidad, discapacidad, apariencia física y nivel socioeconómico.

En este tutorial se muestra cómo cargar el modelo Falcon 7-B del Instituto de Innovación Tecnológica, disponible en JumpStart, y cómo solicitar a este modelo que genere respuestas a las solicitudes. A continuación, en este tutorial se muestra cómo evaluar las respuestas para crear estereotipos con rapidez comparándolas con el conjunto de datos de código abierto integrado sobre los desafíos de código abierto Crows-pairs.

En las secciones de este tutorial se muestra cómo hacer lo siguiente:

  • Configurar su entorno de

  • Ejecute la evaluación del modelo.

  • Vea los resultados de su análisis.

Configure su entorno

Requisitos previos
  • Utilice una base Python 3.10 entorno de kernel y una instancia de ml.g4dn.2xlarge Amazon Elastic Compute Cloud (AmazonEC2) antes de comenzar este tutorial.

    Para obtener más información sobre los tipos de instancias y sus casos de uso recomendados, consulteTipos de instancias disponibles para su uso con Studio Classic.

Instala las bibliotecas necesarias
  1. Instale las bibliotecas SageMakerfmeval, y otras bibliotecas necesarias en el código de la siguiente manera:

    !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. Descarga el JSON Lines conjunto de datos de muestra crows-pairs_sample.jsonl en tu directorio de trabajo actual.

  3. Compruebe que su entorno contiene el archivo de entrada de muestra mediante el siguiente código:

    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. Defina un JumpStart modelo de la siguiente manera:

    from sagemaker.jumpstart.model import JumpStartModel model_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*", )
  5. Implemente el JumpStart modelo y cree un punto final de la siguiente manera:

    my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name
  6. Defina una solicitud y el formato de la solicitud de modelo, o carga útil, de la siguiente manera:

    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 }, }

    En el ejemplo de código anterior, se incluyen los siguientes parámetros en la solicitud de modelo:

    • do_sample— Indica al modelo que tome muestras de los resultados sin procesar del modelo (antes de la normalización) durante la inferencia del modelo para introducir diversidad y creatividad en las respuestas del modelo. El valor predeterminado es False. Si se establece do_sample enTrue, debe especificar un valor para uno de los siguientes parámetros:temperature, top_ktop_p, o. typical_p

    • top_p— Controla la aleatoriedad limitando el conjunto de fichas a tener en cuenta al generar la siguiente ficha. Los valores más altos top_p permiten un conjunto que contenga un vocabulario más amplio. Los valores más bajos restringen el conjunto de fichas a palabras más probables. Los rangos para top_p son mayores 0 y menores que1.

    • temperature— Controla la aleatoriedad del texto generado. Los valores más altos temperature de indican al modelo que genere respuestas más aleatorias y diversas. Los valores más bajos generan respuestas más predecibles. Los valores de temperature deben ser positivos.

    • max_new_tokens— Limita la longitud de la respuesta al limitar la cantidad de fichas devueltas por el modelo. El valor predeterminado es 20.

    • decoder_input_details— Devuelve información sobre las probabilidades logarítmicas asignadas por el modelo a cada posible siguiente token y al token IDs correspondiente. Si decoder_input_details está establecido enTrue, también debe details configurarlo True en para recibir los detalles solicitados. El valor predeterminado es False.

    Para obtener más información sobre los parámetros de este Hugging Face modelo, consulte types.py.

Envíe un ejemplo de solicitud de inferencia

Para probar su modelo, envíe una solicitud de muestra a su modelo e imprima la respuesta del modelo de la siguiente manera:

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

En el ejemplo de código anterior, si el modelo proporcionó la respuesta[{"response": "this is the output"}], se devuelve la print declaraciónthis is the output.

Configurar FMEval

  1. Cargue las bibliotecas necesarias para que se ejecuten de la FMEval siguiente manera:

    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. Configure la configuración de datos para su conjunto de datos de entrada.

    Si no utilizas un conjunto de datos integrado, la configuración de datos debe identificar la columna que contiene más sesgossent_more_input_location. También debe identificar la columna que contiene menos sesgosent_less_input_location. Si utiliza un conjunto de datos integrado de JumpStart, estos parámetros se transfieren FMEval automáticamente a través de los metadatos del modelo.

    Especifique las sent_less_input_location columnas sent_more_input_location y para una tarea rápida de creación de estereotipos, el nombre, el identificador uniforme de recursos (URI) y el MIME tipo.

    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", )

    Para obtener más información sobre la información de columnas que requieren otras tareas, consulte la sección Usar un conjunto de datos de entrada personalizado enUsa un conjunto de datos de entrada personalizado.

  3. Configura una personalizada ModelRunner como se muestra en el siguiente ejemplo de código:

    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}}', )

    El ejemplo de código anterior especifica lo siguiente:

    • endpoint_name— El nombre del punto final que creó en el paso anterior de instalar las bibliotecas requeridas.

    • model_id— El identificador utilizado para especificar el modelo. Este parámetro se especificó cuando se definió el JumpStart modelo.

    • model_version— La versión del modelo utilizada para especificarlo. Este parámetro se especificó cuando se definió el JumpStart modelo.

    • output— Captura la salida del modelo Falcon 7b, que devuelve su respuesta en una generated_text clave. Si su modelo proporcionó la respuesta[{"generated_text": "this is the output"}], entonces [0].generated_text regresa. this is the output

    • log_probability— Captura la probabilidad logarítmica devuelta por este JumpStart modelo.

    • content_template— Especifica cómo interactúa el modelo con las solicitudes. La plantilla de configuración del ejemplo se detalla únicamente para explicar el ejemplo anterior y no es obligatoria. Los parámetros de la plantilla de contenido son los mismos que los declaradospayload. Para obtener más información sobre los parámetros de este Hugging Face modelo, consulte types.py.

  4. Configure el informe de evaluación y guárdelo en un directorio como se muestra en el siguiente código de ejemplo:

    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. Configure un factor de paralelización de la siguiente manera:

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

    A PARALLELIZATION_FACTOR es un multiplicador del número de lotes simultáneos enviados a la instancia de cómputo. Si tu hardware permite la paralelización, puedes configurar este número para multiplicar el número de invocaciones para tu trabajo de evaluación. Por ejemplo, si tiene 100 invocaciones y PARALLELIZATION_FACTOR está configurado en, su trabajo ejecutará las 2 invocaciones. 200 Puede PARALLELIZATION_FACTOR aumentar o eliminar la 10 variable por completo. Para leer un blog sobre cómo utiliza AWS Lambda, PARALLELIZATION_FACTOR consulte Nuevos controles de escalado de AWS Lambda para las fuentes de eventos de Kinesis y DynamoDB.

Realice la evaluación de su modelo

  1. Defina su algoritmo de evaluación. El siguiente ejemplo muestra cómo definir un PromptStereotyping algoritmo:

    eval_algo = PromptStereotyping()

    Para ver ejemplos de algoritmos que calculan métricas para otras tareas de evaluación, consulte Evalúe su modelo enUtilice la fmeval biblioteca para ejecutar una evaluación automática.

  2. Ejecute su algoritmo de evaluación. El siguiente ejemplo de código utiliza el modelo y la configuración de datos que se definieron previamente y una prompt_template que se utiliza feature para pasar la solicitud al modelo de la siguiente manera:

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

    El resultado del modelo puede ser diferente del resultado del ejemplo anterior.

Vea los resultados de su análisis

  1. Analice un informe de evaluación a partir del eval_output objeto devuelto por el algoritmo de evaluación de la siguiente manera:

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

    El comando anterior devuelve el siguiente resultado (resumido para mayor brevedad):

    [ { "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 } ]

    El resultado del ejemplo anterior muestra una puntuación general para el conjunto de datos siguiente"name": prompt_stereotyping. Esta puntuación es la diferencia normalizada en las probabilidades logarítmicas entre la respuesta del modelo que proporciona más o menos sesgo. Si la puntuación es superior a0.5, significa que es más probable que la respuesta del modelo arroje una respuesta que contenga más sesgo. Si la puntuación es inferior a0.5, es más probable que el modelo devuelva una respuesta que contenga menos sesgo. Si la puntuación es0.5, la respuesta del modelo no contiene el sesgo medido por el conjunto de datos de entrada. Utilizará el output_path para crear un Pandas DataFrame en el siguiente paso.

  2. Importe sus resultados y léalos en unDataFrame, y adjunte las puntuaciones de estereotipado indicativas a la entrada del modelo, a la salida del modelo y a la salida objetivo de la siguiente manera:

    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

    Para ver un cuaderno que contenga los ejemplos de código de esta sección, consulte jumpstart-falcon-stereotyping.ipnyb.