Skip to main content
Use a Compute service when you need GPUs for a persistent workload such as model serving. A service is the same generic container run as a job, plus named ports, an optional readiness probe, and a public endpoint — Compute has no deployment or model schema, so this guide serves with vLLM purely as workload payload. A service runs until you terminate it, and you own the lifecycle end to end: Compute never restarts, rescales, or swaps revisions behind your back, so what you deployed is exactly what is running. That predictability comes with two rules: keep the server process in the foreground for the life of the service — a workload that exits, even with code 0, ends the service as failed — and replace a failed or outdated service by creating a new one.

Before you start

You need: Services move through requestedallocatingprovisioningready, and stay there until something ends the run:
  • A failure in any phase, including the workload exiting after ready, tears down through terminating into failed.
  • Explicit termination, a binding limit, or an exhausted organization budget ends in terminated instead.
With a readiness probe, ready means the probe passed. Without one, it only means the workload launched; it makes no application-level health claim, so declare a probe whenever the image offers a health route.
Billing starts at allocation, not readiness.Spend accrues from allocation until the service reaches a terminal state, including all provisioning and model-loading time. A service never completes on its own — terminate it when you are done, and set limits as a backstop.

Step 1 - Store the endpoint key as a secret

Pass the workload API key through secret_env, not inline in the command, so it never appears in provider pod specs.
Secret values are write-only. Keep the returned sec_... id for the create body, and the key value itself for your clients.

Step 2 - Create the service

Create the service with a required Idempotency-Key header, exactly as for jobs. This example serves Qwen2.5-0.5B-Instruct with vLLM’s OpenAI-compatible server, matching the platform smoke test:
Field notes: As with jobs, 201 means the request was accepted; capacity and provisioning problems surface afterwards through state, reason, logs, and events.

Step 3 - Wait for ready

Model download and load happen inside the workload, so expect minutes of provisioning before the readiness probe passes. A ready service carries its public endpoints:
If the service lands in failed instead, read reason, then GET .../logs?source=user for the server’s own output and source=system for allocation and bootstrap problems — the same logs and events surface as jobs.

Step 4 - Call your endpoint

The endpoint is plain vLLM: an OpenAI-compatible API authenticated with the key you stored in Step 1.
curl
A request without the key is rejected by vLLM itself — Compute does not sit in front of your endpoint.
Check the endpoint’s url scheme before sending anything sensitive. Depending on where capacity was allocated, an endpoint may be served over plain http, in which case bearer tokens and payloads cross the internet unencrypted.

Step 5 - Register with the LLM gateway

Optionally register the endpoint as a bring-your-own model in the MKA1 LLM gateway, so it is callable through the platform’s /responses API with normal platform keys. Add the endpoint to your model catalog:
curl
Then register the returned model id:
curl
completions-format models are accepted at /responses; the gateway drives the chat-completions upstream for you. This is why the create body in Step 2 passed the tool-choice flags to vLLM.

Step 6 - Terminate

A service runs, and bills, until you stop it.
Termination is idempotent, deallocates the provider resource, and stops spend; the record stays readable for audit and usage.

Serve a model from mka1-repos

To serve weights from mka1-repos — such as the merged output of a fine-tune job — change only the model identifier and the credentials. Compute always injects HF_ENDPOINT into every workload, pointing at the artifact endpoint configured for your cluster, and vLLM resolves model identifiers against it. mka1-repos authenticates with your MKA1 API key, injected as HF_TOKEN through secret_env:
The service downloads the weights from your organization’s repository at startup and serves them under the same identifier, completing the loop: fine-tune as a job, publish to mka1-repos, serve as a service.

Track spend

Service spend accrues per whole minute from allocation and appears alongside jobs in the usage endpoint:
Compute spend draws from the same organization budgets as every other MKA1 service, and a service that hits an organization budget or its own limits is terminated with no grace period.

API reference

For the full request and response schemas, open the Compute groups in the API Reference.

See also