在Alluxio上运行深度学习框架
- Table of Contents {:toc}
随着数据集的增长和计算能力的增强,深度学习已经成为人工智能领域的流行技术。深度学习模型在各个方面的性能都在不断提高,可访问的数据量越来越大,并具备训练规模更大的神经网络的处理能力。深度学习的兴起推动了人工智能最新技术的发展,但也暴露了数据访问和存储系统中存在的一些难题。在此页面中,我们将进一步介绍深度学习工作负载面临的存储挑战,并介绍 Alluxio 如何帮助应对这些挑战。
深度学习的数据挑战
深度学习在机器学习中之所以流行是因为有大量可用数据,而更大的数据量通常会带来更好的性能。当然,不是所有的训练数据都能用于深度学习框架(Tensorflow、Caffe、torch)。例如,深度学习框架已经与一些现有的存储系统集成,但并非所有集成的存储都可用。数据的子集可能无法用于训练,从而导致训练性能和效果下降。
计算资源与存储资源逐步分离的趋势使得远程存储系统成为必然。在云计算中使用远程存储系统很常见,可以实现按需资源分配,继而提高资源利用率、灵活性和弹性,并降低成本。当深度学习训练使用远程存储系统中的数据时,数据必须通过网络传输,由此增加深度学习的训练时间。额外的网络 I/O 也将增加成本和数据处理的时间。
Alluxio 如何帮助解决深度学习的存储问题
深度学习中存在一些与数据管理相关的问题,而 Alluxio 可以帮助应对数据访问的挑战。简单来说, Alluxio 是一个虚拟文件系统,它透明地连接到现有的存储系统,并将它们作为一个统一的系统呈现给用户。Alluxio通过统一命名空间,可以将许多存储技术,包括 S3、Azure 和 GCS 等云存储挂载到 Alluxio 中。由于 Alluxio 已经实现与存储系统的集成,深度学习框架只需要与 Alluxio 交互就能够访问任何连接到 Alluxio 的存储中的数据。这样一来,来自任何数据源的数据都可以用于训练,因此可提升模型训练的性能。
Alluxio 还包含一个 FUSE 接口,给用户带来便捷和熟悉的使用体验。Alluxio 实例可以通过 Alluxio FUSE 挂载到本地文件系统,因此与 Alluxio 交互就像与本地文件和目录交互一样简单。这使得用户能够继续使用熟悉的工具和范例来与其数据进行交互。由于 Alluxio 可以连接到多个不同的存储,因此用户可以像访问本地文件或目录一样访问任何存储中的数据。
Alluxio 还可以为常用数据提供本地缓存。这一功能在数据离计算较远时尤其有用。由于 Alluxio 可以将数据缓存在本地,访问数据时不会产生网络I/O,因此可以让深度学习训练更经济高效,并且减少训练所需时间。
在 Alluxio FUSE上 使用 Tensorflow
本页中我们以 Tensorflow 深度学习框架为例,来介绍Alluxio如何帮助进行数据访问和管理。我们将按照 Alluxio Tensorflow 文档的说明在 Alluxio Fuse 上运行 Tensorflow 基准测试。
在将Alluxio一次性挂载到底层存储后,各类底层存储中的数据都可以通过Alluxio立即访问,并且基准测试也可以在不对Tensorflow或基准测试脚本进行修改的情况下透明地访问数据。这极大地简化了应用程序开发,否则应用程序开发将需要集成每个特定的存储系统并对访问凭证进行配置。
Alluxio还带来了性能上的优势。基准测试以图像/秒(images/sec.)为单位,根据输入训练图像评估训练模型的吞吐量。训练涉及各类资源利用的三个阶段:
- 数据读取 (I/O):从数据源中选择和读取图像文件。
- 图像处理 (CPU):将图像记录解码为图像、预处理并将其分成小批次。
- 模型训练 (GPU):计算和更新多个卷积层中的参数
通过将 Alluxio worker 与深度学习框架并置部署,Alluxio 可将远程数据缓存到本地供将来访问,从而实现数据本地化。如果没有Alluxio,缓慢的远程存储访问可能会导致 I/O 瓶颈并致使 GPU 资源无法得到充分利用。例如,在基准测试模型中,我们发现 AlexNet 的架构相对简单,因此当存储访问变慢时更容易导致 I/O 瓶颈。 Alluxio 在 EC2 p2.8xlarge 机器上可实现近 2 倍的性能提升。