Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sampel kode untuk kustomisasi model
Contoh kode berikut menunjukkan cara menyiapkan kumpulan data dasar, mengatur izin, membuat model khusus, melihat file keluaran, membeli throughput untuk model, dan menjalankan inferensi pada model. Anda dapat memodifikasi cuplikan kode ini ke kasus penggunaan khusus Anda.
-
Siapkan dataset pelatihan.
-
Buat file dataset pelatihan yang berisi satu baris berikut dan beri nama
train.jsonl
.{"prompt": "what is AWS", "completion": "it's Amazon Web Services"}
-
Buat bucket S3 untuk data latihan Anda dan satu lagi untuk data keluaran Anda (nama harus unik).
-
Unggah
train.jsonl
ke dalam ember data pelatihan.
-
-
Buat kebijakan untuk mengakses pelatihan Anda dan lampirkan ke IAM peran dengan hubungan kepercayaan Amazon Bedrock. Pilih tab yang sesuai dengan metode pilihan Anda dan ikuti langkah-langkahnya:
- Console
-
-
Buat kebijakan S3.
-
Arahkan ke IAM konsol di https://console.aws.amazon.com/iam
dan pilih Kebijakan dari panel navigasi kiri. -
Pilih Buat kebijakan dan kemudian pilih JSONuntuk membuka Editor kebijakan.
-
Tempel kebijakan berikut, ganti
${training-bucket}
and${output-bucket}
dengan nama bucket Anda, lalu pilih Next.{ "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}
/*" ] } ] } -
Beri nama kebijakan
MyFineTuningDataAccess
dan pilih Buat kebijakan.
-
-
Buat IAM peran dan lampirkan kebijakan.
-
Dari panel navigasi kiri, pilih Peran, lalu pilih Buat peran.
-
Pilih Kebijakan kepercayaan khusus, tempel kebijakan berikut, dan pilih Berikutnya.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Cari
MyFineTuningDataAccess
kebijakan yang Anda buat, pilih kotak centang, dan pilih Berikutnya. -
Beri nama peran
MyCustomizationRole
dan pilihCreate role
.
-
-
- CLI
-
-
Buat file bernama
BedrockTrust.json
dan tempelkan kebijakan berikut ke dalamnya.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Buat file lain yang disebut
MyFineTuningDataAccess.json
dan tempelkan kebijakan berikut ke dalamnya, ganti${training-bucket}
and${output-bucket}
dengan nama ember Anda.{ "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}
/*" ] } ] } -
Di terminal, navigasikan ke folder yang berisi kebijakan yang Anda buat.
-
Buat CreateRolepermintaan untuk membuat IAM peran yang disebut
MyCustomizationRole
dan lampirkanBedrockTrust.json
kebijakan kepercayaan yang Anda buat.aws iam create-role \ --role-name MyCustomizationRole \ --assume-role-policy-document file://BedrockTrust.json
-
Buat CreatePolicypermintaan untuk membuat kebijakan akses data S3 dengan
MyFineTuningDataAccess.json
file yang Anda buat. Respons mengembalikanArn
untuk kebijakan.aws iam create-policy \ --policy-name MyFineTuningDataAccess \ --policy-document file://myFineTuningDataAccess.json
-
Buat AttachRolePolicypermintaan untuk melampirkan kebijakan akses data S3 ke peran Anda, ganti
policy-arn
dengan respons ARN di langkah sebelumnya:aws iam attach-role-policy \ --role-name MyCustomizationRole \ --policy-arn
${policy-arn}
-
- Python
-
-
Jalankan kode berikut untuk membuat CreateRolepermintaan untuk membuat IAM peran yang disebut
MyCustomizationRole
dan untuk membuat CreatePolicypermintaan untuk membuat kebijakan akses data S3 yang disebutMyFineTuningDataAccess
. Untuk kebijakan akses data S3, ganti${training-bucket}
and${output-bucket}
dengan nama bucket S3 Anda.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}
/*" ] } ] }) ) -
An
Arn
dikembalikan sebagai tanggapan. Jalankan cuplikan kode berikut untuk membuat AttachRolePolicypermintaan, menggantikan${policy-arn}
dengan yang dikembalikanArn
.iam.attach_role_policy( RoleName="MyCustomizationRole", PolicyArn="
${policy-arn}
" )
-
-
Pilih bahasa untuk melihat contoh kode untuk memanggil API operasi kustomisasi model.
- CLI
-
Pertama, buat file teks bernama
FineTuningData.json
. Salin JSON kode dari bawah ke dalam file teks, ganti${training-bucket}
and${output-bucket}
dengan nama bucket S3 Anda.{ "trainingDataConfig": { "s3Uri": "s3://
${training-bucket}
/train.jsonl" }, "outputDataConfig": { "s3Uri": "s3://${output-bucket}
" } }Untuk mengirimkan pekerjaan penyesuaian model, navigasikan ke folder yang berisi
FineTuningData.json
di terminal dan jalankan perintah berikut di baris perintah, menggantikan${your-customization-role-arn}
dengan peran kustomisasi model yang Anda atur.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.jsonRespons mengembalikan
jobArn
. Biarkan pekerjaan itu beberapa saat untuk diselesaikan. Anda dapat memeriksa statusnya dengan perintah berikut.aws bedrock get-model-customization-job \ --job-identifier "
jobArn
"Ketika
status
adaCOMPLETE
, Anda dapat melihattrainingMetrics
dalam respon. Anda dapat mengunduh artefak ke folder saat ini dengan menjalankan perintah berikut, menggantikanaet.et-bucket
dengan nama bucket keluaran Anda danjobId
dengan ID pekerjaan kustomisasi (urutan mengikuti garis miring terakhir dijobArn
).aws s3 cp s3://
${output-bucket}
/model-customization-job-jobId
. --recursiveBeli Throughput Penyediaan tanpa komitmen untuk model kustom Anda dengan perintah berikut.
catatan
Anda akan dikenakan biaya per jam untuk pembelian ini. Gunakan konsol untuk melihat perkiraan harga untuk berbagai opsi.
aws bedrock create-provisioned-model-throughput \ --model-id MyCustomModel \ --provisioned-model-name MyProvisionedCustomModel \ --model-units 1
Respons mengembalikan a
provisionedModelArn
. Memungkinkan Provisioned Throughput beberapa waktu untuk dibuat. Untuk memeriksa statusnya, berikan nama atau ARN model yang disediakan sepertiprovisioned-model-id
pada perintah berikut.aws bedrock get-provisioned-model-throughput \ --provisioned-model-id
${provisioned-model-arn}
Saat
status
adaInService
, Anda dapat menjalankan inferensi dengan model kustom Anda dengan perintah berikut. Anda harus memberikan ARN model yang disediakan sebagai.model-id
Output ditulis ke file bernamaoutput.txt
di folder Anda saat ini.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
-
Jalankan cuplikan kode berikut untuk mengirimkan pekerjaan fine-tuning. Ganti
${your-customization-role-arn}
ARNdenganMyCustomizationRole
yang Anda atur dan ganti${training-bucket}
and${output-bucket}
dengan nama bucket S3 Anda.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')Respons mengembalikan
jobArn
. Biarkan pekerjaan itu beberapa saat untuk diselesaikan. Anda dapat memeriksa statusnya dengan perintah berikut.bedrock.get_model_customization_job(jobIdentifier=jobArn).get('status')
Ketika
status
adaCOMPLETE
, Anda dapat melihattrainingMetrics
dalam GetModelCustomizationJobrespon. Anda juga dapat mengikuti langkah-langkah di Mengunduh objek untuk mengunduh metrik.Beli Throughput Penyediaan tanpa komitmen untuk model kustom Anda dengan perintah berikut.
response_pt = bedrock.create_provisioned_model_throughput( modelId="MyCustomModel", provisionedModelName="MyProvisionedCustomModel", modelUnits="1" ) provisionedModelArn = response_pt.get('provisionedModelArn')
Respons mengembalikan a
provisionedModelArn
. Memungkinkan Provisioned Throughput beberapa waktu untuk dibuat. Untuk memeriksa statusnya, berikan nama atau ARN model yang disediakan sepertiprovisionedModelId
pada perintah berikut.bedrock.get_provisioned_model_throughput(provisionedModelId=provisionedModelArn)
Saat
status
adaInService
, Anda dapat menjalankan inferensi dengan model kustom Anda dengan perintah berikut. Anda harus memberikan ARN model yang disediakan sebagai.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()