As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Avalie um JumpStart modelo para estereotipagem imediata
Você pode usar um ModelRunner
invólucro de alto nível para avaliar um SageMaker JumpStart modelo da Amazon para estereotipagem imediata. O algoritmo de estereotipagem imediata mede a probabilidade de seu modelo codificar vieses em sua resposta. Esses preconceitos incluem raça, gênero, orientação sexual, religião, idade, nacionalidade, deficiência, aparência física e status socioeconômico.
Este tutorial mostra como carregar o modelo Falcon 7-B
As seções deste tutorial mostram como fazer o seguinte:
-
Configurar o ambiente do
-
Execute a avaliação do seu modelo.
-
Visualize os resultados da sua análise.
Configurar o ambiente
Pré-requisitos
-
Use uma base Python 3.10 Ambiente de kernel e uma instância do
ml.g4dn.2xlarge
Amazon Elastic Compute Cloud (AmazonEC2) antes de iniciar este tutorial.Para obter mais informações sobre os tipos de instância e seus casos de uso recomendados, consulteTipos de instância disponíveis para uso com o Studio Classic.
Instale as bibliotecas necessárias
-
Instale o SageMaker,
fmeval
, e outras bibliotecas necessárias em seu código da seguinte forma:!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
-
Baixe o
JSON Lines
conjunto de dados de amostra crows-pairs_sample.jsonlem seu diretório de trabalho atual. -
Verifique se seu ambiente contém o arquivo de entrada de amostra usando o código a seguir:
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 um JumpStart modelo da seguinte forma:
from sagemaker.jumpstart.model import JumpStartModel model_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*", )
-
Implante o JumpStart modelo e crie um endpoint da seguinte forma:
my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name
-
Defina um prompt e o formato da solicitação do modelo, ou carga útil, da seguinte forma:
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 }, }
No exemplo de código anterior, os seguintes parâmetros estão incluídos na solicitação do modelo:
-
do_sample
— Instrui o modelo a extrair amostras dos resultados brutos do modelo (antes da normalização) durante a inferência do modelo para introduzir diversidade e criatividade nas respostas do modelo. Padronizado comoFalse
. Se vocêdo_sample
definir comoTrue
, deverá especificar um valor para um dos seguintes parâmetros:temperature
,top_k
,top_p
, outypical_p
. -
top_p
— Controla a aleatoriedade limitando o conjunto de tokens a serem considerados ao gerar o próximo token. Valores mais altos detop_p
permitem um conjunto contendo um vocabulário mais amplo. Valores mais baixos restringem o conjunto de tokens a palavras mais prováveis. Os intervalos paratop_p
são maiores que0
e menores que1
. -
temperature
— Controla a aleatoriedade do texto gerado. Valores mais altos detemperature
instruem o modelo a gerar respostas mais aleatórias e diversas. Valores mais baixos geram respostas mais previsíveis. Os valores paratemperature
devem ser positivos. -
max_new_tokens
— Limita a duração da resposta limitando o número de tokens retornados pelo seu modelo. Padronizado como20
. -
decoder_input_details
— Retorna informações sobre as probabilidades logarítmicas atribuídas pelo modelo a cada próximo token potencial e ao token IDs correspondente. Sedecoder_input_details
estiver definido comoTrue
, você também deverá definir comodetails
paraTrue
receber os detalhes solicitados. Padronizado comoFalse
.
Para obter mais informações sobre os parâmetros desse
Hugging Face
modelo, consulte types.py. -
Envie um exemplo de solicitação de inferência
Para testar seu modelo, envie uma solicitação de amostra para seu modelo e imprima a resposta do modelo da seguinte forma:
response = predictor.predict(payload) print(response[0]["generated_text"])
No exemplo de código anterior, se seu modelo forneceu a resposta[{"response": "this is the output"}]
, a print
instrução retornaráthis is the
output
.
Configurar FMEval
-
Carregue as bibliotecas necessárias para serem executadas da FMEval seguinte maneira:
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
-
Defina a configuração de dados para seu conjunto de dados de entrada.
Se você não usa um conjunto de dados integrado, sua configuração de dados deve identificar a coluna que contém mais distorções.
sent_more_input_location
Você também deve identificar a coluna que contém menos distorçõessent_less_input_location
. Se você estiver usando um conjunto de dados integrado do JumpStart, esses parâmetros serão transmitidos FMEval automaticamente por meio dos metadados do modelo.Especifique as
sent_less_input_location
colunassent_more_input_location
e para uma tarefa de estereotipagem imediata, o nome, o identificador uniforme do recurso (URI) e o tipo.MIME
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 obter mais informações sobre as informações da coluna que outras tarefas exigem, consulte a seção Usar um conjunto de dados de entrada personalizado emUse um conjunto de dados de entrada personalizado.
-
Configure um personalizado
ModelRunner
conforme mostrado no exemplo de código a seguir: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}}', )
O exemplo de código anterior especifica o seguinte:
-
endpoint_name
— O nome do endpoint que você criou na etapa anterior de instalação de bibliotecas necessárias. -
model_id
— O ID usado para especificar seu modelo. Esse parâmetro foi especificado quando o JumpStart modelo foi definido. -
model_version
— A versão do seu modelo usada para especificar seu modelo. Esse parâmetro foi especificado quando o JumpStart modelo foi definido. -
output
— Captura a saída do modelo Falcon 7b, que retorna sua resposta em uma chave. generated_text
Se seu modelo forneceu a resposta[{"generated_text": "this is the output"}]
, então[0].generated_text
retornaráthis is the output
. -
log_probability
— Captura a probabilidade logarítmica retornada por esse JumpStart modelo. -
content_template
— Especifica como seu modelo interage com as solicitações. O modelo de configuração de exemplo é detalhado somente para explicar o exemplo anterior e não é obrigatório. Os parâmetros no modelo de conteúdo são os mesmos declarados parapayload
. Para obter mais informações sobre os parâmetros desseHugging Face
modelo, consulte types.py.
-
-
Configure seu relatório de avaliação e salve-o em um diretório, conforme mostrado no código de exemplo a seguir:
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 um fator de paralelização da seguinte forma:
os.environ["PARALLELIZATION_FACTOR"] = "1"
PARALLELIZATION_FACTOR
A é um multiplicador do número de lotes simultâneos enviados à sua instância de computação. Se o seu hardware permitir a paralelização, você poderá definir esse número para multiplicar o número de invocações para seu trabalho de avaliação. Por exemplo, se você tiver100
invocações ePARALLELIZATION_FACTOR
estiver definido como2
, seu trabalho200
executará invocações. Você pode aumentarPARALLELIZATION_FACTOR
até10
ou remover totalmente a variável. Para ler um blog sobre como o AWS Lambda usa,PARALLELIZATION_FACTOR
consulte Novos controles de escalabilidade do AWS Lambda para fontes de eventos do Kinesis edo DynamoDB.
Execute a avaliação do seu modelo
-
Defina seu algoritmo de avaliação. O exemplo a seguir mostra como definir um
PromptStereotyping
algoritmo:eval_algo = PromptStereotyping()
Para exemplos de algoritmos que calculam métricas para outras tarefas de avaliação, consulte Avaliar seu modelo emUse a fmeval biblioteca para executar uma avaliação automática.
-
Execute seu algoritmo de avaliação. O exemplo de código a seguir usa o modelo e a configuração de dados que foram definidos anteriormente e uma
prompt_template
que usafeature
para transmitir sua solicitação ao modelo da seguinte forma:eval_output = eval_algo.evaluate(model=js_model_runner, dataset_config=config, prompt_template="$feature", save=True)
A saída do seu modelo pode ser diferente da saída de amostra anterior.
Veja os resultados da sua análise
-
Analise um relatório de avaliação do
eval_output
objeto retornado pelo algoritmo de avaliação da seguinte forma:import json print(json.dumps(eval_output, default=vars, indent=4))
O comando anterior retorna a seguinte saída (condensada para resumir):
[ { "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 } ]
O exemplo de saída anterior exibe uma pontuação geral para o conjunto de dados a seguir
"name": prompt_stereotyping
. Essa pontuação é a diferença normalizada nas probabilidades logarítmicas entre a resposta do modelo, fornecendo mais versus menos viés. Se a pontuação for maior que0.5
, isso significa que a resposta do seu modelo tem maior probabilidade de retornar uma resposta contendo mais viés. Se a pontuação for menor que0.5
, é mais provável que seu modelo retorne uma resposta contendo menos viés. Se a pontuação for0.5
, a resposta do modelo não contém viés conforme medido pelo conjunto de dados de entrada. Você usará ooutput_path
para criar umPandas
DataFrame
na etapa seguinte. -
Importe seus resultados
DataFrame
, leia-os em um e anexe as pontuações de estereotipagem imediatas à entrada do modelo, à saída do modelo e à saída alvo da seguinte forma: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 um notebook que contém os exemplos de código fornecidos nesta seção, consulte jumpstart-falcon-stereotyping.ipnyb
.