tf.experimental.dtensor.Layout
Представляет информацию о макете DTensor.
tf.experimental.dtensor.Layout(
sharding_specs: List[str],
mesh: tf.experimental.dtensor.Mesh
)
Макет описывает, как распределённый тензор разбит по сетке (и, следовательно, по устройствам). Для каждой оси тензора соответствующее указание фрагментации указывает, по какой размерности сетки происходит фрагментация. Особое указание фрагментации UNSHARDED указывает, что ось дублируется на всех устройствах данной сетки.
Например, рассмотрим сетку 1-D:
Mesh(["TPU:0", "TPU:1", "TPU:2", "TPU:3", "TPU:4", "TPU:5"], [("x", 6)])
Эта сетка организует 6 устройств TPU в одномерный массив. Layout([UNSHARDED], mesh) — это макет для тензора ранга 1, который дублируется на 6 устройствах.
Для другого примера рассмотрим сетку 2-D:
Mesh(["TPU:0", "TPU:1", "TPU:2", "TPU:3", "TPU:4", "TPU:5"],
[("x", 3), ("y", 2)])
Эта сетка организует 6 устройств TPU в 3x2 двумерный массив. Layout(["x", UNSHARDED], mesh) — это макет для тензора ранга 2, первая ось которого фрагментирована по размерности сетки "x", а вторая ось дублируется. Если мы разместим np.arange(6).reshape((3, 2)) с помощью этого макета, отдельные компоненты тензоров будут выглядеть так:
Device | Component TPU:0 [[0, 1]] TPU:1 [[0, 1]] TPU:2 [[2, 3]] TPU:3 [[2, 3]] TPU:4 [[4, 5]] TPU:5 [[4, 5]]
| Аргументы | |
|---|---|
sharding_specs | Список спецификаций фрагментации, каждая из которых соответствует оси тензора. Каждая спецификация (dim_sharding) может быть либо размерностью сетки, либо специальным значением UNSHARDED. |
mesh | Конфигурация сетки для тензора. |
Методы
as_proto
as_proto() -> layout_pb2.LayoutProto
Создаёт представление прототипа макета.
batch_sharded
@staticmethod
batch_sharded(
mesh: tf.experimental.dtensor.Mesh,
batch_dim: str,
rank: int
) -> 'Layout'
Возвращает макет, фрагментированный по размерности партии.
delete
delete(
dims: List[int]
) -> 'Layout'
Возвращает макет с удалёнными заданными размерностями.
from_str
@staticmethod
from_str(
layout_str: bytes
) -> 'Layout'
Создаёт экземпляр из двоичной строки сериализованного протокола.
from_string
@staticmethod
from_string(
layout_str: str
) -> 'Layout'
Создаёт экземпляр из удобочитаемой строки.
inner_sharded
@staticmethod
inner_sharded(
mesh: tf.experimental.dtensor.Mesh,
inner_dim: str,
rank: int
) -> 'Layout'
Возвращает макет, фрагментированный по внутренней размерности.
is_fully_replicated
is_fully_replicated() -> bool
Возвращает True, если все оси тензора дублируются.
mesh_proto
mesh_proto() -> layout_pb2.MeshProto
Возвращает базовую сетку в формате протокола.
num_shards
num_shards(
idx: int
) -> int
Возвращает количество фрагментов для размерности тензора idx.
offset_to_shard
offset_to_shard()
Сопоставление смещения в сплющенном списке с индексом фрагмента.
offset_tuple_to_global_index
offset_tuple_to_global_index(
offset_tuple
)
Сопоставление смещения с индексом в глобальном тензоре.
replicated
@staticmethod
replicated(
mesh: tf.experimental.dtensor.Mesh,
rank: int
) -> 'Layout'
Возвращает дублированный макет ранга rank.
serialized_string
serialized_string() -> bytes
Возвращает сериализованное двоичное строковое представление протокола.
to_string
to_string() -> str
Возвращает удобочитаемое строковое представление.
unravel
unravel(
unpacked_tensors: List[np.ndarray]
) -> np.ndarray
Преобразует сплющенный список фрагментов в фрагментированный массив.
__eq__
__eq__(
other
) -> bool
Возвращает self==value.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/experimental/dtensor/Layout