keras 分布式_Keras 的分布式训练

本教程详细介绍了如何使用 Keras 的 `tf.distribute.MirroredStrategy` 进行分布式训练,旨在使用户能够在单机多 GPU 环境下实现模型的并行训练。内容包括策略的创建、数据预处理、模型构建、训练过程及回调设置等,展示了如何在分布式环境中高效地利用计算资源。
摘要由CSDN通过智能技术生成

Note:我们的 TensorFlow 社区翻译了这些文档。因为社区翻译是尽力而为, 所以无法保证它们是最准确的,并且反映了最新的

官方英文文档。如果您有改进此翻译的建议, 请提交 pull request 到

tensorflow/docs GitHub 仓库。要志愿地撰写或者审核译文,请加入

docs-zh-cn@tensorflow.org Google Group。

概述

tf.distribute.Strategy API 提供了一个抽象的 API ,用于跨多个处理单元(processing units)分布式训练。它的目的是允许用户使用现有模型和训练代码,只需要很少的修改,就可以启用分布式训练。

本教程使用 tf.distribute.MirroredStrategy,这是在一台计算机上的多 GPU(单机多卡)进行同时训练的图形内复制(in-graph replication)。事实上,它会将所有模型的变量复制到每个处理器上,然后,通过使用 all-reduce 去整合所有处理器的梯度(gradients),并将整合的结果应用于所有副本之中。

MirroredStategy 是 tensorflow 中可用的几种分发策略之一。 您可以在 分发策略指南 中阅读更多分发策略。

Keras API

导入依赖

# 导入 TensorFlow 和 TensorFlow 数据集

import tensorflow_datasets as tfds

import tensorflow as tf

tfds.disable_progress_bar()

import osprint(tf.__version__)

2.3.0

下载数据集

下载 MNIST 数据集并从 TensorFlow Datasets 加载。 这会返回 tf.data 格式的数据集。

将 with_info 设置为 True 会包含整个数据集的元数据,其中这些数据集将保存在 info 中。 除此之外,该元数据对象包括训练和测试示例的数量。

datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True)

mnist_train, mnist_test = datasets['train'], datasets['test']

定义分配策略

创建一个 MirroredStrategy 对象。这将处理分配策略,并提供一个上下文管理器(tf.distribute.MirroredStrategy.scope)来构建你的模型。

strategy = tf.distribute.MirroredStrategy()

INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)

INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)

print('Number of devices: {}'.format(strategy.num_replicas_in_sync))

Number of devices: 1

设置输入管道(pipeline)

在训练具有多个 GPU 的模型时,您可以通过增加批量大小(batch size)来有效地使用额外的计算能力。通常来说,使用适合 GPU 内存的最大批量大小(batch size),并相应地调整学习速率。

# 您还可以执行 info.splits.total_num_examples 来获取总数

# 数据集中的样例数量。

num_train_examples = info.splits['train'].num_examples

num_test_examples = info.splits['test'].num_examples

BUFFER_SIZE = 10000

BATCH_SIZE_PER_REPLICA = 64

BATCH_SIZE = BATCH_SIZE_PER_REPLICA * strategy.num_replicas_in_sync

0-255 的像素值, 必须标准化到 0-1 范围。在函数中定义标准化。

def scale(image, label):

image = tf.cast(image, tf.float32)

image /= 255

return image, label

将此功能应用于训练和测试数据,随机打乱训练数据,并批量训练。 请注意,我们还保留了训练数据的内存缓存以提高性能。

train_dataset = mnist_train.map(scale).cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE)

eval_dataset = mnist_test.map(scale).batch(BATCH_SIZE)

生成模型

在 strategy.scope 的上下文中创建和编译 Keras 模型。

with strategy.scope():

model = tf.keras.Sequential([

tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),

tf.keras.layers.MaxPooling2D(),

tf.keras.layers.Flatten(),

tf.keras.layers.Dense(64, activation='relu'),

tf.keras.layers.Dense(10)

])

model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),

optimizer=tf.keras.optimizers.Adam(),

metrics=['accuracy'])

定义回调(callback)

这里使用的回调(callbacks)是:

TensorBoard: 此回调(callbacks)为 TensorBoard 写入日志,允许您可视化图形。

Model Checkpoint: 此回调(callbacks)在每个 epoch 后保存模型。

Learning Rate Scheduler: 使用此回调(callbacks),您可以安排学习率在每个 epoch/batch 之后更改。

为了便于说明,添加打印回调(callbacks)以在笔记本中显示学习率。

# 定义检查点(checkpoint)目录以存储检查点(checkpoints)

checkpoint_dir = './training_checkpoints'

# 检查点(checkpoint)文件的名称

checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_{epoch}")# 衰减学习率的函数。

# 您可以定义所需的任何衰减函数。

def decay(epoch):

if epoch < 3:

return 1e-3

elif epoch >= 3 and epoch < 7:

return 1e-4

else:<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keras中设置分布式训练可以使用TensorFlow的tf.distribute.Strategy API。这个API提供了多种分布式策略,可以根据不同的使用场景选择适合的策略。其中,对于单机多卡训练,可以使用MirroredStrategy。\[1\] 使用MirroredStrategy时,需要在代码中引入tf.distribute.MirroredStrategy,并在创建模型之前实例化该策略。然后,将模型的创建和编译放在strategy.scope()的上下文中,以确保模型在所有可用的GPU上进行复制和训练。\[2\] 下面是一个设置分布式训练的示例代码: ```python import tensorflow as tf from tensorflow import keras # 实例化MirroredStrategy strategy = tf.distribute.MirroredStrategy() # 在strategy.scope()的上下文中创建和编译模型 with strategy.scope(): model = keras.Sequential(\[...\]) # 创建模型 model.compile(\[...\]) # 编译模型 # 加载数据集 train_dataset = mnist_train.map(scale).cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE) eval_dataset = mnist_test.map(scale).batch(BATCH_SIZE) # 在分布式环境下训练模型 model.fit(train_dataset, epochs=10, validation_data=eval_dataset) ``` 在上述代码中,MirroredStrategy会自动将模型复制到所有可用的GPU上,并在每个GPU上进行训练。这样可以充分利用多个GPU的计算资源,加快模型训练的速度。\[1\] 需要注意的是,分布式训练需要有多个GPU才能发挥作用。如果只有单个GPU,使用分布式训练可能不会带来性能上的提升。另外,分布式训练还需要适当调整batch size和学习率等超参数,以获得最佳的训练效果。 #### 引用[.reference_title] - *1* [【Keras】TensorFlow分布式训练](https://blog.csdn.net/qq_36643449/article/details/124592521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Keras分布式训练](https://blog.csdn.net/weixin_39693193/article/details/111539493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Tensorflow2.0进阶学习-Keras分布式训练 (九)](https://blog.csdn.net/u010095372/article/details/124547254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值