nemo_rl.algorithms.sft_v2#

Single-controller SFT with one colocated Energon loader per DP replica.

Module Contents#

Classes#

MasterConfig

Standalone SFTv2 configuration.

SFTV2SaveState

Controller state committed at an optimizer-step boundary.

SFTV2ActorArgs

Driver-built objects used by the SFTv2 controller actor.

SFTSingleControllerActor

Drive colocated loaders and the existing TQPolicy from one actor.

Functions#

_initial_save_state

_restore_save_state

_max_train_steps

setup_sft_v2

Build the V2 cluster, TQPolicy, placement, and resume state.

Data#

API#

class nemo_rl.algorithms.sft_v2.MasterConfig#

Bases: pydantic.BaseModel

Standalone SFTv2 configuration.

policy: nemo_rl.models.policy.PolicyConfig#

None

data: nemo_rl.data.DataConfig#

None

sft: nemo_rl.algorithms.sft.SFTConfig#

None

data_plane: nemo_rl.data_plane.interfaces.LocalDataPlaneConfig#

None

logger: nemo_rl.utils.logger.LoggerConfig#

None

cluster: nemo_rl.distributed.virtual_cluster.ClusterConfig#

None

checkpointing: nemo_rl.utils.checkpoint.CheckpointingConfig#

None

telemetry: Optional[nemo_rl.telemetry.config.TelemetryConfig]#

None

class nemo_rl.algorithms.sft_v2.SFTV2SaveState#

Controller state committed at an optimizer-step boundary.

total_steps: int#

None

consumed_samples: int#

None

total_valid_tokens: int#

None

placement_hash: str#

None

class nemo_rl.algorithms.sft_v2.SFTV2ActorArgs#

Driver-built objects used by the SFTv2 controller actor.

trainer: nemo_rl.models.policy.tq_policy.TQPolicy#

None

loss_fn: nemo_rl.algorithms.loss.loss_functions.NLLLossFn#

None

train_cluster: nemo_rl.distributed.virtual_cluster.RayVirtualCluster#

None

placement_plan: nemo_rl.data.energon.topology.DataLoaderPlacementPlan#

None

save_state: nemo_rl.algorithms.sft_v2.SFTV2SaveState#

None

loader_states: list[dict[str, Any]] | None#

None

nemo_rl.algorithms.sft_v2._initial_save_state(
placement_hash: str,
) nemo_rl.algorithms.sft_v2.SFTV2SaveState#
nemo_rl.algorithms.sft_v2._restore_save_state(
loaded: Optional[dict[str, Any]],
*,
placement_hash: str,
) nemo_rl.algorithms.sft_v2.SFTV2SaveState#
nemo_rl.algorithms.sft_v2._max_train_steps(
master_config: nemo_rl.algorithms.sft_v2.MasterConfig,
) int#
class nemo_rl.algorithms.sft_v2.SFTSingleControllerActor(
master_config: nemo_rl.algorithms.sft_v2.MasterConfig,
actor_args: nemo_rl.algorithms.sft_v2.SFTV2ActorArgs,
)#

Drive colocated loaders and the existing TQPolicy from one actor.

Initialization

run() dict[str, Any]#

Run SFT training.

_setup_loaders() None#
_load_envelopes() list[nemo_rl.data.energon.sft_types.StepEnvelope]#
_run_train_step() dict[str, Any]#
static _policy_metrics(
train_results: dict[str, Any],
) dict[str, Any]#

Convert policy output into flat scalar logger metrics.

_owner_call(method_name: str) list[Any]#
_loader_state_dicts() list[dict[str, Any]]#
_should_save(*, save_by_timeout: bool) bool#
_checkpoint_metric(metrics: dict[str, Any]) dict[str, float]#

Read checkpointing.metric_name out of one step’s training metrics.

Called every step rather than only on a save so a name that no step produces fails on step 1 instead of at the first checkpoint.

_save_checkpoint(metric: dict[str, float]) None#
_close_loaders() None#
nemo_rl.algorithms.sft_v2.setup_sft_v2(
master_config: nemo_rl.algorithms.sft_v2.MasterConfig,
tokenizer_or_processor: Any,
) nemo_rl.algorithms.sft_v2.SFTV2ActorArgs#

Build the V2 cluster, TQPolicy, placement, and resume state.

nemo_rl.algorithms.sft_v2.__all__#

[‘MasterConfig’, ‘SFTSingleControllerActor’, ‘SFTV2ActorArgs’, ‘SFTV2SaveState’, ‘setup_sft_v2’]