Skip to main content
Once a fine-tuning job completes, your model is available for inference in two ways: hosted on a dedicated endpoint at Together AI, or downloaded as a standalone checkpoint.

Requirements

  • A completed fine-tuning job.
  • One of the job’s two registry identifiers for the trained weights. Look for them in the tg fine-tuning retrieve output on a completed job:
    • model_object_id (an ml_... value): The model-registry ID. The CLI takes it directly, and the SDK and API take it inside a projects/{project_id}/models/{model_id} path.
    • model_object_name (a <project_slug>/<model_name> value): The qualified registry name. The CLI accepts it in place of the ID. The SDK and API don’t.
  • Together CLI version 3.0.0 or later. Check your version with tg --version. To install or upgrade, run uv tool install "together[cli]" --upgrade.

Deploy on a dedicated endpoint

Together AI serves fine-tuned models through dedicated model inference. A completed fine-tuning job is already a private model in your project, so you deploy it directly, with no upload step.
Dedicated model inference bills per minute per running replica, even when idle. Scale the deployment to zero or delete the endpoint when you’re done to stop billing.
Deploy the fine-tune by its model_object_name or its model_object_id. The deploy command creates the endpoint, attaches a deployment, and routes all traffic to it in one step:
CLI
To deploy by name, pass it in full, including the project slug (acme-corp/my-model-abc123). The bare model name doesn’t resolve, and neither does model_output_name. The CLI resolves a name only when exactly one model in your project matches it.If the model has more than one deployment profile, pass --config <cr_...> to choose one. List a model’s profiles with tg models configs "<MODEL_OBJECT_ID>".Poll until the deployment reaches DEPLOYMENT_STATE_READY:
CLI
Once the deployment is READY, pass the endpoint string (your-project-slug/my-finetuned-endpoint, printed by the deploy output) as the model parameter and send the request to https://api-inference.together.ai:
cURL
To stop billing when you’re done, delete the endpoint with rm --force, which also deletes its deployment:
CLI
If you plan to use the endpoint again, scale the deployment to zero instead. This stops billing without deleting anything. For the full teardown order, see Delete resources.

Run locally

To run your model outside Together, download the checkpoint by job ID:

Choose a checkpoint type

The checkpoint parameter selects what to download. If you omit it, the API picks a default automatically: merged for low-rank adapter (LoRA) jobs and model_output_path for full fine-tunes. You can also pass checkpoint_step, which downloads a specific intermediate step and overrides checkpoint. Valid values depend on how the job was trained. model_output_path returns the raw training output directory before any merging. It works for both job types but is mainly useful for advanced workflows that need the unmodified artifacts. For LoRA jobs, prefer merged or adapter. For full fine-tunes, it’s the only option. The output is a .tar.zst archive that uses ZStandard compression. On macOS, install zstd with Homebrew and decompress:
You should see:
Load the model with Hugging Face Transformers:
Python
To download a specific checkpoint instead of the final one, pass --checkpoint-step <STEP_NUMBER> to tg fine-tuning download (or checkpoint_step=<STEP_NUMBER> to client.fine_tuning.content()). List checkpoints with tg fine-tuning list-checkpoints <JOB_ID>.

Model registry object IDs

When a job uploads its output artifacts to the Together model registry alongside the primary storage write, the job and checkpoint responses include the registry object and revision IDs, plus qualified object names in <project_slug>/<model_name> form. Use the IDs to reference the uploaded weights in downstream workflows, such as binding a fine-tuned adapter to a dedicated endpoint. The CLI’s deploy command also accepts the qualified name. On a completed job in the fine-tuning jobs dashboard, the Output model field shows model_object_name and links to that model in the registry by model_object_id. The object ID fields are omitted when the registry upload did not run or did not succeed. A name can still be present for a job whose upload never ran, but the CLI can’t resolve it, so treat the matching *_object_id as the signal that the artifact reached the registry. Object names are resolved on the fly on GET /fine-tunes/{id} and GET /fine-tunes/{id}/checkpoints only (not on list jobs). If the project slug cannot be resolved, the name fields fall back to the corresponding object ID.

On the job

GET /fine-tunes/{id} includes the final artifact IDs once the job reaches completed:

On checkpoints

GET /fine-tunes/{id}/checkpoints returns the same ID pair on each checkpoint entry: Intermediate checkpoints carry the IDs from the upload at that step. Final model and adapter checkpoints in the list reuse the job-level IDs from the table above.

Troubleshooting

  • The job has no model_object_id yet: The job hasn’t reached completed. Poll its status with client.fine_tuning.retrieve(id=...) until it’s done.
  • endpoints_v1_create_access_disabled (HTTP 403): You’re calling the retired v1 endpoints API, for example with client.endpoints.create(...) in SDK 2.x or tg endpoints create in CLI 2.x. Upgrade together to 3.0.0 or later, then deploy with tg endpoints deploy.
  • Multiple configs found for model when deploying: The model has more than one deployment profile. List its profiles with tg models configs "<MODEL_OBJECT_ID>", then re-run with --config <cr_...>.
  • Model <MODEL_OBJECT_NAME> not found when deploying by name: Pass model_object_name in full, including the project slug, and check that the job reports a model_object_id. Without one, the weights never reached the registry, so neither identifier resolves. If the name still fails, deploy by model_object_id.
  • Multiple models found for "<MODEL_OBJECT_NAME>": More than one model visible in your project has the same final name segment. Deploy by model_object_id, which is unambiguous.
  • Either identifier fails with a key from another project: The model belongs to the project the job ran in, and both identifiers resolve only within your key’s project. Use a key scoped to the project that owns the model.
  • Deploy fails because the base model isn’t supported: Not every base model can be hosted on dedicated model inference. Before training, confirm the base model appears in the supported models list. -Reference models often can’t be deployed.
  • 404 on inference: Point the SDK’s base URL at https://api-inference.together.ai, or at https://api-inference.together.ai/v1 for OpenAI-compatible clients. Pass the endpoint string (your-project-slug/<endpoint_name>, printed by the deploy output) as the model parameter, not the Model Object ID.

Next steps

Upload a custom model

Upload your own model weights from outside the Together catalog.

Manage endpoints

Inspect, start, stop, update, and delete dedicated endpoints.

Configure autoscaling

Tune replica bounds and autoscale a deployment on the metric that fits your workload.