电子说
人工智能,尤其是深度学习是一种正在改变人们生活的许多方面的计算技术。深度学习的算法需要大量的数据。数量确实取决于算法和生成的网络模型的目标,但对于一些复杂的模式来说,它可能会运行数亿的输入集合。
人工智能是计算领域的热门话题之一,并且有着充分的理由。深度学习(DL)中的新技术在某些问题上有能力创建比人类精确度更好的神经网络。图像识别是深度学习(DL)模型如何在识别图像中的对象(对象检测和分类)方面实现比人类准确性更好的一个例子。
ImageNet竞赛就是一个例子。自2010年以来,ImageNet大规模视觉识别挑战(ILSVRC)已被用作图像识别改进的衡量标准。在2011年,其错误率约为25%(该工具可以正确识别培训数据集之外的75%的图像)。2012年,深度神经网络(DNN)的错误率降低到16%。在接下来的几年里,其错误率将降至个位数。在2017年,36支参赛团队中有29人的失误率低于5%,这通常要比人类识别做的更好。
深度学习使用各种类型的神经网络,可应用于各种各样的问题。创建深度学习模型通常有两个主要步骤:第一步就是所谓的训练。这是让模型重复读取输入数据集,并调整模型参数以最小化错误(正确输出与计算输出之间的差异)的过程。这一步需要大量的输入,需要极端大量的计算量。
第二步发生在模型训练后,称之为推理。这是训练模型在生产中的部署。生产意味着该模型可用于读取未用于培训的数据。它产生用于某个任务的输出,而不是训练神经网络。这一步也有一个计算组件。它不需要大量计算,它需要实现诸如最小化延迟、最佳可能精度,最大化吞吐量,以及最大化能源效率等目标。
用于执行这两个步骤的计算的软件由框架完成。这些软件工具和数据库可以读取通常用Python编写的脚本,告诉框架需要什么样的操作以及神经网络是什么样的。该代码然后由框架读取,然后执行。框架的例子有Tensorflow、Caffe或PyTorch。
有关IO模式的问题
通过研究深度学习(DL)框架的功能,可以了解IO模式。人们不需要知道具体框架的细节,也不需要了解神经网络背后的数学知识。
深度学习(DL)框架中训练步骤的基本流程非常简单。神经网络需要相当多的输入数据来正确训练网络来执行任务。它可以是图像、视频、音量、数字或几乎任何数据的组合。
人们需要大量的数据。此外,其数据必须非常多样化,并为每个输入提供广泛的信息。例如,确定某人是男性还是女性的简单面部识别需要超过1亿张图像。
输入数据能够以各种方式进行存储,从简单的csv文件中获取真正少量的输入数据,以便了解深度神经网络(DNN)的数据库,以及包含图像的数据库。只要深度神经网络(DNN)可以访问数据并理解输入格式,数据也可以分布在不同的格式和工具中。它也可以是结构化和非结构化数据的组合,只要用户知道数据和格式,并且可以在模型中表达这些数据和格式即可。
存储介质上的数据大小可能会有所不同。在极端情况下,来自MNIST数据集的简单图像是28×28灰度图像(值从0到255)。总共有784个像素,这格式非常小。如今人们拥有4K分辨率的电视机和相机。这将是4,096 x 4,096像素,总共16,777,216个像素。
4K色彩表示通常以8位(256个选择)开始,或者可以达到16位信息。这可能导致非常大的图像。如果将一个4K图像制作为分辨率为4520 x 2540和8位的单个未压缩的tiff文件,则其大小为45.9 MB。而对于16位色的图像来说,其大小为91.8 MB。
如果组织拥有1亿张图片,对于一些面部识别算法来说是合理的,组织拥有这么多文件,这对当今的文件系统来说并不算太坏。在8位图像情况下使用的总空间是4.59 PB。对于使用大型高分辨率图像的单个神经网络(NN)来说,这是相当大的空间。
一般来说,神经网络在训练网络时有两个阶段。第一阶段称为前馈。它接受输入并通过网络进行处理。输出与正确的输出进行比较以产生错误。然后通过网络传播这个错误(反向传播)来调整网络的参数,以便希望减少网络产生的错误。
这个过程继续进行,以便所有图像通过网络进行处理。这被称为epoch(迭代次数,1个epoch等于使用训练集中的全部样本训练一次)。培训一个网络达到所需的性能水平可能需要数百、数千或数万个epoch。深度学习框架(例如Tensorflow或Caffe或PyTorch)负责用户创建的网络模型的整个过程。
整体IO进程
深度学习的IO模式的简要概述是数据一次又一次地被读取。深度学习经常重复读取(重读)。请注意读取一些文字,但与阅读相比,它的工作量是很小的,因为它主要是在神经网络训练期间检查指向。但是,为了改进神经网络训练,可以使用一些影响IO模式的选项。
作为读取或写入数据量的示例,在此假设网络需要1亿张图像,其中每张图像为45.9 MB。此外,假设网络模型需要大约40MB来保存,并且每100个epoch保存一次,并且需要5000个epoch来训练模型。
如前所述,一个epoch需要读取4.59 PB的数据。这需要重复5000次。这总共需要读取22.95EB的数据。如果每个图像是单个文件,它还需要读取500亿个文件。
对于写入IO,模型需要写入50次。这是总共2 GB和50个写入。与读取相比,其工作量是非常小的。
对于这个例子,总共有459个PB执行了100亿个读取IO。随后是40MB的写入IO。整个IO模式总共重复50次。
这是面向识别应用的深度神经网络(DNN)的基本IO模式。为了减少训练时间,可以使用几种技术。以下的主题是从IO角度对这些技术进行快速概述。
训练技巧
神经网络(NN)训练中使用的第一种技术是输入数据的随机混洗。几乎所有的时间都用它来减少所需的历元(参考的时刻点)并防止过拟合(优化模型到数据集,但是模型在现实世界的数据上表现不佳)。
在新的epoch开始之前,数据读取的顺序是随机的。这意味着读取的IO模式是基于每个图像的随机数。在阅读个人图像时是连续的,但在图像之间是随机的。因此,由于随机性,将模式表征为“重读”而非“读取”是困难的。
也有可以从数据库中读取数据的框架。IO模式的读取仍然非常繁重,可能会随机对数据进行混洗。这可能会使IO模式的细节更加复杂化,因为数据库位于内存和框架之间。
有时框架也会使用IO的mmap()函数。这是一个将文件或设备映射到内存的系统调用。当将虚拟内存区域映射到文件时,它被称为“基于文件的映射”。读取某些内存区域将会读取文件。这是默认行为。
无论是否使用mmap(),IO模式仍然是重读的,遵循以上讨论的模式。然而,使用mmap()会使分析复杂化,因为IO直接从文件到内存。
另一种常用的提高训练性能的技术称为批处理。在每个输入图像(包括向前和向后传播)之后更新网络,而不是在输入“批量”图像之后更新网络。网络的反向传播部分对错误进行操作,例如对它们进行平均,以更新网络参数。这通常不会改变IO模式,因为图像仍然需要被读取,但它可能会影响收敛速度。一般来说,它可以减缓收敛速度,但后向传播的发生较少,提高了计算速度。
在使用GPU(图形处理单元)进行训练时,使用批处理还有助于提高性能。批处理不是将文件从CPU移动到GPU,而是允许用户将多个文件复制到GPU。这可以提高从CPU到GPU的吞吐量,并减少数据传输时间。以这个例子为例,批处理大小为32将减少数据传输到3125000个传输的数量。
批处理确实有助于收敛,但不会真正影响IO模式。该模式仍然是随机读取,写入很少。但它可以改变框架创建的输出量。
数据存储与深度学习
人工智能,尤其是深度学习是一种正在改变人们生活的许多方面的计算技术。深度学习的算法需要大量的数据。数量确实取决于算法和生成的网络模型的目标,但对于一些复杂的模式来说,它可能会运行数亿的输入集合。通常,用于训练模型的数据越多,数据越多样化,最终训练的模型就越好。这指向非常大的数据集。
在以往,有人讨论数据将变得越来越冷。这意味着在创建数据后,很少再次使用它。而人们通过检查数据,包括工程和企业数据,并发现了一些非常有趣的趋势:
•这两种工作负载都更加面向写入。读写字节比率已显著下降(从4:1到2:1)
•相对于只读和只写访问模式,读写访问模式增加了30倍。
•文件很少重新打开。超过66%只重开一次,95%少于五次。
•文件很少重新打开。
•研究期间超过90%的活动存储空间未被使用。
•一小部分客户占文件活动的很大一部分。不到1%的客户占文件请求的50%。
而总结数据的总体使用非常容易。
•IO模式非常重视写入。
•数据很少被重复使用,但仍然存在。
比较深入学习算法的IO模式,可以发现它与传统工程师、HPC和企业应用程序的做法几乎完全相反。深度学习非常重读IO导向,数据在设计和训练模型时被重复使用。即使在模型被训练之后,仍然需要用新数据来增加现有的训练数据集,特别是模型输出中的误差。这是为了随着时间的推移对模型进行的改进。
全部0条评论
快来发表一下你的评论吧 !