模块化分布式tensorflow框架

EasyFlow的Python项目详细描述


基因组学

模块化分布式TensorFlow框架

提取转换加载管道

  1. 提取:使用本地文件系统(hdd或ssd)或远程文件系统(gcs或hdfs)读取
  2. 转换:有效利用CPU核心解析并执行预处理、批处理
  3. 负载:在本地或跨集群的许多gpu或tpu上的计算负担过重

将数据输入图形

  1. 使用输入到图中的数据初始化张量:bloat graph size,用于小问题和单个gpu,在多个设备上复制图效率非常低
  2. 使用字典将数据输入图形:巨大的内存利用率,以及对巨大预处理数据的巨大磁盘需求
  3. 使用queue的输入管道:queue runner是用python实现的,效率高,但不能饱和当前一代多个gpu
  4. 使用TF.DATA()API的输入管道:使用C++实现,并行化I/O,使用后台线程进行转换和加载步骤,推荐

多gpu和分布式模型中的变量分布

  1. 参数服务器:参数被固定到参数服务器,并且它们被隐式地复制到worker,梯度在worker计算并在参数服务器聚合
  2. 复制变量:每个gpu或worker都有自己的变量副本,然后使用单个设备(cpu或gpu)来聚合梯度
  3. 分布式环境中的复制变量:每个工作进程都有变量的本地副本,然后使用聚合梯度的参数server更新本地副本

保留变量的本地副本可以加快计算速度

代码说明

  1. 多GPU模型,使用输入管道使用队列,变量分布使用参数服务器方法完成
  2. 参数固定在CPU上,GPU(如果可用)用作辅助进程
  3. 非常模块化和面向对象的设计,核心模块抽象出基本的例行功能,还提供实现新模型的层
  4. 例如,对于示例数据集,除了预处理(初始的,特定于数据的)之外,我只实现了tfbsaafilereader、tfbs-aa-cnn-u模型类
  5. Tensorborad中图形可视化的专有名称范围以及tf.summaries
  6. 数据是使用数据dict而不是命令行参数传递的,因为此dict可以自动存储和检索

如何运行:示例数据集

  1. 在https://github.com/rohit06nitbpl/genomics/blob/master/tfbs/source撸code/tensorflow/models/dreamc/pre撸u processing.py l222" rel="nofollow">https://github.com/rohit06nitbpl/genomics/blob/master/tfbs/source撸code/tensorflow/models/dreamc/pre撸processing.py l222中更改第222行根据磁盘上数据目录的位置
  2. 无参数运行python文件最新的TensorFlow环境。
  3. 在第19行的https://github.com/rohit06nitbpl/genomics/blob/master/tfbs/source-code/tensorflow/models/dreamc/experiments.py l19" rel="nofollow">https://github.com/rohit06nitbpl/genomics/blob/master/tfbs/source-code/tensorflow/models/dreamc/experiments.py l19

设备放置和培训日志已完成。

如何运行tensorboard:sample dataset

tensorboard--logdir=genomics/tfbs/source-code/tensorflow/dataset/dreamc/sample-dataset/attempt0/train/logs

图形和缩放器可以在TensorBoard中可视化

示例数据说明

这是一个小型的自制数据,格式与Dream-encode TF体内绑定挑战数据相似

我在这段代码中使用这个模型作为最初的实验,我还使用了氨基acitf-as的d序列 附加功能,只是为了看看它在预测tf结合方面的用处 即使对于未知的tf(即没有进行实验的tf)。我们早期的重点是预测tf结合位点 对于未知的TFS,但稍后,我只专注于提高梦想挑战的结果。

我在这段代码中阅读tsv格式的文件,而不是压缩版本。不过,最近我使用了dream-encode网站上提到的压缩版本和工具,如bedtool等。

我正在动态创建输入张量。这样,我就不会在内存或磁盘中存储一个巨大的热矩阵(基因组学中的数据集是巨大的)。

早些时候,我在许多线程中读取文件,并为ambigous(a)、bound(b)、unbound(u)样本填充三个队列。 然后我用一个随机的洗牌队列来抽取相同数量的样本,并形成最后一批(每批中的均衡类)进行训练。

但由于三个类(a、b、u)的数量不平衡,训练必须等待(b)样本在使用队列管道的文件深处找到。

因此,我对文件进行了预处理,将文件中的a、b和u样本分离为三个独立的文件。现在,在这段代码中,我为每个 等级(A、B、U)。每个线程快速查找每个类的样本并将其放入队列管道。

在tensorflow中,建议使用大文件而不是多个小文件,因为这会瓶颈系统文件处理资源。

事实上,在示例数据集中,我在这段代码中使用的,A级文件的大小非常小,这使得文件可以很快地被关闭,并在不同的时间段重新打开。 这会使A类队列的填充速度变慢。如果运行我的代码,您将看到,训练会间歇性地等待A类队列。

使用apache spark和hadoop这样的大数据技术可以使集群上的数据处理速度更快,而且它们可以更快地收集数据并进入队列。 而不是单一的系统。

待办事项

  1. 上传1d胶囊实现,我用于tf绑定问题
  2. 使用tf.data()api添加管道,并使用实际数据(如mnist)比较性能
  3. 使用https://github.com/tensorflow/benchmarks/tree/master/scripts/tf_cnn_benchmarks" rel="nofollow">https://github.com/tensorflow/benchmarks/tree/master/scripts/tf_cnn_benchmarks完成分布式实现

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
maven字段#getGenericType()抛出java。lang.TypeNotPresentException   用java绘制三角形的几何图形   java无法下载主题和发件人地址(rediff)   java如何使代码线程安全   java在尝试转换FileInputStream中的文件时,我遇到了一个FileNotFound异常   java Moxy和Jackson如何将Json映射到Pojo   在foreach循环中使用BufferedWriter生成新行的java问题   java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?   java如何显示下载附件的进度条   了解java rmi的良好实践   .net可以将Java portlet嵌入ASP。网页?   循环如何多次执行Java方法?   java如何确保用户输入在给定的有效范围内?   java单元测试定理   java如何在IntelliJ上运行外部构建项目?   JAVA:试图编写一个检查字符串是否为数字的方法。总是返回错误   javahadoop将特定键的所有map方法生成的所有值都发送到一个reduce方法,对吗?   在java中读取和使用文件