Skip to main content

ACT Model Training

ACT (Action Chunking with Transformers) comes from the ALOHA work, and its official implementation is at tonyzhaozh/act. Embodiflow registers this policy under the model identifier act and accepts LeRobot v2 or v3 datasets. Training first converts the LeRobot data into ACT HDF5 episodes inside the container and then runs the training.

Roles and Prerequisites​

Roles​

RoleScenarioDependency
Algorithm engineerFine-tune the ACT policy for a single task or a set of similar tasksTraining and dataset module permissions
Project ManagerTrack the progress and artifacts of ACT training tasksTraining task view permission
Data providerProvide datasets that meet the field and dimension requirementsData export module permissions

Prerequisites​

ItemRequirement
Dataset versionLeRobot v2 or v3
Dataset structureIncludes meta/info.json, has parquet files under data/, and stores video fields under videos/
Data fieldsIncludes observation.state and action, with matching dimensions
Camera fieldsThe fields with dtype video in features form the visual input and can be specified with camera_keys
Training frameworkNative ACT (PyTorch) or LeRobot; native ACT by default
Compute resourcesA GPU container; VRAM requirements vary with batch_size and the number of cameras, and the platform sets no fixed threshold
Run nameThe output directory for run_name must be empty

Training Task Creation and Parameters​

Procedure​

  1. Create a training task on the training page and select act as the model.
  2. Choose a data source: a platform export record, an external URL, or an uploaded LeRobot dataset.
  3. Choose the dataset version v2 or v3 to match the actual format of the dataset.
  4. Configure the parameters; set run_name and camera_keys explicitly.
  5. Choose the compute resources and submit the task.

Training Parameters​

Defaults and allowed ranges:

ParameterDescriptionDefaultRange
batch_sizeBatch size64≥ 1
num_epochsNumber of training epochs12000≥ 0; takes precedence when greater than 0
stepsAlias for num_epochs0≥ 0; used only when num_epochs is 0 and steps is greater than 0
learning_rateBase learning rate5e-5> 0
save_intervalEpoch interval for saving6000≥ 1; at the default value, half of num_epochs
seedRandom seed42Integer
num_workersNumber of DataLoader workers0≥ 0; 0 is recommended inside the container
policy_classPolicy typeACTFixed to ACT
kl_weightWeight of the KL term10≥ 0
chunk_sizeAction chunk length100≥ 1
hidden_dimTransformer hidden dimension512≥ 1
dim_feedforwardFFN hidden dimension3200≥ 1
task_nameTask nameautoauto or a string
run_nameRun nameEmpty; a timestamp name is generatedLetters, digits, dots, underscores, and hyphens, up to 128 characters
camera_keysLeRobot visual fieldsEmpty; inferred automaticallyComma-separated field names
camera_namesACT camera namesEmpty; generated from camera_keysSame count as camera_keys and unique
episode_lenOverride episode length0≥ 0; 0 means auto-detect
idle_thresholdThreshold for filtering idle frames1e-4≥ 0
max_episodesConvert only the first N episodes0≥ 0; 0 means all
convert_workersNumber of concurrent conversion workers0≥ 0; 0 means an automatic policy with a maximum of 8
keep_converted_hdf5Keep intermediate HDF5 filesfalseBoolean

For multi-GPU training, batch_mode is fixed to fixed_global and is not exposed separately. To validate the data pipeline for the first time, submit a minimal configuration: set num_epochs to 1, batch_size to 8, and max_episodes to 2.

Verification​

Training Monitoring​

Training logs output Epoch N and Val loss: X. Embodiflow records the epoch as the training step and the validation loss as the loss, and uses them for the loss curve on the training details page.

MetricMeaning
EpochCurrent training epoch
Val lossValidation loss

Verification Checklist​

CheckPass criteria
Checkpoint directorycheckpoints/<run_name>/ is created
Checkpoint filesInclude policy_last.ckpt and policy_best.ckpt; policy_epoch_<epoch>_seed_<seed>.ckpt is created per save_interval
Dataset statisticsdataset_stats.pkl is created
Run manifeststate_dim, num_episodes, camera_keys, and camera_names in manifest.json match the selected dataset
Loss curveVal loss decreases over training
Intermediate artifactsWhen keep_converted_hdf5 is off, the HDF5 files from conversion are cleaned up after training ends

Error Handling​

SymptomPossible causeActionOwner
Startup reports that the run name already existsA directory with the same run_name under the output directory is not emptyChange run_name and retryTraining configuration owner
Error that camera names and camera field counts differcamera_names and camera_keys have different counts, or camera names are duplicatedMake the counts equal and the names uniqueTraining configuration owner
Error that the state and action dimensions differobservation.state and action in the dataset have different dimensionsFix the dataset so that both dimensions matchData provider
Error that no camera field was foundNo usable video field in features, or camera_keys is set incorrectlyCheck features in meta/info.json and set camera_keys explicitlyData provider, training configuration owner
Error that the dataset is missing required columnsThe parquet files lack episode_index, frame_index, observation.state, or actionAdd the missing columns and re-export the datasetData provider
Out of VRAMbatch_size and the number of cameras are too largeLower batch_sizeTraining configuration owner
Unstable multi-GPU trainingDisk and memory pressure during the conversion stageKeep num_workers at 0 and lower convert_workersTraining configuration owner
PagePurpose
Model trainingCreate, monitor, and quota training tasks
LeRobot datasets and trainingData export and training overview
LeRobot v2 and v3 format differencesDifferences and migration between the two data formats
Data exportGenerate a LeRobot training package