Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Codebeispiele für die Modellanpassung
Die folgenden Codebeispiele zeigen, wie Sie einen Basisdatensatz vorbereiten, Berechtigungen einrichten, ein benutzerdefiniertes Modell erstellen, die Ausgabedateien anzeigen, Durchsatz für das Modell erwerben und Inferenzen für das Modell ausführen. Sie können diese Codefragmente an Ihren speziellen Anwendungsfall anpassen.
-
Bereiten Sie den Trainingsdatensatz vor.
-
Erstellen Sie eine Trainingsdatensatz-Datei, die die folgende Zeile enthält, und benennen Sie sie
train.jsonl
.{"prompt": "what is AWS", "completion": "it's Amazon Web Services"}
-
Erstellen Sie einen S3-Bucket für Ihre Trainingsdaten und einen weiteren für Ihre Ausgabedaten (die Namen müssen eindeutig sein).
-
Hochladen
train.jsonl
in den Trainingsdaten-Bucket.
-
-
Erstellen Sie eine Richtlinie für den Zugriff auf Ihre Schulung und fügen Sie sie einer IAM Rolle mit einer Amazon Bedrock Vertrauensbeziehung hinzu. Wählen Sie die Registerkarte aus, die der Methode Ihrer Wahl entspricht, und folgen Sie den Schritten:
- Console
-
-
Erstellen Sie die S3-Richtlinie.
-
Navigieren Sie unter https://console.aws.amazon.com/iam
zur IAM Konsole und wählen Sie im linken Navigationsbereich Richtlinien aus. -
Wählen Sie Richtlinie erstellen aus und öffnen Sie dann JSONden Richtlinien-Editor.
-
Fügen Sie die folgende Richtlinie ein und ersetzen Sie
${training-bucket}
and${output-bucket}
mit Ihren Bucket-Namen und wählen Sie dann Weiter aus.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
${training-bucket}
", "arn:aws:s3:::${training-bucket}
/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${output-bucket}
", "arn:aws:s3:::${output-bucket}
/*" ] } ] } -
Benennen Sie die Richtlinie
MyFineTuningDataAccess
und wählen Sie Richtlinie erstellen aus.
-
-
Erstellen Sie eine IAM Rolle und hängen Sie die Richtlinie an.
-
Wählen Sie im linken Navigationsbereich Rollen und dann Rolle erstellen aus.
-
Wählen Sie Benutzerdefinierte Vertrauensrichtlinie aus, fügen Sie die folgende Richtlinie ein und wählen Sie Weiter aus.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Suchen Sie nach
MyFineTuningDataAccess
Richtlinie, die Sie erstellt haben, aktivieren Sie das Kontrollkästchen und wählen Sie Weiter aus. -
Benennen Sie die Rolle
MyCustomizationRole
und wählenCreate role
.
-
-
- CLI
-
-
Erstellen Sie eine Datei mit dem Namen
BedrockTrust.json
und fügen Sie die folgende Richtlinie ein.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Erstellen Sie eine weitere Datei mit dem Namen
MyFineTuningDataAccess.json
und fügen Sie die folgende Richtlinie ein, indem Sie sie ersetzen${training-bucket}
and${output-bucket}
mit Ihren Bucket-Namen.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
${training-bucket}
", "arn:aws:s3:::${training-bucket}
/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${output-bucket}
", "arn:aws:s3:::${output-bucket}
/*" ] } ] } -
Navigieren Sie in einem Terminal zu dem Ordner, der die von Ihnen erstellten Richtlinien enthält.
-
Stellen Sie eine CreateRoleAnfrage zur Erstellung einer IAM Rolle namens
MyCustomizationRole
und hängen Sie das anBedrockTrust.json
Vertrauensrichtlinie, die Sie erstellt haben.aws iam create-role \ --role-name MyCustomizationRole \ --assume-role-policy-document file://BedrockTrust.json
-
Stellen Sie eine CreatePolicyAnfrage zur Erstellung der S3-Datenzugriffsrichtlinie mit dem
MyFineTuningDataAccess.json
Datei, die Sie erstellt haben. Die Antwort gibt einArn
für die Richtlinie zurück.aws iam create-policy \ --policy-name MyFineTuningDataAccess \ --policy-document file://myFineTuningDataAccess.json
-
Stellen Sie eine AttachRolePolicyAnfrage, um die S3-Datenzugriffsrichtlinie an Ihre Rolle anzuhängen, und ersetzen Sie das durch das ARN in der Antwort aus dem vorherigen Schritt:
policy-arn
aws iam attach-role-policy \ --role-name MyCustomizationRole \ --policy-arn
${policy-arn}
-
- Python
-
-
Führen Sie den folgenden Code aus, um eine CreateRoleAnfrage zur Erstellung einer IAM Rolle mit dem Namen zu stellen
MyCustomizationRole
und um eine CreatePolicyAnfrage zur Erstellung einer S3-Datenzugriffsrichtlinie mit dem Namen zu stellenMyFineTuningDataAccess
. Ersetzen Sie für die S3-Datenzugriffsrichtlinie${training-bucket}
and${output-bucket}
durch Ihre S3-Bucket-Namen.import boto3 import json iam = boto3.client("iam") iam.create_role( RoleName="MyCustomizationRole", AssumeRolePolicyDocument=json.dumps({ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }) ) iam.create_policy( PolicyName="MyFineTuningDataAccess", PolicyDocument=json.dumps({ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
${training-bucket}
", "arn:aws:s3:::${training-bucket}
/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${output-bucket}
", "arn:aws:s3:::${output-bucket}
/*" ] } ] }) ) -
In
Arn
der Antwort wird An zurückgegeben. Führen Sie den folgenden Codeausschnitt aus, um eine AttachRolePolicyAnfrage zu stellen, und ersetzen Sie${policy-arn}
mit dem zurückgegebenen.Arn
iam.attach_role_policy( RoleName="MyCustomizationRole", PolicyArn="
${policy-arn}
" )
-
-
Wählen Sie eine Sprache aus, um Codebeispiele zum Aufrufen der API Modellanpassungsoperationen anzuzeigen.
- CLI
-
Erstellen Sie zunächst eine Textdatei mit dem Namen
FineTuningData.json
. Kopieren Sie den JSON Code von unten in die Textdatei und ersetzen Sie${training-bucket}
and${output-bucket}
mit Ihren S3-Bucket-Namen.{ "trainingDataConfig": { "s3Uri": "s3://
${training-bucket}
/train.jsonl" }, "outputDataConfig": { "s3Uri": "s3://${output-bucket}
" } }Um einen Job zur Modellanpassung einzureichen, navigieren Sie zu dem Ordner mit
FineTuningData.json
in einem Terminal und führen Sie den folgenden Befehl in der Befehlszeile aus, wobei Sie Folgendes ersetzen${your-customization-role-arn}
mit der Rolle für die Modellanpassung, die Sie eingerichtet haben.aws bedrock create-model-customization-job \ --customization-type FINE_TUNING \ --base-model-identifier arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1 \ --role-arn
${your-customization-role-arn}
\ --job-name MyFineTuningJob \ --custom-model-name MyCustomModel \ --hyper-parameters epochCount=1,batchSize=1,learningRate=.0005,learningRateWarmupSteps=0 \ --cli-input-json file://FineTuningData.jsonDie Antwort gibt a zurück
jobArn
. Warten Sie, bis der Job abgeschlossen ist. Sie können seinen Status mit dem folgenden Befehl überprüfen.aws bedrock get-model-customization-job \ --job-identifier "
jobArn
"Wenn ja
status
COMPLETE
, können Sie dastrainingMetrics
in der Antwort sehen. Sie können die Artefakte in den aktuellen Ordner herunterladen, indem Sie den folgenden Befehl ausführen und dabei Folgendes ersetzenaet.et-bucket
mit dem Namen Ihres Ausgabe-Buckets undjobId
mit der ID des Anpassungsjobs (die Reihenfolge nach dem letzten Schrägstrich injobArn
).aws s3 cp s3://
${output-bucket}
/model-customization-job-jobId
. --recursiveErwerben Sie mit dem folgenden Befehl einen unverbindlichen Provisioned Throughput für Ihr benutzerdefiniertes Modell.
Anmerkung
Dieser Kauf wird Ihnen stündlich in Rechnung gestellt. Verwenden Sie die Konsole, um Preisschätzungen für verschiedene Optionen einzusehen.
aws bedrock create-provisioned-model-throughput \ --model-id MyCustomModel \ --provisioned-model-name MyProvisionedCustomModel \ --model-units 1
Die Antwort gibt a zurück
provisionedModelArn
. Warten Sie einige Zeit, bis der bereitgestellte Durchsatz erstellt wurde. Um den Status zu überprüfen, geben Sie den Namen oder den Namen ARN des bereitgestellten Modells wieprovisioned-model-id
im folgenden Befehl ein.aws bedrock get-provisioned-model-throughput \ --provisioned-model-id
${provisioned-model-arn}
Wenn dies der
status
Fall istInService
, können Sie mit dem folgenden Befehl eine Inferenz für Ihr benutzerdefiniertes Modell ausführen. Sie müssen das ARN des bereitgestellten Modells als angeben.model-id
Die Ausgabe wird in eine Datei mit dem Namen geschriebenoutput.txt
in Ihrem aktuellen Ordner.aws bedrock-runtime invoke-model \ --model-id
${provisioned-model-arn}
\ --body '{"inputText": "What is AWS?", "textGenerationConfig": {"temperature": 0.5}}' \ --cli-binary-format raw-in-base64-out \ output.txt - Python
-
Führen Sie den folgenden Codeausschnitt aus, um einen Feinabstimmungsauftrag einzureichen. Ersetzen
${your-customization-role-arn}
mit dem von ARNMyCustomizationRole
die du einrichtest und ersetzst${training-bucket}
and${output-bucket}
mit Ihren S3-Bucket-Namen.import boto3 bedrock = boto3.client(service_name='bedrock') # Set parameters customizationType = "FINE_TUNING" baseModelIdentifier = "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1" roleArn = "
${your-customization-role-arn}
" jobName = "MyFineTuningJob" customModelName = "MyCustomModel" hyperParameters = { "epochCount": "1", "batchSize": "1", "learningRate": ".0005", "learningRateWarmupSteps": "0" } trainingDataConfig = {"s3Uri": "s3://${training-bucket}
/myInputData/train.jsonl"} outputDataConfig = {"s3Uri": "s3://${output-bucket}
/myOutputData"} # Create job response_ft = bedrock.create_model_customization_job( jobName=jobName, customModelName=customModelName, roleArn=roleArn, baseModelIdentifier=baseModelIdentifier, hyperParameters=hyperParameters, trainingDataConfig=trainingDataConfig, outputDataConfig=outputDataConfig ) jobArn = response_ft.get('jobArn')Die Antwort gibt a zurück
jobArn
. Warten Sie, bis der Job abgeschlossen ist. Sie können seinen Status mit dem folgenden Befehl überprüfen.bedrock.get_model_customization_job(jobIdentifier=jobArn).get('status')
Wenn dies der
status
Fall istCOMPLETE
, können Sie dastrainingMetrics
in der GetModelCustomizationJobAntwort sehen. Sie können auch den Schritten unter Objekte herunterladen folgen, um die Metriken herunterzuladen.Erwerben Sie mit dem folgenden Befehl einen unverbindlichen Provisioned Throughput für Ihr benutzerdefiniertes Modell.
response_pt = bedrock.create_provisioned_model_throughput( modelId="MyCustomModel", provisionedModelName="MyProvisionedCustomModel", modelUnits="1" ) provisionedModelArn = response_pt.get('provisionedModelArn')
Die Antwort gibt a zurück.
provisionedModelArn
Warten Sie einige Zeit, bis der bereitgestellte Durchsatz erstellt wurde. Um den Status zu überprüfen, geben Sie den Namen oder den Namen ARN des bereitgestellten Modells wieprovisionedModelId
im folgenden Befehl ein.bedrock.get_provisioned_model_throughput(provisionedModelId=provisionedModelArn)
Wenn dies der
status
Fall istInService
, können Sie mit dem folgenden Befehl eine Inferenz für Ihr benutzerdefiniertes Modell ausführen. Sie müssen das ARN des bereitgestellten Modells als angeben.modelId
import json import logging import boto3 from botocore.exceptions import ClientError class ImageError(Exception): "Custom exception for errors returned by the model" def __init__(self, message): self.message = message logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_text(model_id, body): """ Generate text using your provisioned custom model. Args: model_id (str): The model ID to use. body (str) : The request body to use. Returns: response (json): The response from the model. """ logger.info( "Generating text with your provisioned custom model %s", model_id) brt = boto3.client(service_name='bedrock-runtime') accept = "application/json" content_type = "application/json" response = brt.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response.get("body").read()) finish_reason = response_body.get("error") if finish_reason is not None: raise ImageError(f"Text generation error. Error is {finish_reason}") logger.info( "Successfully generated text with provisioned custom model %s", model_id) return response_body def main(): """ Entrypoint for example. """ try: logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = provisionedModelArn body = json.dumps({ "inputText": "what is AWS?" }) response_body = generate_text(model_id, body) print(f"Input token count: {response_body['inputTextTokenCount']}") for result in response_body['results']: print(f"Token count: {result['tokenCount']}") print(f"Output text: {result['outputText']}") print(f"Completion reason: {result['completionReason']}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) except ImageError as err: logger.error(err.message) print(err.message) else: print( f"Finished generating text with your provisioned custom model {model_id}.") if __name__ == "__main__": main()