如何在单个GPU上运行多个keras程序?

2023-11-27

我正在开发一个 python 项目,我需要为每个数据集构建多个 Keras 模型。在这里,当我运行构建程序的 Keras 模型时,使用了我的 GPU (GTX 1050ti) 的 10%。

我的问题是有什么方法可以 100% 使用我的 GPU 来减少时间?或者是否有可能在同一 GPU 上运行多个程序?

我尝试在单个 GPU 上运行多个程序,但它不是并行运行的,例如,当我运行单个 python 程序时,每个时期需要 5 秒,而如果我为每个时期运行 2 个程序,则持续时间会增加到 10 秒,运行多个程序的最佳方法是什么。

提前致谢!!


不确定是否有适当的方法可以做到这一点,但这个“gambiarra”似乎效果很好。

制作一个模型,将两个或多个模型并行连接在一起。唯一的缺点是:并行训练和预测时需要相同数量的输入样本。

如何将两个模型与函数式 API 模型并行使用:

input1 = Input(inputShapeOfModel1)
input2 = Input(inputShapeOfModel2)

output1 = model1(input1)
output2 = model2(input2) #it could be model1 again, using model1 twice in parallel. 

parallelModel = Model([input1,input2], [output1,output2])

您可以使用此模型进行训练和预测,传递并行输入和输出数据:

parallelModel.fit([x_train1, x_train2], [y_train1, y_train2], ...)

工作测试代码:

from keras.layers import *
from keras.models import Model, Sequential
import numpy as np

#simulating two "existing" models
model1 = Sequential()
model2 = Sequential()

#creating "existing" model 1
model1.add(Conv2D(10,3,activation='tanh', input_shape=(20,20,3)))
model1.add(Flatten())
model1.add(Dense(1,activation='sigmoid'))

#creating "existing" model 2
model2.add(Dense(20, input_shape=(2,)))
model2.add(Dense(3))


#part containing the proposed answer: joining the two models in parallel
inp1 = Input((20,20,3))
inp2 = Input((2,))

out1 = model1(inp1)
out2 = model2(inp2)

model = Model([inp1,inp2],[out1,out2])


#treat the new model as any other model
model.compile(optimizer='adam', loss='mse')

#dummy input data x and y, for models 1 and 2
x1 = np.ones((30,20,20,3))
y1 = np.ones((30,1))
x2 = np.ones((30,2))
y2 = np.ones((30,3))

#training the model and predicting
model.fit([x1,x2],[y1,y2], epochs = 50)
ypred1,ypred2 = model.predict([x1,x2])

print(ypred1.shape)
print(ypred2.shape)

高级解决方案 - 对数据进行分组以提高速度并匹配样本量

仍有进一步优化的空间,因为这种方法将同步两个模型之间的批次。因此,如果一个模型比另一个模型快得多,则快速模型将适应慢速模型的速度。

此外,如果您有不同数量的批次,您将需要单独训练/预测一些剩余数据。

如果您对输入数据进行分组,并在带有 Lambda 层的模型中使用一些自定义重塑,您也可以解决这些限制,在开始时重塑批量维度,然后在最后恢复它。

例如,如果x1有 300 个样本x2有 600 个样本,您可以重塑输入和输出:

x2 = x2.reshape((300,2,....))
y2 = y2.reshape((300,2,....))

之前和之后model2, 你用:

#before
Lambda(lambda x: K.reshape(x,(-1,....))) #transforms in the inner's model input shape

#after
Lambda(lambda x: K.reshape(x, (-1,2,....))) #transforms in the grouped shape for output

Where ....是原始输入和输出形状(不考虑batch_size)。

那么你需要思考哪个最好,分组数据来同步数据大小还是分组数据来同步速度。

(相比下一个解决方案的优点:可以轻松地按任意数字进行分组,例如2、5、10、200......)

高级解决方案 - 多次并行使用同一模型以加倍速度

您还可以并行使用同一模型两次,例如在此代码中。这可能会使速度加倍。

from keras.layers import *
from keras.models import Model, Sequential
#import keras.backend as K
import numpy as np
#import tensorflow as tf


#simulating two "existing" models
model1 = Sequential()
model2 = Sequential()

#model 1
model1.add(Conv2D(10,3,activation='tanh', input_shape=(20,20,3)))
model1.add(Flatten())
model1.add(Dense(1,activation='sigmoid'))

#model 2
model2.add(Dense(20, input_shape=(2,)))
model2.add(Dense(3))

#joining the models
inp1 = Input((20,20,3))

#two inputs for model 2 (the model we want to run twice as fast)
inp2 = Input((2,))
inp3 = Input((2,))

out1 = model1(inp1)
out2 = model2(inp2) #use model 2 once
out3 = model2(inp3) #use model 2 twice

model = Model([inp1,inp2,inp3],[out1,out2,out3])

model.compile(optimizer='adam', loss='mse')

#dummy data - remember to have two inputs for model 2, not repeated
x1 = np.ones((30,20,20,3))
y1 = np.ones((30,1))
x2 = np.ones((30,2)) #first input for model 2
y2 = np.ones((30,3)) #first output for model 2
x3 = np.zeros((30,2)) #second input for model 2
y3 = np.zeros((30,3)) #second output for model 2

model.fit([x1,x2,x3],[y1,y2,y3], epochs = 50)
ypred1,ypred2,ypred3 = model.predict([x1,x2,x3])

print(ypred1.shape)
print(ypred2.shape)
print(ypred3.shape)

与以前的解决方案相比的优点:操作数据和自定义重塑的麻烦更少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在单个GPU上运行多个keras程序? 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 将 SpotLight 指向与相机 Three.js 相同的方向(手电筒)

    我对这件事真的很陌生 我想制作一个简单的 3D 场景 我可以在其中使用 PointerLockControls 飞行 但我还想要某种手电筒 因此聚光灯应与相机指向同一方向 我已经让聚光灯跟随相机 但它的目标绑定到 0 0 0 实现这一目标的
  • 如何在 Winpython 中安装 glpk-solver 和 pyomo

    我想在我的学习中使用 pyomo 我通过安装 pyomoeasy install coopr 安装说明 Pyomo 需要一个求解器才能工作 所以我想安装 GNU 线性编程套件 glpk 网页 pyomo 似乎安装得恰到好处 因为我可以将它导
  • 如何在python中检查日期是否在两个日期之间

    如何检查一个日期是否在Python中的两个日期之间 编辑1 在Excel中 我正在阅读的日期例如是2018年7月13日 您可以转换日期 以便可以在 Python 中轻松比较 日期 1 和 2 是转换后的日期 input 1 and inpu
  • Elasticsearch - 聚合脚本字段

    我正在尝试创建一个脚本字段 该字段将计算两个时间戳之间的时间差 然后聚合avg在该脚本字段上 我首先尝试 query filtered query match all filter and exists field time new tim
  • UWP 获取实时网络摄像头视频流

    我正在调查MediaCapture类 但是它似乎没有暴露我正在寻找的内容 我想要直播Stream从网络摄像头 不记录或预览它 我正在研究微软认知服务情感API我想跟随这个例子 但不是从文件系统获取本地视频流 我想获取Stream来自网络摄像
  • Exif阅读库

    是否有适用于 Python 3 x 的 exif 库 似乎我遇到的每个 exif 库都仅适用于 Python 2 x 我不需要任何太花哨的东西 只需读取值就足够了 选项 1 使用 pyexiv2 看 pyexiv2 Bug 824440 P
  • is_max = s == s.max() |我该怎么读这个?

    学习的时候熊猫风格 我得到以下内容 def highlight max s highlight the maximum in a Series yellow is max s s max return background color ye
  • 如何在 Python 中模拟 SendGrid 方法

    我试图在 Flask 视图函数中模拟 SendGrid 方法 以便它在测试期间不会发送电子邮件 当我运行以下代码时 出现错误 ImportError 没有名为 sg 的模块 如何正确配置 sg 方法以便在测试中找到它 test helper
  • 如何使 Boost dylibs 在 os x 上通用(i386 和 x86_64)?

    我正在尝试将 Boost 库编译为通用二进制文件 即包含 i386 和 x86 64 架构的构建的 胖 文件 互联网和SO我整理了以下说明 下载 boost 例如 来自http www boost org users download 在下
  • 如果没有必要的标头,我的代码如何正确编译?

    我使用函数 fork exec 但是如何在不包含一些额外头文件 如 sys types h sys wait h 的情况下编译该程序 我使用 ubuntu 10 04 和 gcc 版本 4 4 3 include
  • 飞利浦色调,将 xy 从 api 转换为 HEX 或 RGB

    我正在制作一个网络界面来管理我的色调灯 但在颜色处理方面我很挣扎 灯的 api 为我提供了 x 和 y 坐标http en wikipedia org wiki CIE 1931 color space 但不是 z 值 我想我必须根据亮度值
  • 禁用导入 Crashlytics

    我最近刚刚将 Crashlytics 集成到我的应用程序中 但我遇到了一个 问题 它始终处于启用状态 在他们的页面上 以及在各种 stackoverflow 线程中 据说要关闭它我必须包括ext enableCrashlytics fals
  • 为什么 pthread_join() 的第二个参数是 **,一个指向指针的指针?

    我刚开始使用pthread而且对指针的指针也不太熟悉 有人可以解释为什么第二个论点pthread join is a void 为什么要这样设计呢 int pthread join pthread t thread void value p
  • 如果 PHP PDO 事务失败,我必须显式 rollback() 吗?

    我看过一个代码示例 其中有人做了 dbh gt rollback 当发生 PDOException 时 我以为数据库会在这种情况下自动回滚 如果你不这样做commit not rollback已打开的交易 但它不是commited在你的脚本
  • 如何在时钟上绘制点

    自 Unix 纪元开始以来 我的时间以秒为单位 我想将它们绘制在 24 小时制上 到目前为止我的努力是 from future import division import matplotlib pyplot as plt import n
  • 为什么转发可变参数无效?

    考虑可变参数函数参数 func foo bar Int gt Here foo可以接受多个参数 例如foo 5 4 我很好奇类型Int 及其支持的操作 例如 为什么这是无效的 func foo2 bar2 Int gt foo bar2 给
  • 《编程珍珠》二分搜索帮助

    我似乎无法理解这是如何运作的 问题 给定一个最多包含 40 亿个随机顺序的 32 位整数的顺序文件 找到一个不在该文件中的 32 位整数 并且必须至少缺少一个 Answer 根据表示每个整数的 32 位来查看此二分查找很有帮助 在算法的第一
  • Objective-C 的 JSON 解析器比较(JSON Framework、YAJL、TouchJSON 等)

    据我所知 Objective C 有 3 个 JSON 解析器 JSON框架 YAJL and 触摸 JSON 那么 这三人就会各有特点 例如 YAJL 可以用作 SAX 风格的解析器 JSON框架历史比较悠久 应用也比较广泛 Touch
  • 在 MySQL 中循环结果集

    我正在尝试在 MySQL 中编写一个存储过程 它将执行一个简单的选择查询 然后循环结果以决定是否执行其他查询 数据转换或完全丢弃数据 实际上 我想实现这一点 result mysql query SELECT something FROM
  • 如何在单个GPU上运行多个keras程序?

    我正在开发一个 python 项目 我需要为每个数据集构建多个 Keras 模型 在这里 当我运行构建程序的 Keras 模型时 使用了我的 GPU GTX 1050ti 的 10 我的问题是有什么方法可以 100 使用我的 GPU 来减少