介绍
现如今在谈论数据的价值的时候, 经常提到的概念之一就是深度学习, 或者更广泛的说是人工智能. 深度学习系统通常通过大规模的数据集和神经网络算法来训练和完善应用模型, 这就需要强大的计算集群, 高性能可扩展的存储系统来实现.
深度学习的基本概念
人工智能 (AI,Artificial Intelligence) 指由人制造出来的机器所表现出来的智能, 通常 AI 尝试创造类人的用于通用目的的智能设备.
机器学习 (ML,Machine Learning) 是 AI 的一个分支, 通常通过训练的方式来解决特定的问题, 例如图片识别, 语音识别等.
深度学习 (DL,Deep Learning) 是机器学习的一个分支, 通常指机器学习中使用的神经网络算法超过一层, 就称为深度学习. 其中最经常使用的是卷积神经网络(CNN,Convolutional Neural Networks), 通常包括输入层, 隐层(多层), 输出层组成的多层网络, 并且只有响铃的层之间有连接, 同一层及跨层之间无连接, 是一种接近人类大脑的层次结构的分层结构.
三者的关系如下图所示:
深度学习在最近几年得到了飞速的发展, 许多深度学习的框架涌现了出来. 这些框架都依赖于计算图的概念, 计算图定义了需要执行的计算顺序, 并且计算图可以并行地在 GPU 中优化和运行. 目前比较流行的深度学习框架有 TensorFlow,Caffee,Torch 等, 同时一些新的框架也不断涌现出来.
深度学习数据处理流程
深度学习通常包括以下数据处理流程:
数据采集:
根据业务需要, 采业务需要的的数据. 同时, 也有专门的数据公司, 提供数据, 可以直接购买.
清洗标注:
采集后的原始数据可能会存在有缺失值, 重复值, 无效数据等问题, 在使用之前需要进行处理. 处理的过程, 通常针对不同的任务和数据集属性的不同而不同. 例如, 汽车驾驶中等待红绿灯的时间采集的数据是要删除的.
模型训练:
构建适当的算法和模型, 用准备好的训练集训练和修正模型. 这通常需要 GPU 的训练集群来进行训练.
以上步骤完成后, 会将训练完的模型部署到实际的应用环境中, 实际使用模型来进行验证. 部署完成后, 我们可以在实际的应用场景中检验模型的好坏, 同时用实际环境中的场景来验证和完善模型.
以上各个步骤的工作负载特征如下:
从上面的表里, 可以看出, AI 各个流程中, 工作负载表现出了很大的差别, 这对存储系统提出了很高的要求. 不仅要支撑顺序读写的大块工作负载, 也要支撑随机读写的小块 IO 的工作负载.
深度学习对计算力的需求
深度学习近年来取得突破性的进展, 离不开三个方面: 大数据, 深度学习模型, 计算能力的提升(尤其是 GPU 在训练场景中的大量应用). 随着问题规模的不断增大, 数据量的不断增加, 以及训练用的神经网络深度的深度的不断增加, 对计算能力的需求也越来越大.
例如, Nvidia 新发布的 NVIDIA DGX-2 服务器, 包含了 16 个 GPU 单元, 单个机器已经可以提供 2Peta flops 的计算能力.
谷歌的高级研究员, Google Brain 项目的负责人 Jeff Dean 曾说道, 事实证明, 我们真正需要的是超过现在 100 万倍的计算能力, 而不只是区区几十倍的增长.
深度学习对存储系统的需求
共享需求
现在的深度学习通常是由规模庞大的高性能计算集群来完成的, 多个节点并行的读取数据, 协同的来处理一个任务. 因此, 在深度学习的场景中, 需要一个共享的存储空间来收集和存储数据. 将数据共享的好处包括, 深度学习模型准备好后, 立马可以开始运行, 另外也省去了来回拷贝搬运数据的麻烦.
高性能需求
另外, 深度学习需要大量的数据来训练模型, 因此存储系统要提供高带宽来保证数据的流动足够快, 以满足需求. 另外, 在训练的过程中, 算法通常需要随机读取训练集中的训练样本进行训练, 因此在训练过程中, 随机读的负载占大多数, 并且多数图片的训练场景中, 图片文件的大小多数在 1MB 以下, 这就对存储系统的 IOPS 提出了很高的要求.
生命周期管理需求
深度学习的场景中, 还要有完善的数据生命周期的管理功能. 数据从采集到清洗, 标注, 到训练, 然后到归档, 一直处于一个流动的状态, 存储系统要提供完善的数据流动机制和管理机制, 管理起数据的全生命周期.
传统的 NFS 存储, 虽然提供了共享的命名空间, 但是存在以下问题, 单服务器节点是冥想的瓶颈, NFS 协议本身带来的 overhead, 无法提供足够的带宽, 无法满足数据访问低延迟的需求. 另外, 也无法提供一个生命周期管理的功能.
因此, 深度学习的存储系统, 一方面需要提供一个统一的命名空间来共享数据给前端的高性能计算集群, 另一方面为了保证训练业务的流畅性, 要提供高带宽高 IOPS 以满足需求, 最后还需要提供完善的生命周期管理功能.
阿里云文件存储 NAS
阿里云文件存储 NAS 是一个弹性扩展, 高可靠, 高可用, 高性能的分布式文件系统. 它基于 POSIX 文件接口, 天然适配原生操作系统, 共享访问, 同时保证一致性和锁互斥, 并且性能随容量线性扩展.
阿里云文件存储 NAS 架构:
第一层是计算层, 使用标准文件协议 NFS/SMB 或兼容 posix 的定制化客户端来访问文件存储. 第二层是阿里云网络负载均衡 ALB, 把客户端请求轮转发送到前端机. 第三层是负责协议处理的前端机, 协议尽量做到无状态, 涉及状态部分下沉到元数据管理层. 第四层是元数据管理, 把目录树结构转变成 key-value 对, 通过基于 log structure merge tree 的分布式 key-value 来实现. 第五层是元数据和数据持久化在盘古, 使用盘古的分布式存储量提供高达 10PB, 和 99.999999999% 的数据可靠性, 容量可弹性扩展, 按需使用.
元数据和数据分离, NAS Protocol 前端机 IO 直连盘古, 把数据位置信息和元数据一起更新, 前端机通过元数据更新盘古文件的信息. 盘古文件是会散在整个集群的, 所以前端机读写可充分利用整个集群的 IO 能力.
安全隔离, 基于 VPC 安全组提供网络隔离和 ACL 访问控制, 保证海量容器使用共享存储时的数据安全隔离. 同时提供容器到文件存储的传输加密, 保障数据传输过程在不被窃取和篡改.
数据备份, 阿里云文件存储提供文件系统级的数据备份功能, 可以基于灵活的备份策略提供多副本的数据保护, 在发生数据误删除, 错误修改的情景时, 可以使用历史副本恢复数据.
关于文件存储 NAS 的详情, 请参考: https://www.aliyun.com/product/nas
阿里云 CPFS 并行文件系统
随着高性能并行计算大规模商业化时代的到来, 传统并行文件系统面临诸多挑战, 存储资源的急剧增长, 成本高, 运维管理复杂度大, 大规模存储系统的稳定性, 性能随规模无法完全线性扩展等一系列问题困扰广大客户, CPFS 应运而生.
CPFS(Cloud Parallel File System)是基于定制版 Lustre 的并行文件系统,, 提供大型并行数据处理能力, 数据存储到群集中的多个数据节点, 多个客户端可以同时访问这些数据, 为大型高性能计算机集群提供高 IOPS, 高吞吐, 低时延的数据存储服务.
CPFS 架构:
CPFS 架构在盘古之上, 利用 Pangu 的 block 接口为 Lustre 提供块设备. 网络支持 Infiniband 和以太网. CPFS 有以下特点:
超高的数据可靠性
基于飞天盘古分布式存储系统构架的 Lustre 持久化存储, 多份数据拷贝, 99.99999999% 数据可靠性, 远高于传统存储厂商提供的磁盘阵列 raid 的可靠性.
深度优化可用性
基于 paxos ring 的仲裁调度, 自动检测异常服务节点, 并在分钟级别重新提供服务, 远高于传统存储厂商提供的手动配置 HA 的可用性.
符合标准的 POSIX/MPI 接口, 无需对应用做任何修改
高性能, 高并发, 容量, 性能水平扩展
关于并行文件存储 CPFS 的详情, 请参考: https://help.aliyun.com/document_detail/66278.html
CPFS 目前处于公测阶段, 要申请 CPFS 的测试请到如下链接:
https://www.aliyun.com/product/nas
定位到并行文件系统 CPFS 的板块, 点击申请公测.
阿里云深度学习解决方案
解决方案架构
数据上传:
阿里云提供两种数据上传的方式:
闪电立方
闪电立方 Lightning Cube 是阿里云为 TB 乃至 PB 级数据迁移提供的服务. 它使用定制设备, 安全, 高效, 低成本的帮助您把海量数据从本地机房迁移到云端或者是从云端迁移会本地机房.
关于闪电立方的详情, 请参考: https://www.aliyun.com/product/mgw
高速通道
阿里云高速通道 (Express Connect) 服务, 帮助您在 VPC 间, VPC 与本地数据中心间搭建私网通信通道, 提高网络拓扑的灵活性和跨网络通信的质量和安全性. 使用高速通道可以使您避免绕行公网带来的网络质量不稳定问题, 同时可以免去数据在传输过程中被窃取的风险.
关于高速通道的详情, 请参考: https://www.aliyun.com/product/expressconnect
计算集群:
计算集群方面, 阿里云提供 GPU 云服务器, 为 AI 深度学习优化, 提供强大高效的计算能力; 还提供了一站式的弹性高性能计算 (E-HPC) 的公共云服务, 便于管理和使用集群; 在应用层, 还提供了阿里云容器服务, 一键生成 AI 容器集群.
GPU 云服务器 / 弹性裸金属服务器(神龙):
GPU 云服务器是基于 GPU 应用的计算服务, 多适用于 AI 深度学习, 视频处理, 科学计算, 图形可视化, 等应用场景, 型号有 AMD S7150, Nvidia M40, Nvidia P100,Nvidia P4,Nvidia V100 阿里云成为中国首家与 NGC GPU 加速容器合作的云厂商.
关于 GPU 云服务器的详情, 请参考: https://www.aliyun.com/product/ecs/gpu
弹性裸金属服务器 (ECS Bare Metal Instance) 是一种弹性可水平伸缩的高性能计算服务, 计算性能与传统物理机无差别, 具有安全物理隔离的特点, 分钟级的交付周期助你的企业获得实时的业务响应能力, 助力核心业务飞速成长.
关于 GPU 云服务器的详情, 请参考: https://www.aliyun.com/product/ebm
调度方式可以选择 E-HPC 或者容器服务:
弹性高性能计算(E-hpc):
弹性高性能计算 (E-HPC) 基于阿里云基础设施, 为用户提供一站式公共云 HPC 服务, 面向教育科研, 企事业单位和个人, 提供快捷, 弹性, 安全和与阿里云产品互通的技术计算云平台.
关于容器服务的详情, 请参考: https://www.aliyun.com/product/ehpc
容器服务:
容器服务提供高性能可伸缩的容器应用管理服务, 支持用 Docker 和 Kubernetes 进行容器化应用的生命周期管理, 提供多种应用发布方式和持续交付能力并支持微服务架构. 容器服务简化了容器管理集群的搭建工作, 整合了阿里云虚拟化, 存储, 网络和安全能力, 打造云端最佳容器运行环境.
关于容器服务的详情, 请参考: https://www.aliyun.com/product/containerservice
存储系统
文件存储 NAS 容量弹性扩展, 按需使用, 对于集群规模小于 20 台的集群, 满足其深度学习工作负载对文件系统的带宽和 IOPS 需求. 对于大规模的并发极高的集群, 推荐使用并行文件系统 CPFS.
同时, 对于冷数据, 阿里云提供了 OSS 对象存储系统, 并且提供了 Filesync 的迁移服务, 可以方便的将冷数据归档.
阿里云深度学习解决方案设计关注点
提供强大计算能力的同时, 还保证了弹性和易用性:
神龙服务器, 既具有裸服务器的性能, 又有虚拟机的弹性, 并且使用 E-HPC 提供了简单高效的集群管理和调度系统.
一键部署容器集群, 快速建立训练环境.
文件共享方面, 文件存储 NAS 和 CPFS 并行文件系统按需使用, 灵活扩展.
保证稳定性的同时, 提供了全生命周期的数据管理和灵活高效的数据流动机制:
文件存储 NAS 和 CPFS 高可靠, 高稳定, 保证业务的连续性.
数据从采集到训练, 归档, 使用高效的数据传输工具, 压缩数据流动时间.
从采集到归档, 完全的数据生命周期管理.
保证高可靠性的同时, 提供了高性能:
高效可靠的容器管理, 支持海量容器秒级启动, 并经过阿里超大规模验证.
文件存储 NAS 和 CPFS 并行文件系统基于盘古架构, 提供了 11 个 9 个高可靠性的同时, 提供了高带宽和高 IOPS.
阿里云深度学习解决方案部署配置
利用 E-HPC 部署计算集群
建立集群
登录管理控制台, 定位到 弹性高性能计算> 集群, 选择地域(如华东 1), 单击 创建集群.
选择硬件配置, 网络配置等参数, 配置共享存储(文件存储 NAS)!
共享存储在这里配置过后, 计算集群节点系统起来后, 会自动挂载文件系统 NAS.
注意: 目前 CPFS 处于公测阶段, 如果要使用 CPFS 并行文件系统, 需要手动在服务器节点的终端里执行挂载命令.
选择软件配置, 基础配置等参数, 最后点击确认创建集群. 确认配置清单, 配置拓扑图, 大约经过 20 分钟, 您可以回到 E-HPC 集群列表页面, 查看新集群状态. 若新集群所有节点皆处于正常状态, 则集群已创建完毕.
详细步骤及参数, 请参考: https://help.aliyun.com/document_detail/57937.HTML?spm=a2c4g.11186623.2.11.32767c13pITowJ
使用集群:
登录集群, 并使用作业调度系统提交作业. 目前 E-HPC 支持两种作业调度软件 PBS pro 和
SLURM. 详细步骤请参考: https://help.aliyun.com/document_detail/58269.HTML?spm=a2c4g.11186623.2.18.4de045d6BXuXRW
利用 Kubernetes 构建集群
Kubernetes 集群部署
创建 Kubernets 集群
确认集群配置
集群创建成功
阿里云 NAS 文件存储部署
1. 创建 NAS 文件系统
2. 添加挂载点
3. 成功添加挂载点, 挂载地址用于后续对接容器使用
Kubernetes 集群对接 NAS 存储
1. 为集群创建存储卷
2. 成功创建 NAS 存储卷
来源: https://yq.aliyun.com/articles/650928