,

Amazon Bedrock Model Distillation, End to End (AWS Gen AI Series, Part 17)

Amazon Bedrock Model Distillation trains a small student model to answer like a big teacher for a narrow task. Here is how the job runs, which model pairs are allowed, and why Provisioned Throughput, not the training, decides the cost.

AWS Gen AI Series · Part 17 of 30

My first Bedrock distillation job finished clean. Green status, a shiny custom model ID, and then I tried to call it on demand and got an error. Distilled models do not run on the shared on demand pool. You host them on Provisioned Throughput, and that one fact changes the whole economics of the feature. So before we get to teachers and students, hold onto this: the training is the easy part, the hosting is the decision.

Who this is for: You have shipped a Bedrock app, you have read Part 16 on fine-tuning, and you want a small model that answers like a big one for a narrow task. You should already know what a prompt dataset is and roughly what Provisioned Throughput costs from Part 6. No prior distillation experience assumed.
Key takeaways: Distillation trains a small student model on responses generated by a large teacher, so the student answers a narrow task at roughly the big model’s quality. AWS quotes up to 5x faster and up to 75% cheaper per token, with under 2% accuracy loss for cases like retrieval augmented question answering. Teacher and student must come from the same provider family. The distilled model is a custom model, so you can only serve it on Provisioned Throughput, billed by the hour. That hourly commitment, not the training, decides whether distillation saves you money.

Teacher, student, and synthetic data

Distillation is a way to move the behavior of a big model into a small one for a specific job. You pick a teacher, a large model whose answers you like. You pick a student, a small model from the same family that you want to end up with. You hand Bedrock a set of prompts that look like your real traffic. Bedrock runs those prompts through the teacher, collects the answers, and uses them as labeled training data to fine tune the student. The output is a custom student model that has been pulled toward the teacher’s behavior on your kind of input.

The part people miss is the word synthetic. You are not just replaying teacher answers one for one. Bedrock applies data synthesis on top: it can expand your prompt set with similar prompts, and when you give it prompt and response pairs as golden examples, it generates more high quality responses in that style. That is why a few thousand real prompts can become a fuller training set. It is also why the teacher’s inference bill shows up in your costs, because every synthetic answer is a real teacher call.

Compared with the plain fine tuning from Part 16, the difference is where the labels come from. In ordinary fine tuning you supply the correct answers. In distillation the teacher supplies them. If you do not have thousands of hand labeled answers but you do have a big model that already does the task well, distillation is the cheaper path to a training set.

How a distillation job flowsPrompts to teacher, teacher answers plus synthetic data fine-tune the studentYour promptsup to 15KTeacher modelgenerates answersFine-tune studentplus synthetic dataDistilled modelcustom weightsProvisionedThroughputhosting, billed hourly
The training pipeline ends at a custom model that only serves on Provisioned Throughput.

When distillation beats fine-tuning and RAG

Distillation is not the first tool you reach for. It sits at the end of a short ladder. Start with a good prompt. If the answers are wrong because the model lacks your facts, add retrieval, which is Knowledge Bases from Part 12. If the answers are wrong because the model does not follow your format or tone, plain fine tuning fixes that with your own labels. You reach for distillation in one specific situation: a big model already does the task well, but it is too slow or too expensive to run at your volume, and you want a small model to match it.

The honest test is whether the small base model is already close. Distillation narrows a gap, it does not perform miracles. If Nova Micro out of the box gets you 70% of the way and the teacher gets 95%, distillation can pull the student most of the rest of the way for that narrow task. If the small model is at 30%, you are asking too much and you should either keep the big model or rethink the task. Try the cheap student on your eval set before you spend a dollar on a job.

One more filter. Distillation makes sense when the task is stable and high volume. You are committing to hosting a custom model on reserved capacity, so the traffic has to justify keeping that capacity warm. For a task you run a few hundred times a day, the math rarely works, and I will show you why in the break-even section.

Which teacher and student pairs Bedrock allows

You cannot mix providers. The teacher and student must come from the same model family, because the student inherits the teacher’s tokenizer and architecture assumptions. Amazon to Amazon, Anthropic to Anthropic, Meta to Meta. Here are the pairs that were supported at general availability, which landed in May 2025.

ProviderTeacherStudentJob region
AmazonNova PremierNova Pro, Lite, Microus-east-1
AnthropicClaude 3.5 Sonnet v2Claude 3 Haikuus-west-2
MetaLlama 3.1 405B, Llama 3.3 70BLlama 3.1 70B or 8B, Llama 3.2 1B or 3Bus-west-2

Two region facts bite people. The Amazon pairs run the job in us-east-1 and you must buy Provisioned Throughput in us-east-1, and Nova custom models cannot be copied to another Region. The Claude and Llama jobs run in us-west-2, but there you can copy the distilled model to another Region and then buy throughput where you need it. If your workload has to live in Frankfurt or Sydney, that copy rule decides which family you can even use. Check the current support list before you commit, since AWS adds pairs over time. [VERIFY exact student list for Claude 3.5 Sonnet v2 beyond Claude 3 Haiku]

Gotcha: The teacher you distill from is not always the teacher you would pick for production. Nova Premier is a strong teacher but you never serve it, you serve the distilled Nova Micro. So your accuracy ceiling is set by a model you will not pay to run at scale. Evaluate the teacher on your task first, because the student cannot beat it.

How a distillation job runs

Under the hood a distillation job is a model customization job. You submit it with the same control plane call as fine tuning, CreateModelCustomizationJob, with the customization type set to distillation and a config that names the teacher. Bedrock generates teacher responses, synthesizes extra data up to a cap of 15,000 prompt and response pairs, fine tunes the student, and writes the custom model plus metrics to your output S3 bucket. You need an IAM role that Bedrock can assume to read your input and write your output, the same pattern as any customization job.

You do not tune the usual knobs here. There are no epochs or learning rate to set the way you might for plain fine tuning, because Bedrock manages the training recipe for distillation. You control the inputs and the models, not the optimizer. That is a feature, not a limitation, for most teams, but it means you cannot rescue a bad result by twiddling hyperparameters. If the eval is weak, the fix is better prompts or a different teacher, not a knob.

aws bedrock create-model-customization-job 
  --job-name distill-support-nova-micro 
  --customization-type DISTILLATION 
  --base-model-identifier amazon.nova-micro-v1:0 
  --role-arn arn:aws:iam::111122223333:role/BedrockDistillRole 
  --output-data-config s3Uri=s3://my-bkt/distill-out/ 
  --training-data-config s3Uri=s3://my-bkt/prompts.jsonl 
  --custom-model-name support-nova-micro-distilled 
  --customization-config '{"distillationConfig":{"teacherModelConfig":{"teacherModelIdentifier":"amazon.nova-premier-v1:0","maxResponseLengthForInference":1024}}}' 
  --region us-east-1

Expected output: the call returns a jobArn. Track it with get-model-customization-job until status reads Completed, then the custom model appears under your custom models.

Failure mode: the most common early failure is an IAM role that cannot read the input bucket or write the output prefix, which surfaces as a Failed status with an access denied message, not an API error at submit time. The nested field names above are the shape you pass; confirm them against the current API reference before you script this. [VERIFY exact customizationConfig field names]

Two ways to supply training data

You have two front doors for the prompts. The first is a JSONL file in S3, one prompt per line, optionally with a golden response. That is the clean path when you are building a new task from scratch. The second is more interesting for anyone already in production: Bedrock can read your historical invocation logs and use real traffic as the distillation input. If you have model invocation logging turned on, the prompts your users already sent become your training set, filtered by metadata you attach to requests.

I reach for invocation logs when I have been running the teacher in production for a while. The distribution is honest, because it is literally what users asked. A hand written prompt file always drifts toward the cases you imagined rather than the ones you got. The trade is privacy and governance: those logs may hold customer data, so the same residency and KMS rules from Part 10 apply to the training set, not just the runtime. Either way the cap is 15,000 pairs, so more is not always the goal. A few thousand representative prompts usually beat a noisy dump.

Teacher vs distilled student, indexedTeacher baseline 100. Lower is better for cost and latency, higher for accuracy100500Cost/tokenLatencyAccuracyTeacherDistilled252098
AWS quotes up to 75% lower cost and up to 5x faster with under 2% accuracy loss on cases like RAG. Your numbers vary by task.

Provisioned throughput, the hidden bill

Here is the fact that sank my first project plan. A distilled model is a custom model, and custom models do not run on the on demand token pool. To serve one you buy Provisioned Throughput, which is capacity measured in Model Units and billed by the hour whether or not a single request comes in. The per hour rate matches the base student model. So the 75% per token saving is real, but it only shows up if you keep the reserved capacity busy enough that the hourly cost divided by your request count lands below the on demand price of the small base model.

Read that again, because it inverts the usual pitch. Distillation does not automatically save money. It saves money at volume. At low or spiky volume you are paying for idle Model Units, and calling the plain small base model on demand is cheaper. The three cost components below are the whole story.

Cost componentWhen you payPriced as
Synthetic data generationOnce, during the jobTeacher on-demand token rate
Student trainingOnce, during the jobCustomization training rate
HostingEvery hour, until you delete itProvisioned Throughput per Model Unit

A break-even you should run first

Before any job, model the crossover. On demand cost rises with every request. Provisioned Throughput is a flat monthly floor once you commit a Model Unit, roughly the hourly rate times about 730 hours a month, and it barely moves as traffic grows until you saturate the unit. Plot both and you get one intersection. Below it, on demand wins. Above it, the distilled model on reserved capacity wins. Your only job is to honestly estimate where your steady traffic sits relative to that line.

Break-even: on-demand vs provisioned throughputIllustrative. Flat line height depends on your Model Unit rateMonthly costRequests per daylowmediumhighDistilled on PT, flat floorOn-demand small modelcrossoveron-demand cheaperdistilled cheaper
Below the crossover the reserved capacity sits idle and costs more per request. Find your steady traffic before you commit.

Worked example

Say a support classifier runs the teacher at 2 million tokens a day. Move it to a distilled student and per token cost drops about 75%, so the token bill for that traffic falls to roughly a quarter. But you now hold one Model Unit of Provisioned Throughput, a fixed monthly floor of the hourly rate times about 730 hours. If that floor is larger than your entire old on-demand token bill, distillation loses money no matter how good the accuracy is. The classifier only wins once daily volume is high enough that the reserved unit runs near full and the saved token cost clears the hourly floor. Model your own token rate against the current Provisioned Throughput price before you run the job. [VERIFY current Model Unit hourly rate for the chosen student]

Where distillation goes wrong in production

Three failures show up again and again. The first is the idle unit I keep hammering: teams distill a low volume task, forget the hourly floor, and get a bigger bill than before. The second is a weak teacher. If your teacher only reaches 80% on the eval, the student will land under that, so a distilled model can quietly cap your quality lower than you expected. Test the teacher on your real eval set first, and treat its score as your ceiling.

The third is drift. A distilled student is frozen to the task it learned. When your traffic shifts, a new product line, a new question shape, the student was never trained on it and degrades faster than the general purpose base model would. Plan to re-distill on fresh invocation logs on a schedule, and keep the eval set current so you notice the day the student falls behind. Distillation is not a one time job, it is a small recurring pipeline.

Disclaimer: A distillation job spends real money on teacher inference and creates a Provisioned Throughput commitment that bills hourly until you delete it. Run it in a non-production account first, confirm the throughput price for your student model, and set a budget alarm before you submit anything at scale.

Buy the distillation only when you can keep it busy

My rule is simple. Distill when three things are all true: the teacher already does the task well on your eval, the small base model is already close, and the traffic is high and steady enough to keep a Model Unit warm. Miss any one and you are better off calling the base model on demand or staying on the teacher. Distillation is a volume play dressed up as an accuracy feature, and the volume half is where projects fail.

Next in the series we move from customizing single models to giving models a place to learn from your own examples at scale, with SageMaker JumpStart in Part 18. If you build across clouds, the same idea shows up as distillation and stored completions on Azure and as tuning on Vertex, and the vendor-neutral view of why data, not model size, decides quality is the principle behind every distillation that works. This week, before you plan a job, pull one day of invocation logs, count the tokens, and multiply the small model on-demand rate by your monthly volume. If that number is smaller than one Model Unit of Provisioned Throughput, you have your answer, and you just saved yourself a job.

AWS Gen AI Series · Part 17 of 30
« Previous: Part 16  |  Guide  |  Next: Part 18 »

References

Customize a model with distillation in Amazon Bedrock
Amazon Bedrock Model Distillation is now generally available
Supported models and Regions for Model Distillation
Amazon Bedrock pricing

About The Author


Discover more from Journal of Intelligent Infrastructure – By Dr Pranay Jha

Subscribe to get the latest posts sent to your email.

Leave a Reply

Your email address will not be published. Required fields are marked *

Architect’s Toolkit

About the Author

Dr. Pranay Jha is a Cloud and AI Consultant with 18+ years of experience in hybrid cloud, virtualization, and enterprise infrastructure transformation. He specializes in VMware technologies, multi-cloud strategy, and Generative AI solutions. He holds a PhD in Computer Applications with research focused on Cloud and AI, has published multiple research papers, and has been a VMware vExpert since 2016 and a VMUG Community Leader.

Discover more from Journal of Intelligent Infrastructure - By Dr Pranay Jha

Subscribe now to keep reading and get access to the full archive.

Continue reading