如何使用tensor-flow实现GPU并行?

2023-12-23

我正在写一个使用张量流编辑距离的基于GPU的字符串匹配程序特征。通过了解匹配部分,我将提取详细信息,然后将其存储到数据表中,该数据表最终将保存为 csv 文件。详细信息如下:

  • 我有 2 个清单。这较小的列表叫做测试字符串其中包含约9 words. The 较大的一个被称为参考字符串这基本上是将一个大文本文件拆分为每行一个单词。该文件最初是一个键值对。因此,在拆分时,键将在一行中,值将在下一行中。

  • 我在用多处理/joblib to 并行读取文件并将读取列表作为 ref_string 列表传递,其中编辑距离比较在 GPU 中完成。

  • 总共有4080 个文本文件每个文本文件包含大约10,000 字分裂时。

  • 使用 tf 编辑距离将每个单词与 ref_words 进行匹配。这index哪里的编辑距离变成zero被注意到,然后(index+1)用于提取其价值。

  • 系统规格:Intel core i5、12GB RAM、Nvidia 940mx(2GB)、Tensorflow 1.10.0、Cuda 9.0、Cudnn 7.1。

我在这里使用 cpu 完成了一个类似的程序,我想看看使用 GPU 是否可以加快执行时间,可以找到here https://stackoverflow.com/questions/54050446/multiprocessing-so-slow.

这是小代码片段:

def main_prog(filenames):
try:
    with open(path+filenames,'r') as f:
        ref_string=f.readlines()
    ref_string=[x.strip() for x in ref_string]
    index=slicer(ref_string)
    ref_string=ref_string[index[0]:(index[1]-1)]

    for i in range(0,len(test_string)):
        test_string1=test_string[i]
        out=[x==test_string1 for x in ref_string]
        out=[i for i, x in enumerate(out) if x]
        if len(out)!=0:
            # Comparing the data using tf with edit distance
             with tf.Session(config=tf.ConfigProto(intra_op_parallelism_threads=10)) as sess:
                test_string_sparse = create_sparse_vec(filler(test_string1,ref_string))
                ref_string_sparse = create_sparse_vec(ref_string)
                out=get_index(sess.run(tf.edit_distance(test_string_sparse, ref_string_sparse, normalize=True)))
                df.set_value(0,test_string1,ref_string[out+1])
        else:
            df.set_value(0,test_string1,"nil")
    return df
except:
    return df

if __name__ == '__main__':
    test_string=["name","Price","oPrice","discount","brand","id","seller","id","category"]
    df=pd.DataFrame(columns=test_string)
    filenames=os.listdir("/home/Desktop/Parallelise/mod_all_page/")
    data=df.append((Parallel(n_jobs=2)(delayed(main_prog)(filenames[i]) for i in range(100))),ignore_index=True)
    data.to_csv("/home/Desktop/final_out.csv")

该代码可以工作,但速度很慢。我可以看到 CPU 利用率平均在 80-90% 左右。在检查 nvidia-smi 状态时,有 2 个作业正在运行,其中一个作业消耗了接近 1.9GB 的空间。有时程序会因内存故障而崩溃。在使用大约 100 个输入文件进行测试时,我得到的执行时间约为 70 秒,而 cpu 版本代码在 18 秒内提取了 4080 个文件。

  • GPU 版本(tensorflow-gpu) 100 个输入文件:70 秒。
  • CPU 版本(多处理)4080 个输入文件:18 秒

代码有问题吗?我可以让它更快吗?我尝试使用 google colab 访问 tesla gpu,因为它有很大的内存,但性能仍然相同。代码有些地方没有优化。我将尝试进行分析并发布更新。

如果有人能指出我在哪里犯了错误,那将非常有帮助。谢谢!

Update:

通过将 n_jobs 数量增加到 4,我能够将 100 个文件的执行时间从 70 秒缩短到 8 秒。但是,当对 4080 个文件等大型数据集尝试相同操作时,会出现错误“CUDA 内存不足”。


None

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

如何使用tensor-flow实现GPU并行? 的相关文章

  • 多处理与 gevent

    目前我正在使用带有发布 订阅模式的 Zeromq 我有一个要发布的工作人员和许多 8 个订阅者 所有人都会订阅 相同的模式 现在我尝试使用多处理来生成订阅者 它可以工作 我错过了一些消息 我使用多重处理的原因是在每条消息到达时对其进行处理
  • 保存散点图动画

    我一直在尝试使用 matplotlib 保存动画散点图 并且我希望它不需要完全不同的代码来查看动画图形和保存副本 该图完美显示了保存完成后的所有数据点 这段代码是修改后的版本Giggi s https stackoverflow com a
  • 从 CUDA 设备写入输出文件

    我是 CUDA 编程的新手 正在将 C 代码重写为并行 CUDA 新代码 有没有一种方法可以直接从设备写入输出数据文件 而无需将数组从设备复制到主机 我假设如果cuPrintf存在 一定有地方可以写一个cuFprintf 抱歉 如果答案已经
  • Python:数百万个小文件的读写速度缓慢

    结论 看来 HDF5 是适合我的目的的方法 基本上 HDF5 是一种用于存储和管理数据的数据模型 库和文件格式 并且旨在处理令人难以置信的大量数据 它有一个名为 python tables 的 Python 模块 链接在下面的答案中 HDF
  • django自定义模板标签中的访问请求

    我在 myapp extras py 中的代码 from django import template register template Library register inclusion tag new userinfo html d
  • 使用 NumPy 数组执行分组平均值和标准差

    我有一组数据 X Y 我的自变量值 X 不是唯一的 因此有多个重复值 我想输出一个新数组 其中包含 X unique 它是 X 的唯一值的列表 Y mean 与 X unique 对应的所有 Y 值的平均值 Y std X unique对应
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • 如何获取 ndarray 的 x 和 y 维度 - Numpy / Python

    我想知道是否可以分别获取 ndarray 的 x 和 y 维度 我知道我可以使用ndarray shape获取表示维度的元组 但如何在 x 和 y 信息中分离它 先感谢您 您可以使用元组拆包 y x a shape
  • Tensorflow无法分配设备进行操作

    我正在尝试跑步NVidia 脸部生成器演示 https github com tkarras progressive growing of gans在我的电脑上 我使用的是 Windows 10 我已经下载了源代码 并尝试按照页面下方的步骤
  • 使用循环计算 Python 字典中元素的有效方法

    我有一个值列表 我希望在循环期间计算每个类的元素数量 即 1 2 3 4 5 mylist 1 1 1 1 1 1 2 3 2 2 2 2 3 3 4 5 5 5 5 mydict dict for index in mylist mydi
  • 如何删除在 Matplotlib 中使用鼠标悬停事件创建的绘图线?

    我在带有鼠标悬停事件的图中创建了一条垂直线和一条水平线 这些线旨在帮助用户选择在图中单击的位置 我的问题是 当鼠标移动到绘图上时 之前绘制的线条不会消失 有人可以解释我该怎么做吗 我在 OnOver 函数内绘制绘图后使用了 ax lines
  • 使用 nditer 进行浅层迭代

    我有这样一个数组 gt gt gt y np random randint 0 255 2 2 3 gt gt gt array 242 14 211 198 7 0 235 60 81 164 64 236 我必须迭代每个triplet元
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • 当日志在不同进程中发出时,caplog 中的消息为空

    我正在使用 log cli true 运行测试 剧本 import logging import sys from multiprocessing import Process logging basicConfig stream sys
  • 填充 MultiIndex Pandas Dataframe 中的日期空白

    我想修改 pandas MultiIndex DataFrame 以便每个索引组都包含指定范围内的日期 我希望每个组都用值 0 或NaN Group A Group B Date Value loc a group a 2013 06 11
  • Python:定义多个相同类型的变量?

    可能是重复的 但至少我无法通过搜索这些术语找到答案 在Python中有没有更快的方法来做到这一点 level1 level2 level3 我试过了 level1 level2 level3 但这似乎创建了该对象的副本 这不是我想要的 和
  • 如何在 Windows 上的 Python 2.7 上安装 Tensorflow?

    我尝试通过 pip 安装 TensorFlow pip install tensorflow 但是得到这个错误 找不到满足tensorflow要求的版本 来自版本 这个问题有解决办法吗 我还是想通过pip安装 如果您只因为 Keras 而需
  • 使用 python 提取 MP3 URL 的 ID3 标签并进行部分下载

    我需要提取远程 mp3 文件的 ID3 标签和元数据 我写了几行可以获取本地文件的ID3标签 from mutagen mp3 import MP3 import urllib2 audio MP3 Whistle mp3 songtitl
  • Pandas dataframe ,使用 iloc 替换最后一行

    我正在尝试使用 iloc 替换 Pandas 数据帧的最后一行 但是我无法让它工作 有很多解决方案 但最简单 最慢 的是这里 如何在 Python 中对 Pandas 数据帧上的行进行 FIFO 推送操作 https stackoverfl
  • 如何使用 Python 从 Azure Functions 中的辅助线程重定向日志

    我正在使用 Azure 函数运行启动多个线程的 Python 脚本 出于性能原因 一切都按预期工作 但 Azure Functions 日志中仅显示来自 main 线程的信息日志 我在 main 中启动的 辅助 线程中使用的所有日志都不会出

随机推荐

  • Eclipse 错误:未绑定类路径容器

    我制作项目后收到两条错误消息 在解决构建路径错误之前 无法构建项目 未绑定的类路径容器 项目 method test 中的 JRE 系统库 OSGi Minimum 1 2 我认为如果我弄清楚第二个错误 第一个错误就会消失 但是 我在 10
  • 如何使用附加信息(如参数)在java中创建自定义堆栈跟踪?

    我被分配了一项任务来创建自定义堆栈跟踪 例如某些指定函数的输出到日志文件 但我不仅需要使用类和方法名称 还必须输出参数及其值 这应该是一个单独的 jar 可以在任何 java 项目上运行 我什至不知道这样的事情是否可能 更不用说从哪里开始了
  • 对于不引用可执行文件的命令,相当于“which”的是什么?

    我试图找出特定命令是如何定义的 我已经检查了所有位置 PATH并且找不到任何像我的命令那样命名的文件 所以它似乎是其他东西 这是一个使用 nvm 的示例 它不是可执行文件 me MacBook which cat bin cat me Ma
  • 安装 Ruby 1.9.3 时出错

    我通过 rvm 安装 Ruby 1 9 3 时遇到错误 rvm install 1 9 3 p0 Installing Ruby from source to home alder rvm rubies ruby 1 9 3 p0 this
  • 使用 jQuery Quicksand 时 CSS 冒泡

    我正在使用 jQuery Quicksand 创建可过滤的文章组合 http davekiss com new http davekiss com new 问题是 当单击侧边栏段落中的过滤器 视频 网站 动态图形 时 正在过滤的文章上的 C
  • 如何在 C# 中处理双重解析中的文化?

    我有一个关于如何在解析双打时处理文化的问题 在系统中 来自不同服务器的价格信息汇集在一起 然而 作为输入给出的数据因文化而异 两百万五十美分如下 2 000 000 50 2 000 000 50 2000000 50 2000000 50
  • Android 4.0如何实现全屏

    Android 4 0 手机只有虚拟按钮 当全屏播放 YouTube 视频时 虚拟按钮实际上是不可见的 视频部分取代了按钮所在的位置 我想做这个 但还没有找到方法 android theme android style Theme NoTi
  • Boost 测试错误:main 已定义

    我有一个Visual Studio我想做一些单元测试的项目Boost Test 我有 2 个文件 File 1 define BOOST TEST MODULE FileX include
  • R Notebook 不显示数据帧的代码输出

    当我尝试查看数据帧结果时 Rnotebook 中的代码块输出没有出现 就好像没有运行一样 我必须通过 pander 函数传递它才能看到输出打印出来 这和针织有关系吗 我提到这一点是因为我在开头将选项设置为以下内容 r setup inclu
  • ReactJS:当子组件调用父组件时,“this.props”不是一个函数

    我已经编写了这段代码 目前正在解决 onClick 事件中的错误 我有两个事件 子元素上的 onClick 事件和顶级父元素上的 onChange 事件 预期的行为应该是更改 Container 组件中当前保存的 activeAccount
  • NServiceBus 到底是一个 ESB

    NServiceBus 到底是 ESB 还是轻量级 ESB 或者它更像是具有持久 可靠消息传递的 WCF 在我看来 它更像是一个消息传递框架 而不是 ESB 只是想要一些指导 因为我刚刚开始研究不同的 ESB 产品以及它们能够做什么或不能做
  • Mercurial 显示“起源”之前的提交数量

    我在这里用 git 术语思考 是否可以看到您在原点之前进行了多少本地提交 就像在 git 中一样 如果您输入git status它会告诉你 Your branch is ahead of blah by blah blah Mercuria
  • android.view.InflateException:二进制 XML 文件行 #1:膨胀类 时出错

    Added ActionBarCompat NavDrawer对于我的项目 在 4 3 设备上运行很顺利 在 2 3 设备上我得到以下异常 09 08 15 09 15 229 E AndroidRuntime 2964 FATAL EXC
  • 单击中间按钮关闭 TabItem

    我有个问题 在我的 WPF 应用程序中 如果我用鼠标中键按下 tabItem 则该 tabItem 应关闭 就像在火狐中一样 但我尝试使用 MVVM 来做到这一点 并且我需要使用命令 我的 tabItems 也是动态创建的 请帮助我 谢谢你
  • 在同一台计算机上开发和使用相同的Python

    我正在开发一个 Python 实用程序模块来帮助进行文件下载 存档等 我在虚拟环境中设置了一个项目以及单元测试 当我想在同一台计算机上使用此模块 本质上是 生产 时 我将文件移动到mymodule目录中的 开发 模块 mymodule 您可
  • webgl 立即模式如何?

    嘿 所以我正在尝试学习 3D 图形 我开始理解即时模式意味着在调用图形时直接绘制图形 例如 html canvas 和保留模式 在 刷新 或交换之前绘制到缓冲区并进行计算缓冲区 但是这几天我一直在学习webgl 我发现它完全缺乏这个线程的东
  • 如何关闭“AmazonS3”对象中的自动代理检测?

    当使用AmazonS3应用程序启动后第一次调用对象时 有大约 14 秒的较大延迟 所有后续调用都不会出现这种大的时间延迟 我之前在其他 HTTP 相关类中遇到过这个确切的延迟问题 这是当相关类尝试确定本地计算机的代理设置以及是否使用它们时引
  • C/C++ Linux,如何在不使用 IP 的情况下查找网络上的邻居(仅限 MAC)

    在小型网络中 比如 20 个或更少的节点 我的程序在测试仪器上需要知道 谁在那里 通过 MAC 而不是通过 IP 我将插入随机网络 并且需要能够执行此操作 而无需知道网络中的任何地址 MAC 或其他内容 并且知道我不能依赖 DHCP DHC
  • 可以获取原始输入中的 Html 节点位置和长度吗?

    考虑以下 HTML 片段 用于空白 我正在使用 Html Agility Pack HAP 来读取 HTML 文件 片段并删除链接 我想做的是找到LINK 以及其他一些 元素 然后用空格替换它们 如下所示 到目前为止 解析部分似乎正在工作
  • 如何使用tensor-flow实现GPU并行?

    我正在写一个使用张量流编辑距离的基于GPU的字符串匹配程序特征 通过了解匹配部分 我将提取详细信息 然后将其存储到数据表中 该数据表最终将保存为 csv 文件 详细信息如下 我有 2 个清单 这较小的列表叫做测试字符串其中包含约9 word