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