Source code for orbax.checkpoint._src.serialization.jax_array_restore_args
# Copyright 2026 The Orbax Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Arguments used when restoring with ArrayHandler."""
import dataclasses
from typing import Any
from absl import logging
import jax
from jax.experimental import layout
from orbax.checkpoint._src.metadata import sharding as sharding_metadata
from orbax.checkpoint._src.serialization import types
if jax.__version_info__ >= (0, 6, 2):
Format = layout.Format
else:
Format = layout.Layout
[docs]
@dataclasses.dataclass
class ArrayRestoreArgs(types.RestoreArgs):
"""Arguments used when restoring with ArrayHandler.
restore_type:
See parent class.
mesh:
The device mesh that the array should be restored as. Cannot be None.
mesh_axes:
The mesh_axes that the array should be restored as. Cannot be None.
sharding:
`jax.sharding.Sharding`, `ShardingMetadata`, or `Layout` object which takes
precedence over mesh and mesh_axes if provided. Otherwise, mesh and mesh_axes
will be used to construct a NamedSharding object OR `ShardingMetadata` which
is an orbax representation of `jax.sharding.Sharding` that stores the same
properties but does not require accessing real devices.
global_shape: The global shape that the array should be restored into. If not
provided, the shape will be restored as written. Presently, arbitrary shape
transformations are not supported (for example, reshaping to different
dimensions). Padding and truncating are supported. When the global_shape is
greater than that of the saved array, 0's will be appended. If the
global_shape is shorter than that of the saved array, excess elements will
be dropped from the end of the array.
shape: Interchangeable with global_shape.
strict: True by default. If True, enforces that the target global shape and
the origin global shape (as recorded by the saved array) are the same. If
False, the returned array will be silently truncated or padded to fit the
target global shape as necessary.
"""
restore_type: Any | None = jax.Array
mesh: jax.sharding.Mesh | None = None
mesh_axes: jax.sharding.PartitionSpec | None = None
# pyformat: disable
sharding: jax.sharding.Sharding | sharding_metadata.ShardingMetadata | Format | None = ( # type: ignore[invalid-annotation]
None
)
# pyformat: enable
global_shape: tuple[int, ...] | None = None
shape: tuple[int, ...] | None = None
strict: bool = True
def __post_init__(self):
if self.shape is not None and self.global_shape is not None:
if self.shape != self.global_shape:
raise ValueError(
'If `shape` and `global_shape` are both provided, they must match.'
)
elif self.shape is None:
self.shape = self.global_shape
elif self.global_shape is None:
self.global_shape = self.shape
@dataclasses.dataclass
class SingleReplicaArrayRestoreArgs(ArrayRestoreArgs):
"""Arguments used when restoring with SingleReplicaArrayHandler.
In case when training at scale loading checkpoint to all host may be
very slow especially when checkpoint file is large. To mitigate this
issue `SingleReplicaArrayHandler` suggests to read the checkpoint only
on one replica hosts and do broadcasting which should significantly
improve the training start time at scale.
single_replica_sharding: [Deprecated] This is provided for backward
compatibility only. It is not needed, as Orbax code will automatically
construct a single-replica sharding used for restoring before broadcasting.
"""
single_replica_sharding: jax.sharding.NamedSharding | None = None
def __post_init__(self):
super().__post_init__()
if self.single_replica_sharding is not None:
logging.log_first_n(
logging.WARNING,
'`single_replica_sharding` is deprecated and will be removed in a'
' future version. It is not needed, as Orbax code will automatically'
' construct a single-replica sharding used for restoring before'
' broadcasting.',
1,
)