斯纳克集线器

hub的Python项目详细描述


documentation status

简介

大多数情况下,数据科学家/ml研究人员致力于数据管理和预处理,而不是建模。深度学习通常需要处理大型数据集。这些数据集可以增长到太字节甚至是太字节大小。很难管理数据、版本控制和跟踪。下载数据并与训练或推理代码链接是非常耗时的。没有一种简单的方法可以访问其中的一块并可能可视化。在云端将大型数据集存储为单个类似numpy的数组进行版本控制,并从任何机器上按比例访问数据集,难道不更方便吗?

< Buff行情>

集线器阵列:可扩展的类似numpy的阵列存储在云上,可通过Internet访问,就像它们是本地numpy阵列一样。

让我们看看它是如何工作的:

pip3 install hub

在云上远程创建一个大数组,其中一些部分缓存在本地。你可以从任何地方读/写,就好像它是一个本地数组一样!

>importhub>bigarray=hub.array((10000000000,512,512,3),name="test/bigarray:v0")

当前工作流的问题

通过与深度学习公司和研究人员合作的经验,我们意识到目前在深度学习数据管理中存在一些与工作流相关的问题。

  1. 数据区域性。如果您有本地GPU服务器,但将数据存储在安全的远程数据中心或云端,则需要提前计划将特定数据集下载到GPU框中,因为这需要时间。如果存在多个预处理管道,则在整个团队中共享来自一个GPU盒的预处理数据集也很慢而且容易出错。

  2. 本地文件夹结构的代码依赖性。人们使用文件夹结构来存储图像或视频。因此,数据输入管道必须考虑到原始文件夹结构,这会造成数据集文件夹结构不必要且容易出错的代码依赖。

  3. 管理预处理管道。如果您想运行一些预处理,最好将预处理的图像保存为本地缓存以供培训。但是,当有多个预处理管道且数据集非常大时,通常很难在本地管理和版本控制预处理的图像。

  4. 可视化。很难在服务器上可视化原始数据或预处理数据集。

  5. 读取一小部分数据。另一种流行的方法是以hdf5/tfrecords格式存储并上传到云存储桶,但仍然需要管理许多hdf5/tfrecords文件块。如果要读取一小部分数据,则不清楚需要加载哪个tfrecord/hdf5块。为一小块数据加载整个文件也是低效的。

  6. 跨团队同步。如果多个用户修改数据,则需要执行数据版本控制和同步协议。

  7. RAM管理。每当您想创建一个numpy数组时,您都会担心numpy数组是否符合本地ram/磁盘限制。

  8. < > >

    具有集线器阵列的工作流

    只需在代码中声明一个具有名称空间的数组,就可以了。"数据存储在哪里以及如何存储?完全脱离了数据科学家或机器学习工程师。您可以创建一个高达PB级的numpy数组,而无需担心该数组是否适合RAM或本地磁盘。内部工作如下:

    1. 实际数组是在云存储桶(对象并部分缓存在本地环境中。阵列大小可以轻松扩展到1PB。
    2. 当您读取/写入阵列时,软件包会通过Internet自动同步从本地存储桶到云存储桶的更改。
    3. < > >

      我们正在开发简单的身份验证系统、数据管理、高级数据缓存和获取以及版本控制。

      >importhub>importnumpyasnp# Create a large array that you can read/write from anywhere.>bigarray=hub.array((100000,512,512,3),name="test/bigarray:v0")# Writing to one slice of the array. Automatically syncs to cloud.>image=np.random.random((512,512,3))>bigarray[0,:,:,:]=image# Lazy-Load an existing array from cloud without really downloading the entries>imagenet=hub.load(name='imagenet')>imagenet.shape(1034908,469,387,3)# Download the entries from cloud to local on demand.>imagenet[0,:,:,:].mean()

      用法

      步骤1。安装

      pip3 install hub
      

      第2步。延迟加载公共数据集,以高达50MB/s的速度获取单个图像并绘制

      >importhub>imagenet=hub.load(name='imagenet')>imagenet.shape(1034908,469,387,3)>importmatplotlib.pyplotasplt>plt.imshow(imagenet[0])

      第3步。计算完整数据集任何块的平均值和标准偏差

      >imagenet[0:10,100:200,100:200].mean()0.132>imagenet[0:10,100:200,100:200].std()0.005

      步骤4。创建自己的阵列并从另一台计算机访问它

      # Create on one machine>importnumpyasnp>mnist=hub.array((50000,28,28,1),name="name/random_name:v1")>mnist[0,:,:,:]=np.random.random((1,28,28,1))# Access it from another machine>mnist=hub.load(name='name/random_name:v1')>print(mnist[0])

      功能

      • 数据管理:使用版本控制存储大型数据集
      • 协作:多个数据科学家同步处理同一数据
      • 分发:同时从多台计算机访问
      • 机器学习:与numpy、dask、pytorch或tensorflow的本地集成。
      • 缩放:根据需要创建任意大的数组
      • 可视化:将数据可视化,不会有问题

      基准

      有关完整的再现性,请参考代码

      下载并行性

      下表显示,在启用多线程和多处理的情况下,单机上的集线器(aws p3.2xlarge)可以达到875 MB/s的下载速度。选择块大小对于达到最大速度起着作用。下面的图表显示了使用不同数量的线程和进程的权衡。

      培训深度学习数据流< /广告><正文>training

      用例

      • 航空图像:卫星和无人机图像
      • 医学图像:体积图像,如MRI或X射线
      • 自动驾驶汽车:雷达、3D激光雷达、点云、语义分割、视频对象
      • 零售:自助结账数据集
      • 媒体:图像、视频、音频存储

      确认

      感谢:这项技术的灵感来源于我们在普林斯顿大学的Seunglab的经历,并感谢William Silversmith@Seunglab和他出色的项目云卷

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

      推荐PyPI第三方库


热门话题
java本机方法的源代码可用吗?   java如何使父方法抛出异常?   java Android以编程方式设置不同屏幕大小/密度的布局   java如何使用一个变量来管理所有客户端请求   java输入一个txt文件,每行有一组数字   json java从jsonobject获取jsonarray错误   java将一个(WAV)写入一个文件只会说一个单词(最后一个单词)   java Telnet忽略原始字节   proguard java。运行桌面应用程序时出现lang.VerifyError   java用左键移动JLabel?   java如何在jText区域验证选项卡?   文件服务器客户端Javasocket编程中的字符串搜索   java省略了JSTL中的最后一个逗号<c:out>   java如何找到if或else代码已执行的次数?   java JavaScript WebSocket send()方法未执行   浮点数声明上的java标识符预期错误   java这是指二进制搜索算法吗?   编译mod at:reobfJar java时的minecraft问题。util。拉链ZipException:重复条目   java检测特定的震动运动(如图所示:D)