本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用高階ModelRunner
包裝函式,根據在 JumpStart 外部託管的模型建立自訂評估。
本教學課程說明如何載入 Anthropic Claude 2 模型
教學課程示範如何執行下列操作:
-
設定您的 環境。
-
執行模型評估。
-
檢視您的分析結果。
設定您的環境
先決條件
-
開始本教學課程之前,請使用基本 Python 3.10 核心環境和
ml.m5.2xlarge
Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。如需執行個體類型及其建議使用案例的詳細資訊,請參閱 可與 Studio Classic 搭配使用的執行個體類型。
設定 Amazon Bedrock
您必須先請求存取 Amazon Bedrock 模型,才能使用該模型。
-
登入您的 AWS 帳戶。
-
如果您沒有 AWS 帳戶,請參閱在設定 Amazon Bedrock 中註冊 AWS 帳戶。
-
-
在開啟的歡迎使用 Amazon Bedrock! 區段中,選擇管理模型存取。
-
在出現的模型存取區段中,選擇管理模型存取。
-
在出現的基礎模型區段中,勾選模型的 Anthropic 子區段下列出的 Claude 旁的方塊。
-
選擇請求模型存取。
-
如果您的請求成功,授予存取的核取記號應該會出現在所選模型旁的存取狀態下。
-
您可能需要重新登入 AWS 帳戶 ,才能存取模型。
安裝必要的程式庫
-
在您的程式碼中,安裝
fmeval
和boto3
程式庫,如下所示:!pip install fmeval !pip3 install boto3==1.28.65
-
匯入程式庫、設定平行化因素,以及叫用 Amazon Bedrock 用戶端,如下所示:
import boto3 import json import os # Dependent on available hardware and memory os.environ["PARALLELIZATION_FACTOR"] = "1" # Bedrock clients for model inference bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime')
在先前的程式碼範例中,下列適用:
-
PARALLELIZATION_FACTOR
– 傳送至運算執行個體的並行批次數量乘數。如果您的硬體允許平行化,您可以設定此數字,將評估任務的調用次數乘以 。例如,如果您有100
呼叫,且PARALLELIZATION_FACTOR
設定為2
,則您的任務將執行200
呼叫。您PARALLELIZATION_FACTOR
最多可以增加10
,或完全移除變數。若要閱讀有關 AWS Lambda 如何使用的部落格,PARALLELIZATION_FACTOR
請參閱適用於 Kinesis 和 DynamoDB 事件來源的新 Lambda 擴展控制項。
-
-
將範例
JSON Lines
資料集 sample-dataset.jsonl下載到您目前的工作目錄中。 -
檢查您的環境是否包含範例輸入檔案,如下所示:
import glob # Check for the built-in dataset if not glob.glob("sample-dataset.jsonl"): print("ERROR - please make sure file exists: sample-dataset.jsonl")
將範例推論請求傳送至您的模型
-
定義 模型和提示
MIME
類型。對於託管在 Amazon Bedrock 上的 Anthropic Claude 2 模型,您的提示必須如下所示: import json model_id = 'anthropic.claude-v2' accept = "application/json" contentType = "application/json" # Ensure that your prompt has the correct format prompt_data = """Human: Who is Barack Obama? Assistant: """
如需如何建構請求內文的詳細資訊,請參閱模型調用請求內文欄位。其他模型可能有不同的格式。
-
將範例請求傳送至您的模型。請求的內文包含提示和您要設定的任何其他參數。
max_tokens_to_sample
設定為500
的範例請求如下:body = json.dumps({"prompt": prompt_data, "max_tokens_to_sample": 500}) response = bedrock_runtime.invoke_model( body=body, modelId=model_id, accept=accept, contentType=contentType ) response_body = json.loads(response.get("body").read()) print(response_body.get("completion"))
在先前的程式碼範例中,您可以設定下列參數:
-
temperature
– 控制所產生文字的隨機性,並接受正值。較高的值會temperature
指示模型產生更多隨機且多樣化的回應。較低的值會產生更可預測的回應。範圍介於temperature
0
和 之間1
,預設值為 0.5。 -
topP
– 透過限制產生下一個字符時要考慮的字符集來控制隨機性。較高的 值topP
允許包含更廣泛詞彙和較低值的集合,將字符集限制為更可能的單字。的範圍topP
為0
到1
,預設值為1
。 -
topK
– 將模型預測限制為k
最可能的字符。較高的 值topK
允許更多創新回應。較低的值會產生更一致的回應。的範圍topK
為0
到500
,預設值為250
。 -
max_tokens_to_sample
– 透過限制模型傳回的字符數量,來限制回應的長度。的範圍max_tokens_to_sample
為0
到4096
,預設值為200
。 -
stop_sequences
– 指定角色序列清單,指示您的模型停止產生回應。模型輸出會在輸出中第一次遇到任何列出的字串時停止。回應不包含停止序列。例如,您可以使用歸位序列將模型回應限制為單行。您可以設定 以4
停止序列。
如需您可以在請求中指定參數的詳細資訊,請參閱 Anthropic Claude 模型。
-
設定 FMEval
-
載入執行 FMEval 所需的程式庫,如下所示:
from fmeval.data_loaders.data_config import DataConfig from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner from fmeval.constants import MIME_TYPE_JSONLINES from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig
-
為您的輸入資料集設定資料組態。
下列範例輸入是來自 的一行
sample-dataset.jsonl
:{ "document": "23 October 2015 Last updated at 17:44 BST\nIt's the highest rating a tropical storm can get and is the first one of this magnitude to hit mainland Mexico since 1959.\nBut how are the categories decided and what do they mean? Newsround reporter Jenny Lawrence explains.", "summary": "Hurricane Patricia has been rated as a category 5 storm.", "id": "34615665", }
先前的範例輸入包含要在
document
金鑰內摘要的文字。要評估模型回應的參考位於summary
金鑰中。您必須在資料組態中使用這些金鑰,以指定哪些資料欄包含 FMEval 評估模型回應所需的資訊。您的資料組態必須識別模型應該在 中摘要的文字
model_input_location
。您必須使用 識別參考值target_output_location
。下列資料組態範例參考先前的輸入範例,以指定文字摘要任務所需的資料欄、名稱、統一資源識別符 (URI) 和
MIME
類型:config = DataConfig( dataset_name="sample-dataset", dataset_uri="sample-dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="document", target_output_location="summary" )
如需其他任務所需的資料欄資訊的詳細資訊,請參閱 中的使用自訂輸入資料集一節自動模型評估。
-
設定自訂
ModelRunner
,如下列程式碼範例所示:bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}' )
先前的程式碼範例會指定下列項目:
-
model_id
– 用來指定模型的 ID。 -
output
– 擷取 Anthropic Claude 2模型的輸出,以 completion
金鑰傳回其回應。 -
content_template
– 指定您的模型如何與請求互動。範例組態範本詳細說明如下,僅用於說明先前的範例,而不需要。-
在上一個
content_template
範例中,適用下列條件:-
變數會
prompt
指定輸入提示,以擷取使用者提出的請求。 -
變數會將字符數目上限
max_tokens_to_sample
指定為500
,以限制回應的長度。如需您可以在請求中指定參數的詳細資訊,請參閱 Anthropic Claude 模型。
content_template
參數的格式取決於 LLM 支援的輸入和參數。在本教學課程中,Anthropic 的 Claude 2 模型使用下列 content_template
:"content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"
另一個範例是,Falcon 7b 模型
可以支援下列 content_template
:"content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}"
-
-
-
執行模型評估
定義和執行您的評估演算法
-
定義您的評估演算法。下列範例示範如何定義
SummarizationAccuracy
演算法,用於判斷文字摘要任務的準確性:eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())
如需計算其他評估任務指標的演算法範例,請參閱在 中評估模型使用程式fmeval庫執行自動評估。
-
執行您的評估演算法。下列程式碼範例使用先前定義的資料組態,以及使用
Human
和Assistant
金鑰prompt_template
的 :eval_output = eval_algo.evaluate(model=bedrock_model_runner, dataset_config=config, prompt_template="Human: $feature\n\nAssistant:\n", save=True)
在先前的程式碼範例中,
feature
包含 Amazon Bedrock 模型預期格式的提示。
檢視您的分析結果
-
從評估演算法傳回的
eval_output
物件剖析評估報告,如下所示:# parse report print(json.dumps(eval_output, default=vars, indent=4))
上一個命令會傳回下列輸出:
[ { "eval_name": "summarization_accuracy", "dataset_name": "sample-dataset", "dataset_scores": [ { "name": "meteor", "value": 0.2048823008681274 }, { "name": "rouge", "value": 0.03557697913367101 }, { "name": "bertscore", "value": 0.5406564395678671 } ], "prompt_template": "Human: $feature\n\nAssistant:\n", "category_scores": null, "output_path": "/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "error": null } ]
上一個範例輸出會顯示三個準確度分數:Meteor
、 Rouge 和 BERTScore 、輸入 prompt_template
、如果您請求 ,category_score
則顯示 、任何錯誤和output_path
。您將在下列步驟Pandas DataFrame
中使用output_path
來建立 。 -
匯入結果並將其讀取到
DataFrame
,並將準確性分數連接到模型輸入、模型輸出和目標輸出,如下所示:import pandas as pd data = [] with open("/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "r") as file: for line in file: data.append(json.loads(line)) df = pd.DataFrame(data) df['meteor_score'] = df['scores'].apply(lambda x: x[0]['value']) df['rouge_score'] = df['scores'].apply(lambda x: x[1]['value']) df['bert_score'] = df['scores'].apply(lambda x: x[2]['value']) df
在此調用中,先前的程式碼範例會傳回下列輸出 (為了簡潔起見而簽訂合約):
model_input model_output target_output prompt scores meteor_score rouge_score bert_score 0 John Edward Bates, formerly of Spalding, Linco... I cannot make any definitive judgments, as th... A former Lincolnshire Police officer carried o... Human: John Edward Bates, formerly of Spalding... [{'name': 'meteor', 'value': 0.112359550561797... 0.112360 0.000000 0.543234 ... 1 23 October 2015 Last updated at 17:44 BST\nIt'... Here are some key points about hurricane/trop... Hurricane Patricia has been rated as a categor... Human: 23 October 2015 Last updated at 17:44 B... [{'name': 'meteor', 'value': 0.139822692925566... 0.139823 0.017621 0.426529 ... 2 Ferrari appeared in a position to challenge un... Here are the key points from the article:\n\n... Lewis Hamilton stormed to pole position at the... Human: Ferrari appeared in a position to chall... [{'name': 'meteor', 'value': 0.283411142234671... 0.283411 0.064516 0.597001 ... 3 The Bath-born player, 28, has made 36 appearan... Okay, let me summarize the key points from th... Newport Gwent Dragons number eight Ed Jackson ... Human: The Bath-born player, 28, has made 36 a... [{'name': 'meteor', 'value': 0.089020771513353... 0.089021 0.000000 0.533514 ... ...
您的模型輸出可能與先前的範例輸出不同。
如需包含本節所提供程式碼範例的筆記本,請參閱 bedrock-claude-summarization-accuracy.ipnyb
。