Why a vLLM upgrade from V0-era releases to the V1 engine needs a plan
Moving a production vLLM deployment from a V0-era release to the V1 engine is a planned, tested change, and it should never be treated as a routine version bump. Applications call the server's OpenAI-compatible endpoints, such as /v1/completions and /v1/chat/completions, so any change in request handling, defaults or response behavior reaches users directly. Most teams keep the deployment pinned to an older tag for exactly this reason, and that pin holds the risk in place until the upgrade is scheduled and tested.
The exact breaking changes, deprecated flags and supported upgrade path cannot be assumed from memory or from a summary article. They must be read from the release notes for each target tag on the vLLM GitHub releases page. Compare that reading against the flags, environment variables and chart values your startup scripts actually set, and ask the team to write the result down as an inventory before any cluster is touched. Anything the notes describe as removed, renamed or changed in default behavior becomes a line item in the test plan.
The release history shows why the decision should not wait indefinitely. vLLM ships new minor releases about every two weeks, and the recent dated sequence shows that pace: v0.28.0 on August 26, v0.29.0 on September 9, v0.30.0 on September 22 and v0.31.0 on October 5, 2026. A deployment pinned to an older release falls further behind with each cycle. Choose a target tag deliberately, record the reasons, and set a date to re-evaluate it, so the next upgrade is not decided by whichever tag happens to be newest when someone opens a ticket.
The licensing picture shapes the business case. vLLM is licensed under Apache-2.0 and has no paid edition, so the upgrade itself carries no license fee. The costs sit in accelerator capacity for rerunning your benchmarks and a staging environment that matches production, in the engineering time to test and roll out the change, and in the people who operate the service afterwards. Ask any implementation partner for a quote that separates one-time test and cutover work from the recurring effort of tracking releases, and confirm with your accelerator provider how much staging capacity the retest will need.
What changes between V0-era releases and the V1 engine
This table compares what changes between older pinned vLLM releases and the V1 engine across engine behavior, configuration, the API server, metrics, hardware and models. Use each row as a starting check for your own deployment, and treat the release notes for your target tag as the authoritative list of changes. The main takeaway is to extract those entries, record each one in your own change register, and retest every affected area before the rollout begins.
| Change | Impact | Action needed |
|---|---|---|
| Engine internals affecting request handling | Scheduling, batching and memory behavior can change latency, throughput and how queued requests are handled under load. | Replay production-shaped traffic against the target tag and compare latency, throughput and error rates with the pinned baseline. |
| Renamed, removed or defaulted flags | A launch command that worked on the older tag may fail to start, or may start with different default values. | Diff every flag in the target tag's release notes against your launch scripts and log each change in your change register. |
| Environment variables that control engine behavior | Behavior set through environment variables can change in the same ways as flags, and may be missed in a flag-only review. | Check the release notes for variable changes and confirm each affected variable in your container specification. |
| API server and endpoint behavior | Clients may receive different response fields, status codes or validation errors on the OpenAI-compatible routes. | Run contract tests on /v1/completions, /v1/chat/completions, /v1/responses and /v1/embeddings for each client application. |
| Authentication and exposed endpoints | The API key option covers /v1 routes but not /metrics, /health or control endpoints, so exposure depends on the proxy in front. | Confirm authentication changes in the release notes and keep a reverse proxy allowlist that exposes only user-facing endpoints. |
| Metrics names and labels | Dashboards and alert rules built on /metrics may show gaps, or fire incorrectly, after a metric or label is renamed. | Compare metric names from the old and new tags, update dashboards and alert rules, and confirm each alert fires in staging. |
| Supported hardware and drivers | Accelerator, driver, CUDA, ROCm, XPU or CPU requirements can change, so an image that ran before may not run. | Confirm the driver stack and image variant against the target tag's installation requirements before building the new image. |
| Model and chat template requirements | Models without a chat template cannot serve chat completions, and template handling can change output. | Confirm each served model has a chat template or supply one with --chat-template, then compare outputs on a fixed prompt set. |
Which vLLM behaviors to retest after the engine change
The behaviors application teams notice first are the ones most likely to shift during an engine change, so retest them before anything else. Replay the request bodies your applications actually send to /v1/completions, /v1/chat/completions, /v1/responses and /v1/embeddings, including sampling settings, maximum output limits and stop sequences. Compare the response shapes, field names, finish reasons and error codes against the pinned release. Test each endpoint only on the models that serve it, since a model deployed for generation will not answer embeddings requests. A single changed field can break a client parser without any visible server error, so the comparison should be field by field.
Chat template handling deserves its own check for every model that depends on --chat-template or on a template bundled with the model files. Confirm that each model still renders system messages, multi-turn histories and any tool or function-call formatting your applications use, and that the rendered prompt matches what the pinned version produced. Streaming needs the same care. Verify chunk framing, the end-of-stream signal and how stop sequences are handled, then confirm that token accounting is unchanged. Compare prompt and completion token counts for a fixed prompt against the baseline, because quotas, chargeback and billing logic often depend on those numbers.
Latency and KV cache behavior under load should be measured with a traffic profile that matches production concurrency, prompt lengths and output lengths. Record time to first token, per-token latency and request queueing for both versions, using the same hardware and configuration. Use the Prometheus metrics the server exposes at /metrics to watch KV cache usage, running and waiting requests, and token throughput during the test. Set acceptance thresholds from your own pinned baseline and agree them with the application owners before the test starts. Output quality needs its own check: run a fixed prompt set per model through both versions, use deterministic sampling where the model supports it, and review differences against an agreed rule. An HTTP 200 response alone does not show that answers are still correct.
Exposure is the last check and the easiest to get wrong. The API key option protects only the /v1, /v2, /inference and /cohere paths, so it does not cover /invocations, /pause, /resume, /abort_requests, /metrics or /health. Keep the reverse proxy allowlist as the control that decides what users can reach, and retest it after the upgrade. Send requests to every route the proxy should block, including the operational paths listed above, and confirm each one is denied. Confirm that /metrics and /health are reachable only from monitoring networks, since they stay outside the API key. Document the result per route so the security owner can sign off on the same exposure list used before the change.
What to prepare before touching the running deployment
Four preparation areas come before any change to the live service. Each answers a different question: how to rebuild the current state, what the current state silently depends on, where the change can be tested, and which exact artifact is being changed. Completing them in this order means a rollback path exists before the first new release is tested.
Backup of the deployment recipe
Record everything needed to recreate the running deployment from nothing: the container image reference, the full vllm serve argument list, environment variables, model weight locations with checksums, Kubernetes manifests or Helm values, and reverse proxy or gateway configuration. If the upgrade fails, this record lets the team roll back to the previous state without guessing which flags were set. Platform engineering owns the export, and the security team should confirm that secrets are referenced from a secret store rather than copied into the export in plain text.
Inventory of customizations
List every behavior the current deployment depends on that the defaults do not supply: custom chat templates passed with the chat template option, model-specific flags, sampling defaults set on the server or assumed by clients, and client-side expectations about response fields or streaming. Give each item an owner and a test that proves it still works after the engine change. Ask application teams to confirm assumptions they never wrote down, because those are the ones that break quietly.
Test environment with matching accelerators
Stand up a staging copy that uses the same accelerator type, driver stack, and tensor parallel layout as production, so memory use and throughput results carry over. If matching hardware is not available, write down each difference, such as GPU model, device count, or node topology, and treat results from that environment as directional only. Include the same model weights, the same gateway route, and a load profile that resembles production traffic. Infrastructure owners choose the substitute hardware, and product owners sign off on the stated gaps.
Pinned image reference by digest
Before the upgrade, record the current image by its digest, not only by a tag, so the running version can be identified and restored exactly. Then select the target release, resolve it to a digest, and reference that digest in manifests or Helm values for every environment. Publishers can move tags, and vLLM ships a new minor release about every two weeks, so a tag tested last month may not point to the same image today. Release engineering owns the pin, and security reviews the image source before promotion.
How the two-week release cadence shapes a staged vLLM rollout
The release cadence sets the pace of the whole upgrade, so the team should choose one target release per cycle and plan every stage around it. vLLM ships new minor releases about every two weeks. The dated examples in its release history are v0.28.0 on August 26, v0.29.0 on September 9, v0.30.0 on September 22 and v0.31.0 on October 5, 2026. Between the start of a V0-to-V1 project and its first production cutover, the newest release can change several times. A team that tracks the latest release will test a moving target, and results can be stale before anyone reviews them. Fixing one target per cycle keeps every test result tied to a single build.
Pin the target by image digest. A tag such as latest can point to a different image after the next publish, so the image that passed the lab run may not be the one that reaches production. Record the digest in the deployment manifest, the change record and the lab report, and confirm that every cluster pulls that exact digest. Apply the same rule to any sidecar or helper image that wraps the server. Treat each digest change as a new release that needs its own short evaluation. Ask the team that owns the deployment to confirm how its orchestration tool resolves image references before the first pinned rollout.
The rollout moves through four stages. First, a lab run on the pinned target checks startup, the OpenAI-compatible endpoints the applications call, and the configuration flags carried over from the V0-era deployment. Second, a staging environment that mirrors production traffic patterns, including prompt and output length distribution, request concurrency and the mix of endpoints, runs the same build for a fixed observation period. Third, a canary moves a subset of model replicas to the new digest, and latency, throughput and KV cache metrics from the /metrics endpoint are compared with the replicas still on the current version. Fourth, full rollout proceeds only if the agreed exit criteria are met, with the previous digest kept ready for restoration. The team should write these criteria down before each stage starts.
Deciding whether to skip an intermediate release depends on its release notes, not on the version number alone. For each skipped release, read the notes for removed or renamed flags, changed defaults, engine behavior changes, model support changes and known issues, then map each item to the team's own configuration and workloads. If a listed change touches a feature the deployment uses, the intermediate release should be tested. If the changes fall in areas the deployment does not use, a skip may be reasonable after the lab run passes. Illustrative example: if a flag the deployment sets is removed in one intermediate release, the team tests that release even if it is skipped for everything else. Record the reasoning in the decision log so the next cycle can reuse it.
A standing evaluation window lets the team review each new release without touching production. Schedule a recurring lab and staging slot for every cycle, assign an owner, and log each release as adopt, defer or skip with the reason. Production changes happen only in a separate maintenance window that follows a passed canary. Staging and lab capacity recur every cycle, because accelerator time, storage and team hours are consumed each time a release is evaluated. When requesting a quote, ask for the recurring cost of the evaluation window separately from the one-time build of the staged pipeline, and confirm who pays for accelerator time in the lab and staging environments.
The upgrade sequence, with checks and rollback points
This sequence moves a pinned vLLM deployment to a newer release in ordered stages. Each stage has a check that must pass before the next one starts, and a rollback point that can be redeployed if the check fails.
Freeze the configuration and record the digest
The platform owner captures the running vLLM container image digest, the exact launch flags, environment variables, model revision, chat template and gateway rules, then stores them in the change record. Nothing is changed during this step. It is complete when the recorded digest matches the digest reported by the running container and the configuration snapshot can be reproduced from version control or a saved file. That snapshot and digest form the first rollback point, because the previous image and configuration can be redeployed exactly as they ran.
Map release note changes to the inventory
The engineering lead reads the release notes for every release between the current version and the target, including the V1 engine transition notes. Each breaking change is recorded against the inventory of flags, deployment manifests, client calls and gateway routes it could affect, with an owner and a decision for each row. The step passes when no breaking change is left without a disposition. Confirm the exact flag changes against the official release notes, because this page does not list them.
Build or pull and verify the pinned target image
The platform engineer builds the target image from a tagged source release or pulls the approved image, then pins it by digest rather than by a floating tag. The check passes when the digest of the image in the registry matches the digest in the change record and the container starts with the same hardware target and runtime libraries used in production. The previous digest stays in the registry and in the change record, so it remains available as the rollback image.
Run the target in the lab with the retest set
The QA engineer runs the pinned target image in a lab that matches production hardware, using the model revision and the retest set. The retest set covers the API endpoints clients use, including completions, chat completions and embeddings, plus structured output, tool calls and long prompts, which the release notes flagged. The step passes when every difference from the baseline is either fixed or accepted in writing by the application owner. Keep the lab deployment running the previous digest so both versions can be compared on identical requests.
Confirm isolation and update flags and gateway rules
For multi-node deployments, the network engineer confirms during the change that node-to-node traffic runs on an isolated network, because vLLM does not protect that traffic by default. The platform engineer then applies the updated launch flags and gateway rules from the retest results. The gateway must expose only the endpoints meant for users, because the --api-key option does not cover endpoints such as /metrics, /health and /pause. The step passes when isolation is verified, the new configuration is committed to version control, and the previous configuration is saved as the rollback point.
Deploy to staging and run a canary
The platform team deploys the target to staging, then sends a share of production-like traffic to the new version as a canary while the previous version continues to serve the rest. The team compares error rates and latency percentiles from the Prometheus-format metrics at /metrics, including request counts and latency histograms, against the baseline from the previous version. The check passes when both versions stay within the thresholds set in the change plan before the change starts. If it fails, traffic returns to the previous digest and configuration.
Complete the rollout and keep the rollback point
The platform team moves all production traffic to the target and watches the same metrics for the period set in the change plan. The change record is closed only after the on-call owner confirms that error rates and latency remain at baseline and that no client reports new failures. The previous digest and configuration stay available for redeployment until the owner signs off that the rollback point is no longer needed. The ongoing support plan should then record the new digest as the baseline for the next release.
How to test the upgrade and roll it back safely
The upgrade is only as safe as the tests that can fail it and the rollback path your team has rehearsed before the change. Start with functional API tests for every endpoint your applications call. For a vLLM server started with vllm serve, that usually means /v1/completions, /v1/chat/completions, /v1/embeddings and /v1/responses if you use them, plus audio endpoints if they are enabled. Check status codes, response schemas, streaming behavior, error responses and token limits against a recorded baseline from the current release. Also test the authentication layer in front of the server, because the --api-key option does not cover every path, including /metrics and /health. Your reverse proxy allowlist should be part of this test run, not assumed to carry over unchanged.
Next, compare model outputs against a set of approved prompts. Agree the acceptance criteria with the application owners before the run starts, and write them down. Exact-match checks suit deterministic outputs, while other prompts may need scored comparisons or human review against defined pass conditions. Expect some differences after a move to the V1 engine, since scheduling, batching and default settings can change. The decision to accept a difference belongs to the people who own the application, not to the engineer running the test. For each model, confirm that the chat template still produces the expected prompt format, because chat completions depend on it.
Load tests should measure throughput, latency under concurrency and KV cache behavior on the same hardware, model and request mix used for the baseline. Watch for queueing, preemption and cache pressure at the load levels your users actually generate. Scrape the Prometheus-format metrics at /metrics during each run. Histogram buckets are configurable, and default buckets may not separate the latency thresholds your service targets, so set buckets before the baseline run and keep them identical for the candidate. Confirm metric names against the release you run, because names and labels can change between releases. Without matching buckets, the two runs cannot be compared.
Define rollback triggers before the change window opens. Typical triggers include failed startup, endpoint errors above a threshold the team agrees, acceptance failures in the output comparison, unexplained latency or cache regressions, and any authentication gap found in the proxy tests. Rolling back the container image reverts the server code and flags, but it does not necessarily revert state that the new release wrote. Check whether the new version changed on-disk compilation caches, model download directories or weight formats, and whether the older image can read them. Prefix cache contents live in memory and clear on restart, but any persistent volumes need a separate decision.
Keep the previous image digest, the full configuration and the model volume snapshot available until the change is formally accepted. Pin the image by digest, since a tag can be moved to point at a different build. Store flags, environment variables, chat template files and deployment manifests under version control so the prior state can be reproduced. Confirm the rollback procedure for your own deployment method, whether native Kubernetes manifests, Helm, the production-stack, KubeRay or another option, and rehearse it in a non-production environment. Do not assume the rollback behaves the same way across these methods, because each one handles rollouts, revision history and persistent storage differently.
What makes a vLLM engine upgrade take longer
This table lists the factors that typically add work to moving a pinned vLLM deployment onto V1-engine releases, explains why each one matters, and suggests how to reduce it. Read each row against your own estate to judge where your upgrade will be heavier than average. The main takeaway is that effort tracks the number of models, clients, hardware targets and deployment paths you must retest, more than the size of the upgrade itself.
| Driver | Why it adds effort | How to reduce it |
|---|---|---|
| Models, chat templates and flags | Each served model may depend on its own chat template, custom flags or tokenizer settings. Chat completions need a template, so any template or flag that changed behavior must be rechecked per model. | Inventory every model with its template, flags and image tag. Keep templates in version control and run a fixed prompt set against each model before and after the move. |
| Client applications and gateways | Applications and gateways built against exact response shapes, field names or streaming behavior may break even when the OpenAI-compatible endpoints still respond. | List each consumer and the endpoints it calls. Capture golden responses and streaming samples, then diff them against the new release in a staging environment. |
| Multi-node and parallelism configurations | Pipeline and data parallel layouts, Ray or multiprocessing backends and inter-node traffic must be restarted in a coordinated way. Inter-node traffic is insecure by default and needs an isolated network, so every node must be changed together. | Document each parallelism layout and node role. Plan a single restart window, validate node membership on a staging cluster first and confirm the isolated network before changing any node. |
| Hardware targets to retest | NVIDIA CUDA, AMD ROCm, Intel XPU, CPU and third-party plugin hardware each need their own test run. A plugin may lag the main repository, so one target can block the whole upgrade. | Limit the production matrix to the targets you run. Confirm plugin compatibility with its maintainer before scheduling, and keep a separate test run per target. |
| Kubernetes platform choices | Native manifests, Helm, the production-stack, KServe and other options each handle image tags, probes, GPU scheduling and rollout differently, so the change process differs by platform. | Record which platform controls each deployment. Pin chart and manifest versions, and test rollout and rollback on the same platform used in production. |
| Air-gapped setups | Container images, model files and chart packages must be moved across the boundary by hand, and each new release needs its own approved copy and checksum before rollout. | Mirror the required images and model artifacts into your internal registry ahead of time. Confirm offline documentation and tokenizer files are present in the bundle before the change window. |
| Accelerator test environment | Without a test environment that matches production accelerators, regressions in kernels, memory use and throughput appear only after cutover. | Confirm that a test cluster with the same accelerator family, driver and container runtime exists and is available for the full test cycle before planning the window. |
| Release cadence and pinned versions | Minor releases arrive about every two weeks, so a deployment that stays pinned for many releases must cross more changes at once. | Set a target release and a rule for when to re-baseline. Test the chosen release against the staged plan rather than chasing each new tag. |
Questions buyers ask before hiring help for a vLLM upgrade
What drives the cost of a vLLM upgrade if the software is free?
vLLM has no license fee, so the cost comes from what it takes to run and change it. The software is Apache-2.0 licensed with no paid edition, and the spending falls into four places: accelerator time for staging, load tests and cutover, the surrounding infrastructure, implementation labor, and the people who operate the service afterward.
One-time costs: assessment of the pinned version, configuration and test harness work, staging capacity, rollout and handover.
Recurring costs: accelerator capacity, monitoring, on-call coverage and the time spent reviewing each later release.
The main cost drivers are the number of models, the accelerator type, how many applications call the OpenAI-compatible endpoints, and whether the deployment spans several nodes. Ask any provider for a quote that separates these line items, states what is in staging versus production, and lists what your team must supply.
How long does a vLLM upgrade take from start to finish?
The duration depends on scope, so confirm it against a written plan rather than a generic estimate. The main factors are how many models and endpoints are in use, how far the current version sits from the target, how many applications and teams depend on the API, and whether the deployment runs on one node or several.
Model output checks often take longer than the engine change itself when quality owners must review results. Staging capacity and approval cycles frequently set the critical path.
The release cadence also matters. vLLM ships new minor releases about every two weeks, so the target version should be pinned at the start, with any later release handled as a separate decision. That keeps the schedule from moving each time a new version ships. Ask for a timeline with named milestones and the dependencies on your side.
What does our team need to provide during a vLLM upgrade?
Most of the demand on your team is access, data and decisions. Expect to provide:
- Access to the staging and production hosts or clusters, the container registry and the model storage
- Model weights, tokenizer files and any chat templates your models need
- Representative test traffic that covers your production request mix
- Named approvers who sign off behavior changes and the cutover window
- Model owners who judge whether output quality has changed for each model
- An on-call contact for the cutover period, with a maintenance window agreed in advance
Ask the provider to list these in the scope document so gaps surface before the work starts.
Can our internal platform team upgrade vLLM without outside help?
Yes, a capable internal team can usually do the upgrade alone if it has GPU operations experience, a staging environment that matches production, and time to retest. The core work is release engineering: pin the image, diff the configuration, run the test set and roll out in stages.
The harder parts are model-specific output changes, multi-node networking and knowing which applications depend on which endpoint. Check these points before deciding:
- Has anyone upgraded an inference engine in production before?
- Does staging have accelerators comparable to production?
- Can model owners review outputs within the window?
- Can the team absorb a new release every two weeks while the upgrade is open?
If two or more answers are no, price an outside partner on a fixed scope and compare it with the cost of your own team's time.
How is a fixed-scope vLLM upgrade agreed in writing?
A fixed-scope engagement is agreed in a written statement of work before any work starts. The document typically covers the systems and models in scope, the environments, the target vLLM version, deliverables, acceptance criteria, the client responsibilities described above, how changes are requested and approved, and the schedule with milestones.
Quotes follow from that written scope, so a vague scope produces a vague quote. Change requests raised during the project, including decisions about a newer release, are priced and dated in writing before the work is performed. Ongoing support after cutover is a separate retainer with its own written terms.
Before signing, check who approves changes, what happens if a client dependency slips, and what handover material you will receive.
What happens if a new vLLM release ships during our project?
A new release is handled as a change request that goes through review. vLLM ships new minor releases about every two weeks, for example v0.28.0 on August 26, v0.29.0 on September 9, v0.30.0 on September 22 and v0.31.0 on October 5, 2026. Those dates show how quickly the target can move during a multi-week project.
The project should pin one target version and one image digest for the whole scope. When a newer release lands, the team reviews its release notes, decides whether it affects your models and endpoints, and records the decision. If you adopt it, the scope, schedule and cost change in writing. If you do not, the pinned version stays in production and the next review date is set.
Ask the provider how it tracks releases during the engagement.
Which vLLM configuration flags and behaviors should we retest first?
Start with the release notes between your pinned version and the target, then diff your launch arguments and environment variables against them. Retest these areas first:
- Chat completions: models need a chat template, either built in or supplied with --chat-template, so confirm template handling for each model.
- OpenAI-compatible endpoints: test /v1/completions, /v1/chat/completions, /v1/responses and /v1/embeddings with the same clients your applications use.
- Parallelism: confirm tensor and pipeline settings still match the GPU layout, and that inter-node traffic stays on an isolated network.
- Memory and KV cache: compare memory use and batching behavior under load.
- Metrics: check that Prometheus metric names and histogram buckets on /metrics still match your dashboards and alerts.
- Access control: --api-key does not cover /metrics, /health or /pause, so confirm the reverse proxy allowlists only user-facing endpoints.
How DeployOpen scopes, delivers and supports a vLLM upgrade
DeployOpen approaches a move from a pinned V0-era vLLM deployment to the V1 engine as a written, staged piece of work inside your own infrastructure. We start by inventorying what your serving stack depends on, then build and retest the upgrade in a non-production environment before any production cutover.
How we scope
- Inventory the current vLLM version, launch flags, model list and the API clients that call the server
- Identify configuration flags that changed between the older release and the V1 engine, and record each one
- Agree in writing which behavior differences the retest covers, including chat templates and OpenAI-compatible endpoints
- Confirm the accelerator, driver and container runtime targets the upgraded release must run on in your environment
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts
How we build
- Pin the container image to an exact release tag and digest so the rollout does not drift with each new minor release
- Translate the flag inventory into versioned configuration, with a documented mapping from old flags to new ones
- Run a retest suite against the endpoints your applications use, comparing outputs and latency with the current baseline
- Plan the staged rollout around the roughly two-week minor release cadence, deciding which release is the target and when to re-evaluate
- Confirm metrics at the /metrics endpoint still feed your monitoring after the change, and adjust dashboards where names differ
How we hand over
- Deliver the pinned image reference, configuration files and the flag change log for your change records
- Provide the retest results, including which behavior differences were accepted, fixed or left open
- Document the rollback procedure, with the previous image and configuration kept available until the new release is accepted
- Walk through the staged rollout plan with your platform and application teams before production cutover
- Record operating decisions, such as the policy for evaluating future vLLM minor releases, in the handover documentation
How we support
- Support after handover is available as a retainer, covering review of new vLLM releases against your pinned configuration
- Retainers can include retesting when you choose to move to a later release, with scope agreed in writing
- Ask any support provider to confirm response expectations and what is excluded before you sign
- Keep your accelerator capacity, hosting and staffing costs separate in your planning, since vLLM itself has no paid edition
- Confirm with your own security and compliance teams how upgrade evidence will be kept for your assessments

