Short answer: Deploying an AI model means selecting a serving pattern (real-time, batch, streaming, or edge), then making the whole path reproducible, observable, secure, and reversible. When you version everything and benchmark p95/p99 latency on production-like payloads, you sidestep most “works on my laptop” failures.
Key takeaways:
Deployment patterns: Choose real-time, batch, streaming, or edge before you commit to tools.
Reproducibility: Version the model, features, code, and environment to prevent drift.
Observability: Continuously monitor latency tails, errors, saturation, and data or output distributions.
Safe rollouts: Use canary, blue-green, or shadow testing with automatic rollback thresholds.
Security & privacy: Apply auth, rate limits, and secrets management, and minimise PII in logs.

Articles you may like to read after this one:
🔗 How to measure AI performance
Learn metrics, benchmarks, and real-world checks for reliable AI results.
🔗 How to automate tasks with AI
Turn repetitive work into workflows using prompts, tools, and integrations.
🔗 How to test AI models
Design evaluations, datasets, and scoring to compare models objectively.
🔗 How to talk to AI
Ask better questions, set context, and get clearer answers fast.
1) What “deployment” really means (and why it’s not just an API) 🧩
When people say “deploy the model,” they might mean any of these:
-
Expose an endpoint so an app can call inference in real time (Vertex AI: Deploy a model to an endpoint, Amazon SageMaker: Real-time inference)
-
Run batch scoring nightly to update predictions in a database (Amazon SageMaker Batch Transform)
-
Stream inference (events come in constantly, predictions go out constantly) (Cloud Dataflow: exactly-once vs at-least-once, Cloud Dataflow streaming modes)
-
Edge deployment (phone, browser, embedded device, or “that little box in a factory”) (LiteRT on-device inference, LiteRT overview)
-
Internal tool deployment (analyst-facing UI, notebooks, or scheduled scripts)
So deployment is less “make model accessible” and more like:
-
packaging + serving + scaling + monitoring + governance + rollback (Blue-Green Deployment)
It’s kind of like opening a restaurant. Cooking a great dish is important, sure. But you still need the building, staff, refrigeration, menus, supply chain, and a way to handle the dinner rush without crying in the walk-in freezer. Not a perfect metaphor… but you get it. 🍝
2) What makes a good version of “How to Deploy AI Models” ✅
A “good deployment” is boring in the best way. It behaves predictably under pressure, and when it doesn’t, you can diagnose it quickly.
Here’s what “good” usually looks like:
-
Reproducible builds
Same code + same dependencies = same behavior. No spooky “works on my laptop” vibes 👻 (Docker: What is a container?) -
Clear interface contract
Inputs, outputs, schemas, and edge cases are defined. No surprise types at 2am. (OpenAPI: What is OpenAPI?, JSON Schema) -
Performance that matches reality
Latency and throughput measured on production-like hardware and realistic payloads. -
Monitoring with teeth
Metrics, logs, traces, and drift checks that trigger action (not just dashboards nobody opens). (SRE Book: Monitoring Distributed Systems) -
Safe rollout strategy
Canary or blue-green, easy rollback, versioning that doesn’t require prayer. (Canary Release, Blue-Green Deployment) -
Cost awareness
“Fast” is great until the bill looks like a phone number 📞💸 -
Security and privacy baked in
Secrets management, access control, PII handling, auditability. (Kubernetes Secrets, NIST SP 800-122)
If you can do those consistently, you’re already ahead of most teams. Let’s be honest.
3) Choose the right deployment pattern (before you choose tools) 🧠
Real-time API inference ⚡
Best when:
-
users need instant results (recommendations, fraud checks, chat, personalization)
-
decisions must happen during a request
Watch-outs:
-
p99 latency matters more than average (The Tail at Scale, SRE Book: Monitoring Distributed Systems)
-
autoscaling needs careful tuning (Kubernetes Horizontal Pod Autoscaling)
-
cold starts can be sneaky… like a cat pushing a glass off the table (AWS Lambda execution environment lifecycle)
Batch scoring 📦
Best when:
-
predictions can be delayed (overnight risk scoring, churn prediction, ETL enrichment) (Amazon SageMaker Batch Transform)
-
you want cost efficiency and simpler ops
Watch-outs:
-
data freshness and backfills
-
keeping feature logic consistent with training
Streaming inference 🌊
Best when:
-
you process events continuously (IoT, clickstreams, monitoring systems)
-
you want near-real-time decisions without strict request-response
Watch-outs:
-
exactly-once vs at-least-once semantics (Cloud Dataflow: exactly-once vs at-least-once)
-
state management, retries, weird duplicates
Edge deployment 📱
Best when:
-
low latency without network dependency (LiteRT on-device inference)
-
privacy constraints
-
offline environments
Watch-outs:
-
model size, battery, quantization, hardware fragmentation (Post-training quantization (TensorFlow Model Optimization))
-
updates are harder (you do not want 30 versions in the wild…)
Pick the pattern first, then pick the stack. Otherwise you’ll end up forcing a square model into a round runtime. Or something like that. 😬
4) Packaging the model so it survives contact with production 📦🧯
This is where most “easy deployments” quietly die.
Version everything (yes, everything)
-
Model artifact (weights, graph, tokenizer, label maps)
-
Feature logic (transformations, normalization, encoders)
-
Inference code (pre/post-processing)
-
Environment (Python, CUDA, system libs)
A simple approach that works:
-
treat the model like a release artifact
-
store it with a version tag
-
require a model card-ish metadata file: schema, metrics, training data snapshot notes, known limitations (Model Cards for Model Reporting)
Containers help, but don’t worship them 🐳
Containers are great because they:
-
freeze dependencies (Docker: What is a container?)
-
standardize builds
-
simplify deployment targets
But you still need to manage:
-
base image updates
-
GPU drivers compatibility
-
security scanning
-
image size (nobody likes a 9GB “hello world”) (Docker build best practices)
Standardize the interface
Decide your input/output format early:
-
JSON for simplicity (slower, but friendly) (JSON Schema)
-
Protobuf for performance (Protocol Buffers overview)
-
file-based payloads for images/audio (plus metadata)
And please validate inputs. Invalid inputs are the top cause of “why is it returning nonsense” tickets. (OpenAPI: What is OpenAPI?, JSON Schema)
5) Serving options - from “simple API” to full model servers 🧰
There are two common routes:
Option A: App server + inference code (FastAPI-style approach) 🧪
You write an API that loads the model and returns predictions. (FastAPI)
Pros:
-
easy to customize
-
great for simpler models or early-stage products
-
straightforward auth, routing, and integration
Cons:
-
you own performance tuning (batching, threading, GPU utilization)
-
you will reinvent some wheels, maybe badly at first
Option B: Model server (TorchServe / Triton-style approach) 🏎️
Specialized servers that handle:
-
batching (Triton: Dynamic Batching & Concurrent Model Execution)
-
concurrency (Triton: Concurrent Model Execution)
-
multiple models
-
GPU efficiency
-
standardized endpoints (TorchServe docs, Triton Inference Server docs)
Pros:
-
better performance patterns out of the box
-
cleaner separation between serving and business logic
Cons:
-
extra operational complexity
-
configuration can feel… fiddly, like adjusting a shower temperature
A hybrid pattern is super common:
-
model server for inference (Triton: Dynamic batching)
-
thin API gateway for auth, request shaping, business rules, and rate limiting (API Gateway throttling)
6) Comparison Table - popular ways to deploy (with honest vibes) 📊😌
Below is a practical snapshot of options people actually use when figuring out How to Deploy AI Models.
| Tool / Approach | Audience | Price | Why it works |
|---|---|---|---|
| Docker + FastAPI (or similar) | Small teams, startups | Free-ish | Simple, flexible, fast to ship - you’ll “feel” every scaling problem though (Docker, FastAPI) |
| Kubernetes (DIY) | Platform teams | Infra-dependent | Control + scalability… also, lots of knobs, some of them cursed (Kubernetes HPA) |
| Managed ML platform (cloud ML service) | Teams that want less ops | Pay as you go | Built-in deployment workflows, monitoring hooks - sometimes pricey for always-on endpoints (Vertex AI deployment, SageMaker real-time inference) |
| Serverless functions (for light inference) | Event-driven apps | Pay per use | Great for spiky traffic - but cold starts and model size can ruin your day 😬 (AWS Lambda cold starts) |
| NVIDIA Triton Inference Server | Performance-focused teams | Free software, infra cost | Excellent GPU utilization, batching, multi-model - config takes patience (Triton: Dynamic batching) |
| TorchServe | PyTorch-heavy teams | Free software | Decent default serving patterns - can need tuning for high scale (TorchServe docs) |
| BentoML (packaging + serving) | ML engineers | Free core, extras vary | Smooth packaging, nice developer experience - you still need infra choices (BentoML packaging for deployment) |
| Ray Serve | Distributed systems folks | Infra-dependent | Scales horizontally, good for pipelines - feels “big” for tiny projects (Ray Serve docs) |
Table note: “Free-ish” is real life terminology. Because it’s never free. There’s always a bill somewhere, even if it’s your sleep. 😴
7) Performance and scaling - latency, throughput, and the truth 🏁
Performance tuning is where deployment becomes a craft. The goal isn’t “fast.” The goal is consistently fast enough.
Key metrics that matter
-
p50 latency: typical user experience
-
p95 / p99 latency: the rage-inducing tail (The Tail at Scale, SRE Book: Monitoring Distributed Systems)
-
throughput: requests per second (or tokens per second for generative models)
-
error rate: obvious, but still ignored sometimes
-
resource utilization: CPU, GPU, memory, VRAM (SRE Book: Monitoring Distributed Systems)
Common levers to pull
-
Batching
Combine requests to maximize GPU use. Great for throughput, can hurt latency if you overdo it. (Triton: Dynamic batching) -
Quantization
Lower precision (like INT8) can speed inference and reduce memory. May slightly degrade accuracy. Sometimes not, surprisingly. (Post-training quantization) -
Compilation / optimization
ONNX export, graph optimizers, TensorRT-like flows. Powerful, but debugging can get spicy 🌶️ (ONNX, ONNX Runtime model optimizations) -
Caching
If inputs repeat (or you can cache embeddings), you can save a lot. -
Autoscaling
Scale on CPU/GPU utilization, queue depth, or request rate. Queue depth is underrated. (Kubernetes HPA)
A weird-but-true tip: measure with production-like payload sizes. Tiny test payloads lie to you. They smile politely and then betray you later.
8) Monitoring and observability - don’t fly blind 👀📈
Model monitoring is not just uptime monitoring. You want to know if:
-
the service is healthy
-
the model is behaving
-
the data is drifting
-
predictions are becoming less trustworthy (Vertex AI Model Monitoring overview, Amazon SageMaker Model Monitor)
What to monitor (minimum viable set)
Service health
-
request count, error rate, latency distributions (SRE Book: Monitoring Distributed Systems)
-
saturation (CPU/GPU/memory)
-
queue length and time in queue
Model behavior
-
input feature distributions (basic stats)
-
embedding norms (for embedding models)
-
output distributions (confidence, class mix, score ranges)
-
anomaly detection on inputs (garbage in, garbage out)
Data drift and concept drift
-
drift alerts should be actionable (Vertex AI: Monitor feature skew and drift, Amazon SageMaker Model Monitor)
-
avoid alert spam - it teaches people to ignore everything
Logging, but not the “log everything forever” approach 🪵
Log:
-
request IDs
-
model version
-
schema validation results (OpenAPI: What is OpenAPI?)
-
minimal structured payload metadata (not raw PII) (NIST SP 800-122)
Be careful with privacy. You don’t want your logs to become your data leak. (NIST SP 800-122)
9) CI/CD and rollout strategies - treat models like real releases 🧱🚦
If you want reliable deployments, build a pipeline. Even a simple one.
A solid flow
-
Unit tests for preprocessing and postprocessing
-
Integration test with a known input-output “golden set”
-
Load test baseline (even a lightweight one)
-
Build artifact (container + model) (Docker build best practices)
-
Deploy to staging
-
Canary release to a small slice of traffic (Canary Release)
-
Ramp up gradually
-
Automatic rollback on key thresholds (Blue-Green Deployment)
Rollout patterns that save your sanity
-
Canary: release to 1-5% traffic first (Canary Release)
-
Blue-green: run new version alongside old, flip over when ready (Blue-Green Deployment)
-
Shadow testing: send real traffic to new model but don’t use the results (great for evaluation) (Microsoft: Shadow testing)
And version your endpoints or route by model version. Future you will thank you. Current you will also thank you, but quietly.
10) Security, privacy, and “please don’t leak stuff” 🔐🙃
Security tends to show up late, like an uninvited guest. Better to invite it early.
Practical checklist
-
Authentication and authorization (who can call the model?)
-
Rate limiting (protect against abuse and accidental storms) (API Gateway throttling)
-
Secrets management (no keys in code, no keys in config files either…) (AWS Secrets Manager, Kubernetes Secrets)
-
Network controls (private subnets, service-to-service policies)
-
Audit logs (especially for sensitive predictions)
-
Data minimization (store only what you must) (NIST SP 800-122)
If the model touches personal data:
-
redact or hash identifiers
-
avoid logging raw payloads (NIST SP 800-122)
-
define retention rules
-
document data flow (boring, but protective)
Also, prompt injection and output abuse can matter for generative models. Add: (OWASP Top 10 for LLM Applications, OWASP: Prompt Injection)
-
input sanitization rules
-
output filtering where appropriate
-
guardrails for tool calling or database actions
No system is perfect, but you can make it less fragile.
11) Common pitfalls (aka the usual traps) 🪤
Here are the classics:
-
Training-serving skew
Preprocessing differs between training and production. Suddenly accuracy drops and nobody knows why. (TensorFlow Data Validation: detect training-serving skew) -
No schema validation
One upstream change breaks everything. Not always loudly either… (JSON Schema, OpenAPI: What is OpenAPI?) -
Ignoring tail latency
p99 is where users live when they’re angry. (The Tail at Scale) -
Forgetting cost
GPU endpoints running idle is like leaving every light on in your house, but the light bulbs are made of money. -
No rollback plan
“We’ll just redeploy” is not a plan. It’s hope wearing a trench coat. (Blue-Green Deployment) -
Monitoring only uptime
The service can be up while the model is wrong. That’s arguably worse. (Vertex AI: Monitor feature skew and drift, Amazon SageMaker Model Monitor)
If you’re reading this and thinking “yeah we do two of those,” welcome to the club. The club has snacks, and mild stress. 🍪
12) Wrap-up - How to Deploy AI Models without losing your mind 😄✅
Deploying is where AI becomes a real product. It’s not glamorous, but it’s where trust is earned.
Quick recap
-
Decide your deployment pattern first (real-time, batch, streaming, edge) 🧭 (Amazon SageMaker Batch Transform, Cloud Dataflow streaming modes, LiteRT on-device inference)
-
Package for reproducibility (version everything, containerize responsibly) 📦 (Docker containers)
-
Choose serving strategy based on performance needs (simple API vs model server) 🧰 (FastAPI, Triton: Dynamic batching)
-
Measure p95/p99 latency, not just averages 🏁 (The Tail at Scale)
-
Add monitoring for service health and model behavior 👀 (SRE Book: Monitoring Distributed Systems, Vertex AI Model Monitoring)
-
Roll out safely with canary or blue-green, and keep rollback easy 🚦 (Canary Release, Blue-Green Deployment)
-
Bake in security and privacy from day one 🔐 (AWS Secrets Manager, NIST SP 800-122)
-
Keep it boring, predictable, and documented - boring is beautiful 😌
And yeah, How to Deploy AI Models can feel like juggling flaming bowling balls at first. But once your pipeline is stable, it gets weirdly satisfying. Like finally organizing a cluttered drawer… only the drawer is production traffic.
Real-world example: Deploying a support ticket triage model
Scenario
Imagine a fictional but realistic SaaS company with 12 support agents and around 900 customer tickets per week. The team wants an AI model to classify incoming tickets by category, urgency, and suggested routing before a human agent replies.
This is not a fully automated support bot. The model does not send replies to customers. It simply helps route tickets faster, flag risky cases, and give agents a cleaner starting point.
The best deployment pattern here is usually real-time API inference. Each new ticket enters the helpdesk, the AI service scores it within a few hundred milliseconds, and the helpdesk stores the predicted category, priority, confidence score, and model version.
What the assistant needs
Helpful inputs:
ticket subject
ticket body
customer plan type
account region
product area, if already known
previous ticket count in the last 30 days
Helpful rules:
never log raw customer messages if they contain personal data
send billing disputes, legal threats, account deletion requests, and security issues to human review
only auto-route when confidence is above a defined threshold, such as 0.85
store the model version with every prediction
fallback to manual triage if the model service is slow or unavailable
Example instruction
You are a support ticket triage assistant. Classify each ticket into one category: Billing, Login, Bug Report, Feature Request, Account Cancellation, Security, or Other.
Return the category, urgency level, confidence score, short reason, and recommended support queue.
Do not invent missing facts. If the ticket includes legal, security, payment failure, account deletion, or angry customer language, mark it for human review.
If confidence is below 0.85, return “Manual Review” as the recommended queue.
Example output
Weak output:
Category: Bug
Priority: High
Send to support.
Better output:
Category: Login
Urgency: Medium
Confidence: 0.91
Recommended queue: Account Access
Reason: The customer cannot access their account after resetting their password. No security threat or payment issue is mentioned.
Human review required: No
Model version: ticket-triage-v1.3
The better output is easier to audit because it includes a confidence score, routing decision, reason, and model version.
How to test it
Before sending live traffic to the model, create a small “golden set” of real but anonymised tickets.
A simple test set could include:
50 billing tickets
50 login tickets
50 bug reports
30 cancellation requests
20 security-sensitive tickets
20 confusing or mixed-category tickets
Then check:
Does the model choose the same category as a human reviewer?
Does it correctly escalate security, legal, and cancellation tickets?
Does it return “Manual Review” when confidence is low?
Does p95 latency stay under the team’s target?
Does the service fail safely when the model is unavailable?
For rollout, use shadow testing first. Send real tickets to the new model, but do not use its predictions yet. Compare its output with normal human triage for a few days. If results are stable, move to a 5% canary release, then 25%, then 100%.
Result
Illustrative result, based on timing 100 sample tickets before and after using the workflow:
manual triage time fell from 6 minutes per ticket to 1 minute 40 seconds per ticket
the team saved about 7.2 hours across 100 tickets
category agreement with a human reviewer was 87% across a 220-ticket golden set
100% of the 20 security-sensitive test tickets were escalated to human review
p95 latency was 480 ms on production-like payloads
p99 latency was 910 ms
rollback time was under 2 minutes because the old model endpoint stayed live during the canary release
These numbers are not universal benchmarks. They are example measurements a team could reproduce by timing triage tasks, comparing predictions against a labelled test set, and load-testing the endpoint with realistic ticket payloads.
What can go wrong
The biggest risk is trusting the model too much. A ticket marked “low urgency” could still include a serious security issue, especially if the customer writes unclearly.
Other common mistakes:
using polished test tickets that do not match real customer tickets
logging full customer messages with personal data
not storing the model version with each prediction
auto-routing every ticket, even when confidence is low
forgetting a manual fallback queue
measuring average latency but ignoring p95 and p99
letting old categories stay in the model after the support team changes its queues
Practical takeaway
A good AI deployment does not have to start huge. Start with one narrow workflow, one clear interface, one golden test set, and one safe rollback path. If the model saves time without hiding risk, you have a deployment worth scaling.
FAQ
What it means to deploy an AI model in production
Deploying an AI model usually involves far more than exposing a prediction API. In practice, it includes packaging the model and its dependencies, selecting a serving pattern (real-time, batch, streaming, or edge), scaling with reliability, monitoring health and drift, and setting up safe rollout and rollback paths. A solid deployment stays predictably steady under load and remains diagnosable when something goes wrong.
How to choose between real-time, batch, streaming, or edge deployment
Choose the deployment pattern based on when predictions are needed and the constraints you operate under. Real-time APIs fit interactive experiences where latency matters. Batch scoring works best when delays are acceptable and cost efficiency leads. Streaming suits continuous event processing, especially when delivery semantics get thorny. Edge deployment is ideal for offline operation, privacy, or ultra-low-latency requirements, though updates and hardware variation become harder to manage.
What to version to avoid “works on my laptop” deployment failures
Version more than just the model weights. Typically, you’ll want a versioned model artifact (including tokenizers or label maps), preprocessing and feature logic, inference code, and the full runtime environment (Python/CUDA/system libraries). Treat the model as a release artifact with tagged versions and lightweight metadata describing schema expectations, evaluation notes, and known limitations.
Whether to deploy with a simple FastAPI-style service or a dedicated model server
A simple app server (a FastAPI-style approach) works well for early products or straightforward models because you retain control over routing, auth, and integration. A model server (TorchServe or NVIDIA Triton-style) can provide stronger batching, concurrency, and GPU efficiency out of the box. Many teams land on a hybrid: a model server for inference plus a thin API layer for auth, request shaping, and rate limits.
How to improve latency and throughput without breaking accuracy
Start by measuring p95/p99 latency on production-like hardware with realistic payloads, since small tests can mislead. Common levers include batching (better throughput, potentially worse latency), quantization (smaller and faster, sometimes with modest accuracy trade-offs), compilation and optimization flows (ONNX/TensorRT-like), and caching repeated inputs or embeddings. Autoscaling based on queue depth can also keep tail latency from creeping upward.
What monitoring is needed beyond “the endpoint is up”
Uptime is not enough, because a service can look healthy while prediction quality erodes. At minimum, monitor request volume, error rate, and latency distributions, plus saturation signals like CPU/GPU/memory and queue time. For model behavior, track input and output distributions along with basic anomaly signals. Add drift checks that trigger action rather than noisy alerts, and log request IDs, model versions, and schema validation outcomes.
How to roll out new model versions safely and recover fast
Treat models like full releases, with a CI/CD pipeline that tests preprocessing and postprocessing, runs integration checks against a “golden set,” and establishes a load baseline. For rollouts, canary releases ramp traffic gradually, while blue-green keeps an older version live for immediate fallback. Shadow testing helps evaluate a new model on real traffic without affecting users. Rollback should be a first-class mechanism, not an afterthought.
The most common pitfalls when learning how to deploy AI models
Training-serving skew is the classic case: preprocessing differs between training and production, and performance quietly degrades. Another frequent issue is missing schema validation, where an upstream change breaks inputs in subtle ways. Teams also underestimate tail latency and over-focus on averages, overlook cost (idle GPUs add up fast), and skip rollback planning. Monitoring only uptime is especially risky, because “up but wrong” can be worse than down.
References
-
Amazon Web Services (AWS) - Amazon SageMaker: Real-time inference - docs.aws.amazon.com
-
Amazon Web Services (AWS) - Amazon SageMaker Batch Transform - docs.aws.amazon.com
-
Amazon Web Services (AWS) - Amazon SageMaker Model Monitor - docs.aws.amazon.com
-
Amazon Web Services (AWS) - API Gateway request throttling - docs.aws.amazon.com
-
Amazon Web Services (AWS) - AWS Secrets Manager: Introduction - docs.aws.amazon.com
-
Amazon Web Services (AWS) - AWS Lambda execution environment lifecycle - docs.aws.amazon.com
-
Google Cloud - Vertex AI: Deploy a model to an endpoint - docs.cloud.google.com
-
Google Cloud - Vertex AI Model Monitoring overview - docs.cloud.google.com
-
Google Cloud - Vertex AI: Monitor feature skew and drift - docs.cloud.google.com
-
Google Cloud Blog - Dataflow: exactly-once vs at-least-once streaming modes - cloud.google.com
-
Google Cloud - Cloud Dataflow streaming modes - docs.cloud.google.com
-
Google SRE Book - Monitoring Distributed Systems - sre.google
-
Google Research - The Tail at Scale - research.google
-
LiteRT (Google AI) - LiteRT overview - ai.google.dev
-
LiteRT (Google AI) - LiteRT on-device inference - ai.google.dev
-
Docker - What is a container? - docs.docker.com
-
Docker - Docker build best practices - docs.docker.com
-
Kubernetes - Kubernetes Secrets - kubernetes.io
-
Kubernetes - Horizontal Pod Autoscaling - kubernetes.io
-
Martin Fowler - Canary Release - martinfowler.com
-
Martin Fowler - Blue-Green Deployment - martinfowler.com
-
OpenAPI Initiative - What is OpenAPI? - openapis.org
-
JSON Schema - (site referenced) - json-schema.org
-
Protocol Buffers - Protocol Buffers overview - protobuf.dev
-
FastAPI - (site referenced) - fastapi.tiangolo.com
-
NVIDIA - Triton: Dynamic Batching & Concurrent Model Execution - docs.nvidia.com
-
NVIDIA - Triton: Concurrent Model Execution - docs.nvidia.com
-
NVIDIA - Triton Inference Server docs - docs.nvidia.com
-
PyTorch - TorchServe docs - docs.pytorch.org
-
BentoML - Packaging for deployment - docs.bentoml.com
-
Ray - Ray Serve docs - docs.ray.io
-
TensorFlow - Post-training quantisation (TensorFlow Model Optimisation) - tensorflow.org
-
TensorFlow - TensorFlow Data Validation: detect training-serving skew - tensorflow.org
-
ONNX - (site referenced) - onnx.ai
-
ONNX Runtime - Model optimisations - onnxruntime.ai
-
NIST (National Institute of Standards and Technology) - NIST SP 800-122 - csrc.nist.gov
-
arXiv - Model Cards for Model Reporting - arxiv.org
-
Microsoft - Shadow testing - microsoft.github.io
-
OWASP - OWASP Top 10 for LLM Applications - owasp.org
-
OWASP GenAI Security Project - OWASP: Prompt Injection - genai.owasp.org