Skill 4.2.10: Monitor AI-specific cost patterns (token usage optimization, embedding computation costs, vector database storage optimization)
Task 4.2: Operating, Monitoring, and Securing ML and AI Solutions – Optimize and manage ML and AI infrastructure costs and performance
Core Concept & Objective
AI-specific cost monitoring instruments the unique cost drivers of generative AI and ML workloads: token consumption, embedding computation, and vector database storage. The goal is to attribute costs to models, teams, or applications, detect anomalies, and optimize spend without degrading performance or reliability.
Primary AWS services: Amazon CloudWatch (metrics, logs, dashboards, alarms), AWS Cost Explorer (tags, usage type), AWS Budgets (forecasted alerts), Amazon Bedrock AgentCore Observability (per-invocation agent cost), AWS X-Ray (trace cost/latency to components).
Cost Drivers & Monitoring Matrix
| Cost Driver | Billing Unit | Key Metrics to Monitor | Primary AWS Monitoring Tool |
|---|---|---|---|
| Token usage (FM inference) | Input & output tokens | InputTokens, OutputTokens, InvocationCount, CacheReadTokens, CacheWriteTokens |
CloudWatch (Bedrock metrics), Bedrock AgentCore Observability |
| Embedding computation | Tokens processed / requests | Embedding request count, tokens processed, endpoint utilization (if self-hosted) | CloudWatch (Bedrock invocation logs, SageMaker endpoint metrics) |
| Vector database storage | Storage volume, IOPS, compute/memory | Index size, vector count, query volume, latency, memory usage | CloudWatch (for OpenSearch, Aurora, Neptune, etc.) |
Exam Gotcha: Token-based workloads are not optimized by instance right-sizing. Compute-hour levers (instance family, auto scaling) do nothing for Bedrock on-demand token bills.
Token Usage Optimization – Monitoring & Levers
Monitor:
- Correlate token usage with invocation count on a dashboard: rising tokens + flat invocations = heavier prompts (fix prompts); rising tokens + rising invocations = more traffic (scale or batch).
- Track per-model, per-application, per-user token consumption using cost allocation tags and CloudWatch dimensions.
- Set AWS Budgets with forecasted alerts on token usage metrics to catch overspend early.
Optimization levers:
- Model selection: Use the smallest model that meets quality requirements (cuts cost per token).
- Prompt discipline: Trim system instructions, shorten context windows, cap
max_tokensfor responses. - Prompt caching: Cache stable prompt prefixes. Cached tokens billed at reduced rate, but cache writes may be billed higher; requires minimum prefix length; any dynamic content in the prefix invalidates the cache.
- Batch inference: Move delay-tolerant work to batch (lower cost than on-demand).
- Provisioned Throughput: For predictable high-volume inference, reserve model units at fixed hourly rate (commitment like Savings Plans).
Agent cost amplification: One user request = planning call + tool calls + synthesis call. Monitor cost per invocation, not just total spend. Retry loops silently inflate cost.
Embedding Computation Costs – Monitoring & Levers
Monitor:
- Embedding request volume and tokens processed via Bedrock invocation logs or SageMaker endpoint metrics.
- Endpoint utilization (CPU/GPU/memory) if self-hosting embedding models.
- Cost allocation tags to attribute embedding costs to data pipelines, RAG applications, or teams.
Optimization levers:
- Cache embeddings: Avoid recomputing embeddings for unchanged content (e.g., store in vector DB with content hash).
- Batch embedding requests: Reduce per-request overhead; use asynchronous batch jobs for large corpora.
- Right-size embedding model: Smaller embedding models (e.g., Titan Embeddings V2) may suffice; dimensionality reduction cuts storage and compute.
- Serverless vs provisioned: Use serverless inference for intermittent embedding workloads; provisioned endpoints for steady high volume.
Vector Database Storage Optimization – Monitoring & Levers
Monitor:
- Index size, vector count, query volume, latency, memory/CPU usage via CloudWatch for the chosen vector store (OpenSearch Serverless, Aurora pgvector, Neptune, MemoryDB, DocumentDB).
- Storage cost vs compute cost: Often compute (for queries) dominates over raw storage.
- Stale vectors: Track last-access time to prune unused embeddings.
Optimization levers:
- Quantization: Product quantization (PQ), scalar quantization (SQ) reduce vector size and memory footprint.
- Dimensionality reduction: Use smaller embedding dimensions if quality permits.
- Tiered storage: Move cold vectors to cheaper storage (e.g., S3) and load on demand.
- Right-size instance family: For self-managed vector DBs, match instance memory to index size.
- Serverless vector stores: Amazon OpenSearch Serverless scales to zero for intermittent workloads, eliminating idle cost.
- Prune stale vectors: Delete embeddings for deleted content or expired data.
Exam Gotcha: Vector database costs are not just storage—query compute and memory often dominate. Monitoring only storage can miss the primary cost driver.
Anti-Patterns & Exam Traps
- Applying instance right-sizing to token-based workloads → no savings.
- Ignoring dynamic content in prompt prefix → prompt cache invalidated every request, no savings.
- Recomputing embeddings for unchanged content → wasted compute and token cost.
- Over-provisioning vector DB capacity for infrequent queries → idle cost; use serverless or auto-scaling.
- No cost allocation tags → cannot attribute spend to models, teams, or environments.
- Using large FMs for simple tasks → unnecessary cost per token.
- Assuming Savings Plans cover all services → SageMaker AI Savings Plans cover SageMaker; Compute Savings Plans cover EC2/Lambda/Fargate; EC2 Instance Savings Plans cover EC2 only. None cover Bedrock tokens (use Provisioned Throughput for commitment).
- Monitoring only aggregate account spend → misses per-invocation agent cost amplification.
Decision Matrix: Monitoring & Optimization Choices
| Scenario | Recommended Monitoring / Optimization |
|---|---|
| Rising Bedrock bill, unclear driver | CloudWatch dashboard: token usage vs invocation count; Cost Explorer grouped by usage type |
| Predictable high-volume FM inference | Provisioned Throughput (reserved model units) |
| Variable/intermittent FM inference | On-demand tokens; AWS Budgets with forecasted alerts |
| Large document corpus for RAG | Batch embedding jobs; cache embeddings; vector DB with quantization |
| Intermittent vector search workload | Amazon OpenSearch Serverless (scales to zero) |
| Steady, high-query vector DB | Provisioned instance with right-sized memory; monitor query latency and IOPS |
| Agent-based application | Bedrock AgentCore Observability: cost per invocation; trace with X-Ray |
| Need to attribute costs to teams | Cost allocation tags on all resources; Cost Explorer filters |
Hard Rule: Prompt caching only saves if the cached prefix is stable and reused often enough to repay cache write costs. Dynamic prefixes = cache miss = no savings.