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
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
-
Instale las bibliotecas SageMaker
fmeval
, 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
-
Descarga el
JSON Lines
conjunto de datos de muestra crows-pairs_sample.jsonlen tu directorio de trabajo actual. -
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")
-
Defina un JumpStart modelo de la siguiente manera:
from sagemaker.jumpstart.model import JumpStartModel model_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*", )
-
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
-
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 esFalse
. Si se establecedo_sample
enTrue
, debe especificar un valor para uno de los siguientes parámetros:temperature
,top_k
top_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 altostop_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 paratop_p
son mayores0
y menores que1
. -
temperature
— Controla la aleatoriedad del texto generado. Los valores más altostemperature
de indican al modelo que genere respuestas más aleatorias y diversas. Los valores más bajos generan respuestas más predecibles. Los valores detemperature
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 es20
. -
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. Sidecoder_input_details
está establecido enTrue
, también debedetails
configurarloTrue
en para recibir los detalles solicitados. El valor predeterminado esFalse
.
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
-
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
-
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 sesgos
sent_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
columnassent_more_input_location
y para una tarea rápida de creación de estereotipos, el nombre, el identificador uniforme de recursos (URI) y elMIME
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.
-
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 esteHugging Face
modelo, consulte types.py.
-
-
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)
-
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 tiene100
invocaciones yPARALLELIZATION_FACTOR
está configurado en, su trabajo ejecutará las2
invocaciones.200
PuedePARALLELIZATION_FACTOR
aumentar o eliminar la10
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 Kinesisy DynamoDB.
Realice la evaluación de su modelo
-
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.
-
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 utilizafeature
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
-
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á eloutput_path
para crear unPandas
DataFrame
en el siguiente paso. -
Importe sus resultados y léalos en un
DataFrame
, 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
.