As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Amostras de código para personalização do modelo
Os exemplos de código a seguir mostram como preparar um conjunto de dados básico, configurar permissões, criar um modelo personalizado, visualizar os arquivos de saída, comprar a taxa de transferência do modelo e executar inferências sobre o modelo. Você pode modificar esses trechos de código de acordo com seu caso de uso específico.
-
Prepare o conjunto de dados de treinamento.
-
Crie um arquivo de conjunto de dados de treinamento contendo a linha a seguir e dê um nome a ela
train.jsonl
.{"prompt": "what is AWS", "completion": "it's Amazon Web Services"}
-
Crie um bucket S3 para seus dados de treinamento e outro para seus dados de saída (os nomes devem ser exclusivos).
-
Carregar
train.jsonl
no repositório de dados de treinamento.
-
-
Crie uma política para acessar seu treinamento e vincule-a a uma IAM função com uma relação de confiança da Amazon Bedrock. Selecione a guia correspondente ao seu método de escolha e siga as etapas:
- Console
-
-
Crie a política do S3.
-
Navegue até o IAM console em https://console.aws.amazon.com/iam
e escolha Políticas no painel de navegação esquerdo. -
Selecione Criar política e, em seguida, escolha JSONabrir o editor de políticas.
-
Cole a seguinte política, substituindo
${training-bucket}
e${output-bucket}
com os nomes dos seus buckets e, em seguida, selecione Avançar.{ "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}
/*" ] } ] } -
Nomeie a política
MyFineTuningDataAccess
e selecione Criar política.
-
-
Crie uma IAM função e anexe a política.
-
No painel de navegação esquerdo, escolha Funções e, em seguida, selecione Criar função.
-
Selecione Política de confiança personalizada, cole a política a seguir e selecione Avançar.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Pesquise o
MyFineTuningDataAccess
política que você criou, marque a caixa de seleção e escolha Avançar. -
Nomeie a função
MyCustomizationRole
e selecioneCreate role
.
-
-
- CLI
-
-
Crie um arquivo chamado
BedrockTrust.json
e cole a seguinte política nela.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Crie outro arquivo chamado
MyFineTuningDataAccess.json
e cole a seguinte política nela, substituindo${training-bucket}
e${output-bucket}
com os nomes dos seus baldes.{ "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}
/*" ] } ] } -
Em um terminal, navegue até a pasta que contém as políticas que você criou.
-
Faça uma CreateRolesolicitação para criar uma IAM função chamada
MyCustomizationRole
e anexe oBedrockTrust.json
política de confiança que você criou.aws iam create-role \ --role-name MyCustomizationRole \ --assume-role-policy-document file://BedrockTrust.json
-
Faça uma CreatePolicysolicitação para criar a política de acesso a dados do S3 com o
MyFineTuningDataAccess.json
arquivo que você criou. A resposta retorna umArn
para a política.aws iam create-policy \ --policy-name MyFineTuningDataAccess \ --policy-document file://myFineTuningDataAccess.json
-
Faça uma AttachRolePolicysolicitação para anexar a política de acesso a dados do S3 à sua função, substituindo-a
policy-arn
pela ARN na resposta da etapa anterior:aws iam attach-role-policy \ --role-name MyCustomizationRole \ --policy-arn
${policy-arn}
-
- Python
-
-
Execute o código a seguir para fazer uma CreateRolesolicitação para criar uma IAM função chamada
MyCustomizationRole
e fazer uma CreatePolicysolicitação para criar uma política de acesso a dados do S3 chamadaMyFineTuningDataAccess
. Para a política de acesso a dados do S3, substitua${training-bucket}
e${output-bucket}
com os nomes dos seus buckets do 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}
/*" ] } ] }) ) -
Um
Arn
é retornado na resposta. Execute o seguinte trecho de código para fazer uma AttachRolePolicysolicitação, substituindo${policy-arn}
com os devolvidosArn
.iam.attach_role_policy( RoleName="MyCustomizationRole", PolicyArn="
${policy-arn}
" )
-
-
Selecione um idioma para ver exemplos de código para chamar as API operações de personalização do modelo.
- CLI
-
Primeiro, crie um arquivo de texto chamado
FineTuningData.json
. Copie o JSON código abaixo para o arquivo de texto, substituindo${training-bucket}
e${output-bucket}
com os nomes dos seus buckets do S3.{ "trainingDataConfig": { "s3Uri": "s3://
${training-bucket}
/train.jsonl" }, "outputDataConfig": { "s3Uri": "s3://${output-bucket}
" } }Para enviar um trabalho de personalização de modelo, navegue até a pasta que contém
FineTuningData.json
em um terminal e execute o seguinte comando na linha de comando, substituindo${your-customization-role-arn}
com a função de personalização do modelo que você configurou.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.jsonA resposta retorna um
jobArn
. Aguarde algum tempo para que o trabalho seja concluído. Você pode verificar seu status com o comando a seguir.aws bedrock get-model-customization-job \ --job-identifier "
jobArn
"Quando o
status
éCOMPLETE
, você pode ver otrainingMetrics
na resposta. Você pode baixar os artefatos para a pasta atual executando o seguinte comando, substituindoaet.et-bucket
com o nome do seu bucket de saída ejobId
com o ID do trabalho de personalização (a sequência após a última barra nojobArn
).aws s3 cp s3://
${output-bucket}
/model-customization-job-jobId
. --recursiveCompre uma taxa de transferência provisionada sem compromisso para seu modelo personalizado com o comando a seguir.
nota
Você será cobrado por hora por essa compra. Use o console para ver estimativas de preços para diferentes opções.
aws bedrock create-provisioned-model-throughput \ --model-id MyCustomModel \ --provisioned-model-name MyProvisionedCustomModel \ --model-units 1
A resposta retorna um
provisionedModelArn
. Permita que a taxa de transferência provisionada seja criada por algum tempo. Para verificar seu status, forneça o nome ou ARN o modelo provisionado conforme o comandoprovisioned-model-id
a seguir.aws bedrock get-provisioned-model-throughput \ --provisioned-model-id
${provisioned-model-arn}
Quando
status
estiverInService
, você pode executar a inferência com seu modelo personalizado com o comando a seguir. Você deve fornecer o ARN do modelo provisionado como o.model-id
A saída é gravada em um arquivo chamadooutput.txt
na sua pasta atual.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
-
Execute o seguinte trecho de código para enviar um trabalho de ajuste fino. Substituir
${your-customization-role-arn}
com o ARN doMyCustomizationRole
que você configura e substitui${training-bucket}
e${output-bucket}
com os nomes dos seus buckets do 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')A resposta retorna um
jobArn
. Aguarde algum tempo para que o trabalho seja concluído. Você pode verificar seu status com o comando a seguir.bedrock.get_model_customization_job(jobIdentifier=jobArn).get('status')
Quando o
status
éCOMPLETE
, você pode ver otrainingMetrics
na GetModelCustomizationJobresposta. Você também pode seguir as etapas em Baixar objetos para baixar as métricas.Compre uma taxa de transferência provisionada sem compromisso para seu modelo personalizado com o comando a seguir.
response_pt = bedrock.create_provisioned_model_throughput( modelId="MyCustomModel", provisionedModelName="MyProvisionedCustomModel", modelUnits="1" ) provisionedModelArn = response_pt.get('provisionedModelArn')
A resposta retorna um
provisionedModelArn
. Permita que a taxa de transferência provisionada seja criada por algum tempo. Para verificar seu status, forneça o nome ou ARN o modelo provisionado conforme o comandoprovisionedModelId
a seguir.bedrock.get_provisioned_model_throughput(provisionedModelId=provisionedModelArn)
Quando
status
estiverInService
, você pode executar a inferência com seu modelo personalizado com o comando a seguir. Você deve fornecer o ARN do modelo provisionado como o.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()