즉각적인 고정 관념을 위한 JumpStart 모델 평가 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

즉각적인 고정 관념을 위한 JumpStart 모델 평가

상위 수준 ModelRunner 래퍼를 사용하여 Amazon SageMaker JumpStart 모델의 프롬프트 고정 관념을 평가할 수 있습니다. 프롬프트 고정 관념 알고리즘은 응답에서 편향을 인코딩할 확률을 측정합니다. 이러한 편향에는 인종, 성별, 성적 지향, 종교, 연령, 국적, 장애, 외모 및 사회경제적 상태에 대한 편향이 포함됩니다.

이 자습서에서는 에서 사용할 수 있는 Technology Innovation Institute 에서 Falcon 7-B 모델을 로드 JumpStart하고 이 모델에 프롬프트에 대한 응답을 생성하도록 요청하는 방법을 보여줍니다. 그런 다음 이 자습서에서는 기본 제공 CrowS -Pairs 오픈 소스 챌린지 데이터 세트에 대한 즉각적인 고정 관념 분석을 위해 응답을 평가하는 방법을 보여줍니다.

이 자습서의 섹션에서는 다음을 수행하는 방법을 보여줍니다.

  • 환경을 설정합니다.

  • 모델 평가를 실행합니다.

  • 분석 결과를 봅니다.

환경을 설정합니다

사전 조건
필수 라이브러리 설치
  1. 다음과 같이 코드에 SageMakerfmeval, 및 기타 필수 라이브러리를 설치합니다.

    !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. 샘플 JSON Lines 데이터 세트 crows-pairs_sample.jsonl을 현재 작업 디렉터리에 다운로드합니다.

  3. 다음 코드를 사용하여 환경에 샘플 입력 파일이 포함되어 있는지 확인합니다.

    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. 다음과 같이 JumpStart 모델을 정의합니다.

    from sagemaker.jumpstart.model import JumpStartModel model_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*", )
  5. JumpStart 모델을 배포하고 다음과 같이 엔드포인트를 생성합니다.

    my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name
  6. 다음과 같이 프롬프트와 모델 요청 또는 페이로드의 형식을 정의합니다.

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

    이전 코드 예제에서는 모델 요청에 다음 파라미터가 포함됩니다.

    • do_sample - 모델 추론 중에 원시 모델 출력(정규화 전)에서 샘플링하도록 모델을 지시하여 모델 응답에 다양성과 창의성을 도입합니다. 기본값은 False입니다. do_sample 를 로 설정한 경우 True, temperature, top_k top_p또는 파라미터 중 하나에 값을 지정해야 합니다typical_p.

    • top_p – 다음 토큰을 생성할 때 고려할 토큰 세트를 제한하여 무작위성을 제어합니다. 값이 높을수록 더 넓은 어휘가 포함된 세트가 top_p 허용됩니다. 값이 낮으면 토큰 세트가 더 가능성이 높은 단어로 제한됩니다. 의 범위는 보다 크고 보다 0top_p습니다1.

    • temperature - 생성된 텍스트의 무작위성을 제어합니다. 값이 높을수록 모델에 더 무작위적이고 다양한 응답을 생성하도록 temperature 지시합니다. 값이 낮으면 예측 가능한 응답이 생성됩니다. 의 값은 양수여야 temperature 합니다.

    • max_new_tokens - 모델에서 반환되는 토큰 수를 제한하여 응답의 길이를 제한합니다. 기본값은 20입니다.

    • decoder_input_details - 모델이 각 잠재적 다음 토큰 및 해당 토큰 에 할당한 로그 확률에 대한 정보를 반환합니다IDs. decoder_input_details 가 로 설정된 경우 요청된 세부 정보를 수신True하려면 도 details로 설정해야 True합니다. 기본값은 False입니다.

    Hugging Face 모델의 파라미터에 대한 자세한 내용은 types.py 참조하세요.

샘플 추론 요청 전송

모델을 테스트하려면 모델로 샘플 요청을 보내고 다음과 같이 모델 응답을 인쇄합니다.

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

이전 코드 예제에서 모델이 응답을 제공한 경우 print[{"response": "this is the output"}]은 를 반환합니다this is the output.

설정 FMEval

  1. 다음과 FMEval 같이 실행하는 데 필요한 라이브러리를 로드합니다.

    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. 입력 데이터 세트에 대한 데이터 구성을 설정합니다.

    기본 제공 데이터 세트를 사용하지 않는 경우 데이터 구성은 에서 더 많은 바이어스가 포함된 열을 식별해야 합니다sent_more_input_location. 또한 에서 편향이 적은 열을 식별해야 합니다sent_less_input_location. 의 기본 제공 데이터 세트를 사용하는 경우 JumpStart이러한 파라미터는 모델 메타데이터를 통해 로 FMEval 자동으로 전달됩니다.

    프롬프트 고정 관념 작업, 이름, 균일한 리소스 식별자(URI) 및 MIME 유형에 대한 sent_more_input_locationsent_less_input_location 열을 지정합니다.

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

    다른 작업에 필요한 열 정보에 대한 자세한 내용은 의 사용자 지정 입력 데이터 세트 사용 섹션을 참조하세요사용자 지정 입력 데이터 세트 사용.

  3. 다음 코드 예제와 ModelRunner 같이 사용자 지정을 설정합니다.

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

    이전 코드 예제에서는 다음을 지정합니다.

    • endpoint_name - 이전 필수 라이브러리 설치 단계에서 생성한 엔드포인트의 이름입니다.

    • model_id – 모델을 지정하는 데 사용되는 ID입니다. 이 파라미터는 모델이 JumpStart 정의될 때 지정되었습니다.

    • model_version - 모델을 지정하는 데 사용되는 모델의 버전입니다. 이 파라미터는 JumpStart 모델이 정의될 때 지정되었습니다.

    • output - Falcon 7b 모델 에서 출력을 캡처하여 generated_text 키로 응답을 반환합니다. 모델이 응답을 제공한 경우 [{"generated_text": "this is the output"}]는 를 [0].generated_text 반환합니다this is the output.

    • log_probability - 이 JumpStart 모델에서 반환된 로그 확률을 캡처합니다.

    • content_template - 모델이 요청과 상호 작용하는 방식을 지정합니다. 예제 구성 템플릿은 이전 예제를 설명하기 위한 목적으로만 자세히 설명되어 있으며 필수는 아닙니다. 콘텐츠 템플릿의 파라미터는 에 대해 선언된 파라미터와 동일합니다payload. 이 Hugging Face 모델의 파라미터에 대한 자세한 내용은 types.py 참조하세요.

  4. 다음 예제 코드와 같이 평가 보고서를 구성하고 디렉터리에 저장합니다.

    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. 다음과 같이 병렬화 인수를 설정합니다.

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

    PARALLELIZATION_FACTOR 는 컴퓨팅 인스턴스로 전송된 동시 배치 수의 승수입니다. 하드웨어에서 병렬화를 허용하는 경우 이 숫자를 설정하여 평가 작업에 대한 호출 수를 곱할 수 있습니다. 예를 들어 100 호출이 있고 이 로 PARALLELIZATION_FACTOR 설정된 경우 2작업은 200 호출을 실행합니다. PARALLELIZATION_FACTOR 최대 까지 늘리10거나 변수를 완전히 제거할 수 있습니다. Lambda의 사용 방식에 AWS 대한 블로그를 읽으려면 Kinesis 및 DynamoDB 이벤트 소스에 대한 새 AWS Lambda 조정 제어를 PARALLELIZATION_FACTOR 참조하세요.

모델 평가 실행

  1. 평가 알고리즘을 정의합니다. 다음 예제에서는 PromptStereotyping 알고리즘을 정의하는 방법을 보여줍니다.

    eval_algo = PromptStereotyping()

    다른 평가 작업에 대한 지표를 계산하는 알고리즘의 예는 의 모델 평가를 참조하세요fmeval 라이브러리를 사용하여 자동 평가 실행.

  2. 평가 알고리즘을 실행합니다. 다음 코드 예제에서는 이전에 정의한 모델 및 데이터 구성과 를 prompt_template 사용하여 다음과 같이 프롬프트를 모델에 feature 전달합니다.

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

    모델 출력은 이전 샘플 출력과 다를 수 있습니다.

분석 결과 보기

  1. 다음과 같이 평가 알고리즘에서 반환한 eval_output 객체에서 평가 보고서를 구문 분석합니다.

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

    이전 명령은 다음 출력을 반환합니다(간결성을 위해 압축됨).

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

    이전 예제 출력은 다음 데이터 세트의 전체 점수를 표시합니다"name": prompt_stereotyping. 이 점수는 편향을 많이 또는 더 적게 제공하는 모델 응답 간의 로그 확률의 정규화된 차이입니다. 점수가 보다 크면 모델 응답이 더 많은 편향을 포함하는 응답을 반환할 가능성이 더 높다는 0.5의미입니다. 점수가 보다 작으면 0.5모델이 편향이 적은 응답을 반환할 가능성이 더 높습니다. 점수가 인 경우 모델 응답0.5에는 입력 데이터 세트로 측정한 바이어스가 포함되지 않습니다. 다음 단계에서 output_path를 사용하여 PandasDataFrame를 생성합니다.

  2. 결과를 가져와 로 읽고 다음과 같이 프롬프트 고정 관념 점수를 모델 입력, 모델 출력 및 대상 출력에 DataFrame연결합니다.

    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

    이 섹션에 제공된 코드 예제가 포함된 노트북은 jumpstart-falcon-stereotyping.ipnyb 를 참조하세요.