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.
Ejemplos de código para la personalización de modelos
Los siguientes ejemplos de código muestran cómo preparar un conjunto de datos básico, configurar los permisos, crear un modelo personalizado, ver los archivos de salida, adquirir el rendimiento del modelo y realizar inferencias en el modelo. Puede modificar estos fragmentos de código según su caso de uso específico.
-
Prepara el conjunto de datos de entrenamiento.
-
Cree un archivo de conjunto de datos de entrenamiento que contenga la siguiente línea y asígnele un nombre
train.jsonl
.{"prompt": "what is AWS", "completion": "it's Amazon Web Services"}
-
Crea un bucket de S3 para los datos de entrenamiento y otro para los datos de salida (los nombres deben ser únicos).
-
Cargar
train.jsonl
en el depósito de datos de entrenamiento.
-
-
Crea una política para acceder a tu formación y asójala a un IAM puesto con una relación de confianza en Amazon Bedrock. Selecciona la pestaña correspondiente al método que prefieras y sigue los pasos:
- Console
-
-
Cree la política de S3.
-
Navegue hasta la IAM consola en https://console.aws.amazon.com/iam
y elija Políticas en el panel de navegación izquierdo. -
Seleccione Crear política y, JSONa continuación, abra el editor de políticas.
-
Pegue la siguiente política, sustituyéndola
${training-bucket}
y${output-bucket}
con los nombres de los buckets y, a continuación, selecciona Siguiente.{ "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}
/*" ] } ] } -
Asigne un nombre a la política
MyFineTuningDataAccess
y selecciona Crear política.
-
-
Cree un IAM rol y adjunte la política.
-
En el panel de navegación izquierdo, selecciona Roles y, a continuación, selecciona Crear rol.
-
Selecciona Política de confianza personalizada, pega la siguiente política y selecciona Siguiente.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Busca la
MyFineTuningDataAccess
la política que creó, seleccione la casilla de verificación y elija Siguiente. -
Asigne un nombre al rol
MyCustomizationRole
y seleccionaCreate role
.
-
-
- CLI
-
-
Cree un archivo llamado
BedrockTrust.json
y pegue la siguiente política en él.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Cree otro archivo llamado
MyFineTuningDataAccess.json
y pegue la siguiente política en él, sustituyendo${training-bucket}
y${output-bucket}
con los nombres de sus cubos.{ "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}
/*" ] } ] } -
En una terminal, navegue hasta la carpeta que contiene las políticas que creó.
-
Realice una CreateRolesolicitud para crear un IAM rol llamado
MyCustomizationRole
y adjunte elBedrockTrust.json
política de confianza que ha creado.aws iam create-role \ --role-name MyCustomizationRole \ --assume-role-policy-document file://BedrockTrust.json
-
Realice una CreatePolicysolicitud para crear la política de acceso a los datos de S3 con
MyFineTuningDataAccess.json
archivo que ha creado. La respuesta devuelve unaArn
para la política.aws iam create-policy \ --policy-name MyFineTuningDataAccess \ --policy-document file://myFineTuningDataAccess.json
-
AttachRolePolicySolicita adjuntar la política de acceso a datos de S3 a tu función y
policy-arn
sustitúyala por la que aparece ARN en la respuesta del paso anterior:aws iam attach-role-policy \ --role-name MyCustomizationRole \ --policy-arn
${policy-arn}
-
- Python
-
-
Ejecute el siguiente código para CreateRolesolicitar la creación de un IAM rol llamado
MyCustomizationRole
y para realizar una CreatePolicysolicitud para crear una política de acceso a datos de S3 llamadaMyFineTuningDataAccess
. Para la política de acceso a datos de S3, sustituya${training-bucket}
y${output-bucket}
con los nombres de sus buckets de S3.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}
/*" ] } ] }) ) -
Arn
Se devuelve un N en la respuesta. Ejecute el siguiente fragmento de código para realizar una AttachRolePolicysolicitud, sustituyendo${policy-arn}
con el devuelto.Arn
iam.attach_role_policy( RoleName="MyCustomizationRole", PolicyArn="
${policy-arn}
" )
-
-
Seleccione un idioma para ver los ejemplos de código con los que ejecutar las API operaciones de personalización del modelo.
- CLI
-
En primer lugar, cree un archivo de texto llamado
FineTuningData.json
. Copie el JSON código de abajo en el archivo de texto, sustituyendo${training-bucket}
y${output-bucket}
con los nombres de sus buckets de S3.{ "trainingDataConfig": { "s3Uri": "s3://
${training-bucket}
/train.jsonl" }, "outputDataConfig": { "s3Uri": "s3://${output-bucket}
" } }Para enviar un trabajo de personalización de modelos, navegue hasta la carpeta que contiene
FineTuningData.json
en una terminal y ejecute el siguiente comando en la línea de comandos, sustituyendo${your-customization-role-arn}
con la función de personalización de modelos que haya configurado.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.jsonLa respuesta devuelve un
jobArn
. Deje que el trabajo se complete algún tiempo. Puede comprobar su estado con el siguiente comando.aws bedrock get-model-customization-job \ --job-identifier "
jobArn
"Cuando el
status
esCOMPLETE
, puedes verlotrainingMetrics
en la respuesta. Puede descargar los artefactos a la carpeta actual ejecutando el siguiente comando, sustituyendoaet.et-bucket
con el nombre del depósito de salida yjobId
con el ID del trabajo de personalización (la secuencia que sigue a la última barra deljobArn
).aws s3 cp s3://
${output-bucket}
/model-customization-job-jobId
. --recursiveAdquiera un rendimiento aprovisionado sin compromiso para su modelo personalizado con el siguiente comando.
nota
Se le cobrará por hora por esta compra. Usa la consola para ver las estimaciones de precios de las diferentes opciones.
aws bedrock create-provisioned-model-throughput \ --model-id MyCustomModel \ --provisioned-model-name MyProvisionedCustomModel \ --model-units 1
La respuesta devuelve un
provisionedModelArn
. Deje que se cree el rendimiento aprovisionado durante algún tiempo. Para comprobar su estado, introduzca el nombre o ARN el modelo aprovisionado tal y como se indicaprovisioned-model-id
en el siguiente comando.aws bedrock get-provisioned-model-throughput \ --provisioned-model-id
${provisioned-model-arn}
Si
status
es asíInService
, puede ejecutar una inferencia con su modelo personalizado con el siguiente comando. Debe proporcionar el ARN modelo aprovisionado como.model-id
El resultado se escribe en un archivo llamadooutput.txt
en la carpeta actual.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
-
Ejecute el siguiente fragmento de código para realizar un trabajo de ajuste. Reemplazar
${your-customization-role-arn}
con el ARNMyCustomizationRole
que tú configuras y sustituyes${training-bucket}
y${output-bucket}
con los nombres de sus buckets de S3.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')La respuesta devuelve un
jobArn
. Deje que el trabajo se complete algún tiempo. Puede comprobar su estado con el siguiente comando.bedrock.get_model_customization_job(jobIdentifier=jobArn).get('status')
Cuando el
status
esCOMPLETE
, puedes verlotrainingMetrics
en la GetModelCustomizationJobrespuesta. También puedes seguir los pasos que se indican en Descargar objetos para descargar las métricas.Adquiera un rendimiento aprovisionado sin compromiso para su modelo personalizado con el siguiente comando.
response_pt = bedrock.create_provisioned_model_throughput( modelId="MyCustomModel", provisionedModelName="MyProvisionedCustomModel", modelUnits="1" ) provisionedModelArn = response_pt.get('provisionedModelArn')
La respuesta devuelve un.
provisionedModelArn
Deje que se cree el rendimiento aprovisionado durante algún tiempo. Para comprobar su estado, introduzca el nombre o ARN el modelo aprovisionado tal y como se indicaprovisionedModelId
en el siguiente comando.bedrock.get_provisioned_model_throughput(provisionedModelId=provisionedModelArn)
Si
status
es asíInService
, puede ejecutar una inferencia con su modelo personalizado con el siguiente comando. Debe proporcionar el ARN modelo aprovisionado como.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()