Spec-Zone.ru › TensorFlow

tf.keras.distribution.ModelParallel

Распределение, при котором переменные модели разбиваются на части.

tf.keras.distribution.ModelParallel(
    device_mesh, layout_map, batch_dim_name=None
)

В отличие от DataParallel, который реплицирует переменные на всех устройствах, ModelParallel позволяет разбивать на части не только входные данные, но и переменные.

Чтобы создать распределение ModelParallel, необходимо указать DeviceMesh и LayoutMap.

  1. DeviceMesh содержит информацию о физических устройствах. Имена осей сетки будут использоваться для сопоставления компоновки переменных и данных.
  2. LayoutMap содержит соответствия между путями переменных и соответствующими TensorLayout.

Пример:

devices = list_devices()    # Assume there are 8 devices.

# Create a mesh with 2 devices for data parallelism and 4 devices for
# model parallelism.
device_mesh = DeviceMesh(shape=(2, 4), axis_names=('batch', 'model'),
                         devices=devices)
# Create a layout map that shard the `Dense` layer and `Conv2D`
# layer variables on the last dimension.
# Based on the `device_mesh`, this means the variables
# will be split across 4 devices. Any other variable that doesn't
# match any key in the layout map will be fully replicated.
layout_map = LayoutMap(device_mesh)
layout_map['dense.*kernel'] = (None, 'model')
layout_map['dense.*bias'] = ('model',)
layout_map['conv2d.*kernel'] = (None, None, None, 'model')
layout_map['conv2d.*bias'] = ('model',)

distribution = ModelParallel(device_mesh=device_mesh,
                             layout_map=layout_map,
                             batch_dim_name='batch')
# Set the global distribution, or via `with distribution.scope():`
set_distribution(distribution)

model = model_creation()
model.compile()
model.fit(data)

Чтобы изменить коэффициент разбиения переменных, можно быстро обновить форму сетки устройств. Например:

# With only the shape change for the device mesh, the variables will be
# sharded across 8 devices instead of 4, which further reduces the memory
# footprint of variables on each of the device.
device_mesh = DeviceMesh(shape=(1, 8), axis_names=('batch', 'model'),
                         devices=devices)

Чтобы определить подходящее правило сопоставления компоновки для всех переменных модели, сначала можно вывести список путей всех переменных модели. Эти пути будут использоваться в качестве ключей для сопоставления переменных с TensorLayout.

Например:

model = create_model()
for v in model.variables:
    print(v.path)
Аргументы
device_mesh Экземпляр DeviceMesh для физических устройств и их логического сопоставления.
layout_map Экземпляр LayoutMap, сопоставляющий путь переменной с соответствующим TensorLayout. Имена осей TensorLayout должны совпадать с именами осей в device_mesh, иначе будет вызвано исключение.
batch_dim_name Необязательная строка — имя оси в device_mesh, которая будет использоваться для распределения данных. Если значение не указано, будет использоваться первая ось из device_mesh.
Атрибуты
device_mesh

Методы

distribute_dataset

Просмотреть исходный код

distribute_dataset(
    dataset
)

Создает экземпляр распределенного набора данных из исходного набора данных пользователя.

Аргументы
dataset исходный глобальный экземпляр набора данных. В настоящее время поддерживается только tf.data.Dataset.
Возвращает
Разбитый на части экземпляр tf.data.Dataset, который будет предоставлять данные для текущего локального рабочего процесса или процесса.

get_data_layout

Просмотреть исходный код

get_data_layout(
    data_shape
)

Получает TensorLayout входных данных.

Аргументы
data_shape форма входных данных в виде списка или кортежа.
Возвращает
TensorLayout данных, которое можно использовать в backend.distribute_value() для перераспределения входных данных.

get_tensor_layout

Просмотреть исходный код

get_tensor_layout(
    path
)

Получает TensorLayout промежуточного тензора.

Аргументы
path строковый путь к соответствующему тензору.

Возвращает: TensorLayout промежуточного тензора, которое можно использовать в backend.relayout() для повторного разбиения тензора. Также может вернуть None.

get_variable_layout

Просмотреть исходный код

get_variable_layout(
    variable
)

Получает TensorLayout переменной.

Аргументы
variable Экземпляр KerasVariable.

Возвращает: TensorLayout переменной, которое можно использовать в backend.distribute_value() для перераспределения переменной.

scope

Просмотреть исходный код

@contextlib.contextmanager
scope()

Менеджер контекста, который делает Distribution текущим.

© 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/api_docs/python/tf/keras/distribution/ModelParallel

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API