这篇文章主要为大家展示了keras如何用多gpu并行运行,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
为企业提供成都做网站、网站设计、网站优化、营销型网站建设、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!一、多张gpu的卡上使用keras
有多张gpu卡时,推荐使用tensorflow 作为后端。使用多张gpu运行model,可以分为两种情况,一是数据并行,二是设备并行。
二、数据并行
数据并行将目标模型在多个设备上各复制一份,并使用每个设备上的复制品处理整个数据集的不同部分数据。
利用multi_gpu_model实现
keras.utils.multi_gpu_model(model, gpus=None, cpu_merge=True, cpu_relocation=False)
具体来说,该功能实现了单机多 GPU 数据并行性。 它的工作原理如下:
将模型的输入分成多个子批次。
在每个子批次上应用模型副本。 每个模型副本都在专用 GPU 上执行。
将结果(在 CPU 上)连接成一个大批量。
例如, 如果你的 batch_size 是 64,且你使用 gpus=2, 那么我们将把输入分为两个 32 个样本的子批次, 在 1 个 GPU 上处理 1 个子批次,然后返回完整批次的 64 个处理过的样本。
参数
model: 一个 Keras 模型实例。为了避免OOM错误,该模型可以建立在 CPU 上, 详见下面的使用样例。
gpus: 整数 >= 2 或整数列表,创建模型副本的 GPU 数量, 或 GPU ID 的列表。
cpu_merge: 一个布尔值,用于标识是否强制合并 CPU 范围内的模型权重。
cpu_relocation: 一个布尔值,用来确定是否在 CPU 的范围内创建模型的权重。如果模型没有在任何一个设备范围内定义,您仍然可以通过激活这个选项来拯救它。
返回
一个 Keras Model 实例,它可以像初始 model 参数一样使用,但它将工作负载分布在多个 GPU 上。
例子
import tensorflow as tf from keras.applications import Xception from keras.utils import multi_gpu_model import numpy as np num_samples = 1000 height = 224 width = 224 num_classes = 1000 # 实例化基础模型(或者「模版」模型)。 # 我们推荐在 CPU 设备范围内做此操作, # 这样模型的权重就会存储在 CPU 内存中。 # 否则它们会存储在 GPU 上,而完全被共享。 with tf.device('/cpu:0'): model = Xception(weights=None, input_shape=(height, width, 3), classes=num_classes) # 复制模型到 8 个 GPU 上。 # 这假设你的机器有 8 个可用 GPU。 parallel_model = multi_gpu_model(model, gpus=8) parallel_model.compile(loss='categorical_crossentropy', optimizer='rmsprop') # 生成虚拟数据 x = np.random.random((num_samples, height, width, 3)) y = np.random.random((num_samples, num_classes)) # 这个 `fit` 调用将分布在 8 个 GPU 上。 # 由于 batch size 是 256, 每个 GPU 将处理 32 个样本。 parallel_model.fit(x, y, epochs=20, batch_size=256) # 通过模版模型存储模型(共享相同权重): model.save('my_model.h6')
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。