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 para el modelo y realizar inferencias en el modelo. Puede modificar estos fragmentos de código según su caso de uso específico.
-
Prepare el conjunto de datos de entrenamiento.
-
Crea un archivo de conjunto de datos de entrenamiento que contenga la siguiente línea y asígnale un nombre
train.jsonl
.{"prompt": "what is AWS", "completion": "it's Amazon Web Services"}
-
Cree un bucket de S3 para los datos de entrenamiento y otro para los datos de salida (los nombres deben ser únicos).
-
Cárgalo
train.jsonl
en el depósito de datos de entrenamiento.
-
-
Cree una política para acceder al entrenamiento y asóciela a un rol de IAM con una relación de confianza en Amazon Bedrock. Elige la pestaña del método que prefieras y, a continuación, sigue los pasos:
- Console
-
-
Cree la política de S3.
-
Ve a la consola de IAM en https://console.aws.amazon.com/iam
y selecciona Políticas en el panel de navegación izquierdo. -
Seleccione Crear política y, a continuación, elija JSON para abrir el Editor de políticas.
-
Pegue la siguiente política, sustituya
${training-bucket}
y por los nombres${output-bucket}
de su bucket y, a continuación, seleccione 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 seleccione Crear política.
-
-
Cree un rol de IAM y asóciele la política.
-
En el panel de navegación de la izquierda, seleccione Roles y, a continuación, seleccione Crear rol.
-
Seleccione Política de confianza personalizada, pegue la siguiente política y seleccione Siguiente.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Busca la
MyFineTuningDataAccess
política que creaste, selecciona la casilla de verificación y selecciona Siguiente. -
Asigne un nombre al rol
MyCustomizationRole
y seleccióneloCreate 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" } ] }
-
Crea otro archivo llamado
MyFineTuningDataAccess.json
y pega la siguiente política en él, sustituyendo${training-bucket}
y${output-bucket}
por los nombres de tus buckets.{ "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 un terminal, navegue hasta la carpeta que contiene las políticas que ha creado.
-
CreateRoleSolicita la creación de un rol de IAM llamado
MyCustomizationRole
y adjunta la política deBedrockTrust.json
confianza que creaste.aws iam create-role \ --role-name MyCustomizationRole \ --assume-role-policy-document file://BedrockTrust.json
-
CreatePolicySolicita crear la política de acceso a los datos de S3 con el
MyFineTuningDataAccess.json
archivo que has creado. La respuesta devuelve unArn
para la política.aws iam create-policy \ --policy-name MyFineTuningDataAccess \ --policy-document file://myFineTuningDataAccess.json
-
Realice una AttachRolePolicysolicitud para adjuntar la política de acceso a datos de S3 a su función, sustituyéndola por el ARN en la respuesta del paso anterior:
policy-arn
aws iam attach-role-policy \ --role-name MyCustomizationRole \ --policy-arn
${policy-arn}
-
- Python
-
-
Ejecute el siguiente código para realizar una CreateRolesolicitud de creación de un rol de IAM
MyCustomizationRole
y para realizar una CreatePolicysolicitud de creación de una política de acceso a datos de S3 denominada.MyFineTuningDataAccess
Para la política de acceso a datos de S3, sustituya${training-bucket}
y por los nombres${output-bucket}
de los 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}
/*" ] } ] }) ) -
En la respuesta se devuelve un
Arn
. Ejecuta el siguiente fragmento de código para realizar una AttachRolePolicysolicitud y sustitúyelo por el${policy-arn}
devuelto.Arn
iam.attach_role_policy( RoleName="MyCustomizationRole", PolicyArn="
${policy-arn}
" )
-
-
Seleccione un idioma para ver ejemplos de código para llamar a las operaciones de la API de personalización de modelos.
- CLI
-
En primer lugar, crea un archivo de texto llamado.
FineTuningData.json
Copia el código JSON que aparece a continuación en el archivo de texto, sustituyendo${training-bucket}
y por${output-bucket}
los nombres de los 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
una terminal y ejecute el siguiente comando en la línea de comandos,${your-customization-role-arn}
sustituyéndolo por el rol de personalización del modelo 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=.0001,learningRateWarmupSteps=0 \ --cli-input-json file://FineTuningData.jsonLa respuesta devuelve un
jobArn
. El trabajo puede tardar unos minutos en completarse. Puede comprobar su estado con el siguiente comando.aws bedrock get-model-customization-job \ --job-identifier "
jobArn
"Cuando el
status
seaCOMPLETE
, podrá vertrainingMetrics
en la respuesta. Para descargar los artefactos a la carpeta actual, ejecute el siguiente comando yaet.et-bucket
sustitúyalos por el nombre del bucket de salida yjobId
por el identificador 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 el modelo personalizado con el siguiente comando.
nota
Se le cobrará por hora por esta compra. Use 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
. Debe esperar unos minutos a que se cree el rendimiento aprovisionado. Para comprobar el estado, proporcione el nombre o el ARN del modelo aprovisionado comoprovisioned-model-id
en el siguiente comando.aws bedrock get-provisioned-model-throughput \ --provisioned-model-id
${provisioned-model-arn}
Si el
status
esInService
, puede ejecutar una inferencia con su modelo personalizado con el siguiente comando. Debe proporcionar el ARN del modelo aprovisionado comomodel-id
. El resultado se graba en un archivo con el nombreoutput.txt
de 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 enviar un trabajo de afinación.
${your-customization-role-arn}
Sustitúyalo por el ARN del depósitoMyCustomizationRole
que configuró y${training-bucket}
sustituyó y por los nombres de sus${output-bucket}
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": ".0001", "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
. El trabajo puede tardar unos minutos en completarse. 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 puede seguir los pasos que se indican en Descarga de objetos para descargar las métricas.Adquiera un rendimiento aprovisionado sin compromiso para el 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
. Debe esperar unos minutos a que se cree el rendimiento aprovisionado. Para comprobar el estado, proporcione el nombre o el ARN del modelo aprovisionado comoprovisionedModelId
en el siguiente comando.bedrock.get_provisioned_model_throughput(provisionedModelId=provisionedModelArn)
Si el
status
esInService
, puede ejecutar una inferencia con su modelo personalizado con el siguiente comando. Debe proporcionar el ARN del modelo aprovisionado comomodelId
.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()