GUIDE · AMAZON BEDROCK · FINE-TUNING
How to fine-tune Amazon Nova on Amazon Bedrock for text classification
A step-by-step Amazon Bedrock fine-tuning tutorial for classification: the console way, with JSONL, IAM and deployment, and the spreadsheet way with StayCharted.
From your examples to your own Nova model
This guide shows two ways to fine-tune an Amazon Nova model on your own examples, so it categorizes records the way your team does:
- Part 1, the console way: every step in Amazon Bedrock yourself. Good if you want to understand exactly what happens, or you're building your own pipeline.
- Part 2, the spreadsheet way: StayCharted does every step of Part 1 for you, in your own AWS account. No JSON, no IAM console, no code.
Both end in the same place: a custom Nova model in your AWS account that answers pay-as-you-go.
Before you start
- An AWS account where you can use Amazon Bedrock in US East (N. Virginia), us-east-1, the region where Bedrock fine-tunes Amazon Nova.
- Access to the Nova model you'll tune (Micro, Lite or Pro) in that region.
- Labelled examples: past records (tickets, emails, descriptions) with the category your team gave each one. A few hundred is a start; more for many categories or fine distinctions.
- A way to test: keep some examples aside that the model never trains on.
Which Nova? Start with Nova Micro: it's the cheapest to train and to ask, and for short records with clear categories it's often enough. Try Lite or Pro if the categories depend on longer or subtler text.
Part 1: Fine-tune in the Bedrock console
Step 1. Write the training file (JSONL)
One example per line, in Bedrock's conversation format. Each line has the same system prompt, the record as the user's message, and the category as the assistant's reply:
Show JSON example
{"schemaVersion": "bedrock-conversation-2024", "system": [{"text": "Categorize the support ticket. Answer with one of: Billing, Technical, Account, Sales."}], "messages": [{"role": "user", "content": [{"text": "I was charged twice for my subscription this month."}]}, {"role": "assistant", "content": [{"text": "Billing"}]}]}
- Every line identical in form, with only the record and the category changing. One malformed line fails the whole job.
- Use the same system prompt later when you ask the model. AWS is explicit that the instructions trained on must match the instructions asked with.
- Make a separate validation file for Nova Micro, Lite and Pro (for example 10% of the training examples), and keep a test set apart from both.
Step 2. Put the files in S3
Create a private bucket in us-east-1 and upload the training and validation files. Note
the S3 addresses (s3://your-bucket/train.jsonl).
Step 3. Give Bedrock a service role
Bedrock needs an IAM role it can assume to read your files and write the job's output. In the fine-tuning form, the console can create one for you, or you can create your own ("service role for model customization" in the Bedrock docs). If your bucket uses a KMS key, the role needs permission to use it.
Step 4. Start the fine-tuning job
In the Bedrock console: Tune → Custom models → Customize model → Create fine-tuning job. Choose:
- Source model: Amazon Nova Micro (or Lite, Pro).
- Training and validation data: the S3 addresses from step 2.
- Hyperparameters: epochs 1 to 5 (default 2); learning rate and warm-up steps can start at their defaults.
- Output: an S3 location for the job's metrics.
- Service role: from step 3.
Start the job and wait. A job of a few thousand short examples typically runs for an hour or two.
Step 5. Deploy it for on-demand answers
When the job finishes, open the custom model and choose Set up inference → Deploy for on-demand, give the deployment a name, and wait until its status is Active. Nova custom models answer pay-as-you-go at the applicable Nova custom-model inference rate; you don't need Provisioned Throughput.
Step 6. Test it
Call the model for every example in your test set, using the deployment's ARN as the model ID and the same system prompt as in training. Compare its answers with your team's, and work out how often it's right per category, not only overall.
Step 7. Decide what to trust
Bedrock gives you the answer, not a probability. Decide which answers a person checks: for example, every answer in a category the model often gets wrong, or anything that doesn't match one of your categories exactly.
That's the whole loop. Repeat it whenever your categories or your team's decisions change.
Part 2: Fine-tune from a spreadsheet with StayCharted
StayCharted does every step of Part 1 in your own AWS account. You need a StayCharted workspace and permission to create a CloudFormation stack in your AWS account.
Step 1. Connect your AWS account (once)
- In StayCharted, go to Settings → AI platforms → Amazon Bedrock.
- Tick Also train models here.
- Launch the CloudFormation template StayCharted gives you, in US East (N. Virginia), and tick the box that says it creates IAM resources with custom names.
- When the stack is created, paste the role ARN it shows back into StayCharted.
The template replaces Part 1's steps 2 and 3: it makes a private, encrypted bucket for training files (with a seven-day lifecycle rule as a cleanup fallback), Bedrock's service role to read it, and a role StayCharted uses with an external ID. There are no access keys to create or store.
Step 2. Upload your examples
Upload a spreadsheet (CSV or Excel) of past records with the category your team gave each one, and choose which columns the model reads and which is the answer. StayCharted checks the data before training: rows that look like they belong in another category, the same text under two categories, near-duplicates.
Step 3. Choose Bedrock and a Nova base
Choose Train a model on your examples, then under where it trains, Your servers — Amazon Bedrock, and Amazon Nova Micro, Lite or Pro. Start training.
Step 4. Let it run
StayCharted does Part 1's steps 1 and 4 to 6:
- holds back test rows, which never go into training;
- writes the JSONL, with the same prompt it will ask with;
- puts it in your bucket and starts Bedrock's fine-tuning in your account;
- deletes the training file when the job ends;
- deploys the tuned model for on-demand answers;
- tests it on the held-out rows.
You can close the browser; the model page shows where it's up to.
Step 5. Read the report
The report shows how often the model is right for each category and the examples it got wrong, the same report as every StayCharted model. Publish the model when you're happy with it.
Step 6. Use it
The tuned model answers from your Bedrock, wherever StayCharted models are used:
- fill a spreadsheet of new records;
- the API (one call per record, or many at once);
- Zapier, Power Automate and Google Sheets;
- Claude and ChatGPT through StayCharted's connector.
StayCharted replaces Part 1's step 7 too. Bedrock gives no probability, so StayCharted estimates how sure each answer is from how your team labelled the most similar past examples. Answers below a high bar wait in the Review Queue on eligible plans, and a reviewer's corrections go into the next version when you retrain.
Using the model: who pays for what
| Billed by | |
|---|---|
| Fine-tuning (per token trained on) | AWS, to your account |
| Storing the custom model (per month) | AWS, to your account |
| Answers (per token, current Nova rate) | AWS, to your account |
| Rows read and answered by StayCharted | Your StayCharted plan, like any model |
Each retrain makes a new custom model in your account, with its own storage fee. Delete versions you no longer need in the Bedrock console under Custom models.
If something goes wrong
| You see | What to do |
|---|---|
| The stack won't create | Make sure you're in us-east-1 and ticked the box for IAM resources with custom names. |
| "Bedrock fine-tunes Nova models in us-east-1 only" | Connect a Bedrock account in us-east-1 for training. |
| "Not set up for training" | In Settings → AI platforms, tick Also train models here and update the stack. |
| The job fails in Bedrock | Check the model is enabled in us-east-1, and your account's fine-tuning quotas. In Part 1, also check every JSONL line. |
| "Training on your own Amazon Bedrock is for text models" | Use a picture model for photos. |
AWS sources and current pricing
Common questions about Amazon Bedrock fine-tuning
How long does Bedrock fine-tuning take?
Usually an hour or more for a classification dataset; larger datasets and bigger models take longer.
How many examples do I need?
A few hundred to start, with enough of each category. Test on examples the model hasn't seen to know whether it's enough.
Can I fine-tune Claude or Llama in Bedrock instead?
Bedrock fine-tunes some other models in other regions (for example Meta Llama models in us-west-2). StayCharted trains on Amazon Nova Micro, Lite and Pro in us-east-1.
Where does my data go?
In Part 2, the training file goes to a bucket in your account and is deleted when training ends; the tuned model stays in your account and answers there. StayCharted keeps your examples to build the file and to test the model, as it does for any model.
Can I use the tuned model outside StayCharted?
It's a custom model in your own Bedrock, so yes: call its deployment ARN with the same prompt. StayCharted's answers, review flags and Review Queue apply when you ask through StayCharted.