Previous
Manage data
Create and populate datasets, submit training jobs, manage training scripts, and run inference from the command line or in automation scripts.
To find your organization ID:
viam organizations list
To list datasets and find dataset IDs:
viam dataset list --org-id=<org-id>
To list training containers and find valid container versions:
viam train containers list
viam dataset create --org-id=<org-id> --name=my-dataset
The CLI prints the new dataset’s name and ID:
Created dataset my-dataset with dataset ID: abcdef12-3456-7890-abcd-ef1234567890
Save the dataset ID for subsequent commands.
List all datasets in your organization:
viam dataset list --org-id=<org-id>
List specific datasets by ID:
viam dataset list --dataset-ids=abc,def
Adding images to a dataset creates references to the binary data items, it does not copy the data. Removing images removes the references without deleting the underlying data.
Add images matching a filter (uses the same filter flags as data export):
viam dataset data add filter \
--dataset-id=<dataset-id> \
--org-ids=<org-id> \
--location-ids=<location-id> \
--tags=defective \
--start=2026-01-01T00:00:00Z \
--end=2026-03-01T00:00:00Z
Add specific images by ID:
viam dataset data add ids \
--dataset-id=<dataset-id> \
--binary-data-ids=aaa,bbb,ccc
By filter:
viam dataset data remove filter \
--dataset-id=<dataset-id> \
--tags=low-quality
By ID:
viam dataset data remove ids \
--dataset-id=<dataset-id> \
--binary-data-ids=aaa,bbb
Download all data from a dataset to a local directory.
The export includes the binary files plus a dataset.jsonl file with annotation metadata (classification labels, bounding boxes, timestamps, file paths) that Viam’s training infrastructure consumes.
viam dataset export \
--dataset-id=<dataset-id> \
--destination=./my-dataset
To export only the metadata without downloading binary files (useful for inspecting annotations):
viam dataset export \
--dataset-id=<dataset-id> \
--destination=./my-dataset \
--only-jsonl
Combine multiple datasets into a new one:
viam dataset merge \
--name=combined-dataset \
--dataset-ids=abc,def,ghi
viam dataset rename --dataset-id=<dataset-id> --name=new-name
Deleting a dataset removes the dataset and its references, but does not delete the underlying binary data.
viam dataset delete --dataset-id=<dataset-id>
Submit a managed training job using one of Viam’s built-in model types:
viam train submit managed \
--dataset-id=<dataset-id> \
--model-org-id=<org-id> \
--model-name=my-detector \
--model-type=single_label_classification \
--model-framework=tflite \
--model-labels=defective,good
On success, the CLI prints the job ID:
Submitted training job with ID abcdef12-3456-7890-abcd-ef1234567890
Model types: single_label_classification, multi_label_classification, object_detection.
Submit a job using a custom script from the registry:
viam train submit custom from-registry \
--dataset-id=<dataset-id> \
--model-name=my-custom-model \
--org-id=<org-id> \
--script-name=<training-script-name> \
--version=<script-version> \
--container-version=<container-version>
Submit a custom script by uploading it directly:
viam train submit custom with-upload \
--dataset-id=<dataset-id> \
--model-name=my-custom-model \
--model-org-id=<org-id> \
--script-name=my-training-script \
--path=./my-training-script/ \
--framework=tflite \
--container-version=<container-version>
List training jobs in your organization:
viam train list --org-id=<org-id>
Filter by status:
viam train list --org-id=<org-id> --job-status=completed
Get details on a specific job (use the job ID from train submit or train list):
viam train get --job-id=<job-id>
View training logs:
viam train logs --job-id=<job-id>
Cancel a running job:
viam train cancel --job-id=<job-id>
Upload a custom training script to the registry:
viam training-script upload \
--path=./my-training-script/ \
--script-name=my-training-script \
--framework=tflite
Update script visibility:
viam training-script update \
--script-name=my-training-script \
--visibility=public
Test a training script locally before uploading (use viam train containers list to find valid container versions).
Local testing runs in a Docker container that mirrors the cloud training environment.
The container validates that your script directory contains setup.py and model/training.py.
Local testing uses Google Vertex AI containers, which are linux/x86_64 only. On ARM Macs, Docker runs them through Rosetta emulation, which may be slower.
viam training-script test-local \
--dataset-root=./my-dataset/ \
--training-script-directory=./my-training-script/ \
--container-version=<container-version>
Run inference on a single image using a trained model:
viam infer \
--binary-data-id=<binary-data-id> \
--model-org-id=<org-id> \
--model-name=my-detector \
--model-version=latest
To find binary data IDs, export data with viam data export or browse the DATA page in the Viam app.
train command referenceWas this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!