nemo_rl.experience.failures#
Rollout failure taxonomy for the SingleController path.
A failed rollout attempt is one of exactly two things, and the distinction drives the whole retry policy:
Infra (:class:
RolloutInfraFailure) — the prompt is fine, the fleet is not. A dead generation shard, a timeout, a dropped connection. Re-dispatching the same prompt is expected to succeed because the retry lands on a different shard.Data (:class:
RolloutDataFailure) — deterministic and prompt-specific. A prompt longer than the engine’smax_model_len, non-contiguous tokens after tokenization. Another shard fails the same way, so the retry budget is small and exhausting it is reported rather than absorbed.
- func:
classify_rollout_failuremaps an arbitrary exception onto that split. Anything not recognized as infrastructure is treated as data — an unrecognized exception is more likely a real bug than a transient blip, and the data path surfaces it loudly instead of retrying it into silence.
Classify where the information still exists. An exception that crosses a Ray actor
boundary arrives stripped: Ray pickles the cause, and anything unpicklable (aiohttp’s
CIMultiDictProxy headers, for one) is replaced by a bare error carrying neither type
nor .status. Driver-side classification is then guessing. So failures raised inside
an actor are converted to a picklable member of this taxonomy before they cross —
- func:
http_status_is_infraexists to keep that decision identical on both sides. See_typed_gym_failureinnemo_rl/environments/nemo_gym.py.
Module Contents#
Classes#
Retry policy bucket for a failed rollout attempt. |
Functions#
Whether an HTTP status means the endpoint is unwell rather than the request bad. |
|
Return the HTTP status carried by an aiohttp response error, if this is one. |
|
Return whether this single exception (ignoring its cause chain) is infra. |
|
Bucket a rollout exception into |
Data#
API#
- nemo_rl.experience.failures._AIOHTTP_INFRA_TYPES: tuple[type[BaseException], ...]#
None
- nemo_rl.experience.failures._CLIENT_RESPONSE_ERROR: Optional[type[BaseException]]#
None
- nemo_rl.experience.failures._MAX_CAUSE_DEPTH: Final[int]#
8
- nemo_rl.experience.failures._RETRIABLE_HTTP_STATUSES: Final[frozenset[int]]#
‘frozenset(…)’
- exception nemo_rl.experience.failures.RolloutFailure#
Bases:
ExceptionBase class for failures that terminate a single rollout attempt.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.RolloutInfraFailure#
Bases:
nemo_rl.experience.failures.RolloutFailureThe generation or environment infrastructure could not serve this rollout.
The prompt is not implicated. Re-dispatching it is expected to succeed once a healthy shard is selected.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.RolloutTimeout#
Bases:
nemo_rl.experience.failures.RolloutInfraFailureA rollout, generation turn, or environment step exceeded its deadline.
Initialization
Initialize self. See help(type(self)) for accurate signature.
Bases:
nemo_rl.experience.failures.RolloutInfraFailureThe selected generation shard could not serve the request.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.NoHealthyShards#
Bases:
nemo_rl.experience.failures.RolloutInfraFailureNo generation shard is currently eligible to serve traffic.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.GymTransportError#
Bases:
nemo_rl.experience.failures.RolloutInfraFailureNeMo-Gym failed at the transport layer rather than returning a rollout.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.RolloutDataFailure#
Bases:
nemo_rl.experience.failures.RolloutFailureThis prompt cannot be rolled out, and another shard would fail identically.
Usually a configuration problem — most often
policy.max_total_sequence_lengthexceeding the generation engine’smax_model_len.Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.RolloutRedispatchExhausted#
Bases:
RuntimeErrorA prompt exhausted its infrastructure retry budget.
Deliberately not a :class:
RolloutFailure: it is terminal for the run rather than for one attempt, so the per-attempt retry loop must not catch it. Reaching it means the prompt failed across repeated shard selections, which indicates fleet-wide failure rather than a bad prompt.Initialization
Initialize self. See help(type(self)) for accurate signature.
- exception nemo_rl.experience.failures.RolloutStall#
Bases:
RuntimeErrorRollouts are in flight but none has committed within the watchdog deadline.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- class nemo_rl.experience.failures.FailureClass#
Bases:
str,enum.EnumRetry policy bucket for a failed rollout attempt.
Initialization
Initialize self. See help(type(self)) for accurate signature.
- INFRA#
‘infra’
- DATA#
‘data’
- nemo_rl.experience.failures._INFRA_TYPES: Final[tuple[type[BaseException], ...]]#
()
- nemo_rl.experience.failures._INFRA_TYPE_NAMES: Final[frozenset[str]]#
‘frozenset(…)’
- nemo_rl.experience.failures.http_status_is_infra(status: int) bool#
Whether an HTTP status means the endpoint is unwell rather than the request bad.
5xx and the retriable 4xx are infrastructure; any other 4xx describes the request itself, so another shard would answer it identically.
Public because NeMo-Gym has to make this same call on the raising side of a Ray actor boundary (see
nemo_rl/environments/nemo_gym.py), and the two copies of the decision must not drift apart.
- nemo_rl.experience.failures._http_status(exc: BaseException) Optional[int]#
Return the HTTP status carried by an aiohttp response error, if this is one.
- nemo_rl.experience.failures._is_infra(exc: BaseException) bool#
Return whether this single exception (ignoring its cause chain) is infra.
- nemo_rl.experience.failures.classify_rollout_failure(
- exc: BaseException,
Bucket a rollout exception into
INFRAorDATA.An explicit :class:
RolloutDataFailurealways wins, so callers that know a failure is prompt-specific can say so and not have it re-read as infrastructure. Otherwise the exception and its__cause__chain are checked against the infrastructure table; anything unrecognized isDATAso that unexpected exceptions fail loudly instead of being retried into silence.- Parameters:
exc – The exception raised by a rollout attempt.
- Returns:
The :class:
FailureClassgoverning this failure’s retry budget.