NEWS ���Ŷ�̬ > ��������

富通云腾深度学习容器云帮你造出马良的神笔

admin �����ڣ�2018-08-24
ժҪ��随着 IT 产业的日益发展,云计算这一概念已经深入人心

微信图片_20190103132829.jpg

来自Nvidia和MIT的研究团队,最近搞出了迄今最强的高清视频生成AI,其效果可以堪比神笔马良的神话效果,那就是画什么,就变成什么。通过简单的几笔勾勒,可以生成真实的头像及表情。让我们先来看看效果吧。

微信图片_20190103132856.jpg

还可以变成不同的风格

微信图片_20190103132904.jpg

还可以生成身体的动作

微信图片_20190103132907.jpg

别惊讶!这些的确都是人工智能算法生成的,显然,人工智能将在未来改变艺术、设计等行业,让设计师专注在创造性和灵感上。仔细看看这个研究,在感受酷炫科技的同时,也不禁对这项研究使用的8块GPU集群嘘唏不已。那么,问题来了:

     ●   不会安装也不会配框架可以跑人工智能程序吗?

     ●   可以和别人共享显卡计算资源吗?

     ●   有哪些私有云平台可以提供深度学习的服务?

 

我们今天就来聊聊富通云腾深度学习容器云的一些技术知识,以及如何借助富通云腾深度学习容器云创建深度学习任务。


深度学习与云计算

现如今,深度学习不断推动人工智能的发展,在图像、自然语言处理、 音频处理等领域获得巨大突破。深度学习框架是深度学习开发者的重要工具,它能快速构建各种结构的深度神经网络,通过给定网络的输入和标签数据,框架会自动进行正向传播计算和反向传播计算来完成神经网络的训练过程,获得最终模型。但是不同的深度学习框架基础结构与功能有所不同,这使得开发者需要根据所求解的网络结构类型进行选择,而框架本身又依赖于不同的基础库,配置这些框架以及基础库依赖是十分繁琐的。

随着 IT 产业的日益发展,云计算这一概念已经深入人心。云计算将数台计算机通过网络协同对用户提供服务,拥有高可用性、可扩展性和适用性。随着云计算技术的不断发展,云计算领域和GPU高性能计算领域之间相互借鉴,逐渐形成了相互独立又依存的软、硬件体系结构。利用云计算技术将深度学习框架与 GPU 计算环境结合,将拥有强大计算能力的GPU集群以云服务的形式对外提供给用户,将是十分便捷的。


微信图片_20190103132917.png

容器相关背景知识

虚拟化

虚拟化技术是云计算技术的重要内容,被广泛地应用到各个场景中。各大厂商也分别推出各自的虚拟化产品,如KVM、ESXi、Hype-V等,结合开源或产品化的集群资源管理器构建出云计算系统的基础设施。近几年,以Docker为代表的容器技术逐渐成熟,获得广泛的关注,制定出了容器标准,并将以容器为基础的云计算系统称为容器云。

传统虚拟化技术主要包括完全虚拟化和硬件辅助虚拟化,这两种方式使得在虚拟机使用特定功能时需要硬件对虚拟化的支持。容器技术最早源于LXC( Linux Container),与传统虚拟化技术不同,容器技术通过Linux系统cgroup、namespaces 等技术实现容器间资源隔离,并可以共享内核功能,实现轻量级的虚拟化。在容器技术中,虚拟化的载体被称为镜像,所创建出实际运行的载体称为容器。与传统虚拟机包含完整的操作系统不同,容器中只包含一个精简的操作系统。这使得容器可以被快速创建和启动。对于实际应用,基于容器技术较基于传统虚拟化技术的云计算系统更贴近于计算资源。Jacobsen D M 和Canon R S指出容器技术为科学计算领域带来了变革。已有研究表明,在大部分情况下,容器的性能优于传统虚拟机。


GPU 资源隔离

在使用GPU作为计算加速器的应用程序中,开发者通常可以获取当前系统所有的GPU资源信息,并从中选择合适的GPU设备运行核函数。由于应用程序无法直接获取GPU资源的占用情况,当多用户在集群环境中使用时会造成应用程序间相互抢夺资源。在一般情况下,先提交的GPU计算进程会独占GPU资源,后提交的任务会处于等待状态。如何有效地解决多用户对GPU的并发使用,提高 GPU资源的利用率是 GPU 资源隔离的主要目的。GPU资源隔离是将GPU 根据程序的使用需求在运行前由系统管理者进行分配,多个程序对GPU资源的使用相互独立。

传统GPU资源隔离通常有两种方式:一种是在Hypervisor 层加入 vGPU Manager,利用特定GPU的虚拟化硬件支持,通过固定的模式将GPU 映射到虚拟机中,每个虚拟机都具有独立的显存与核心,这种方式目前被 ESXi 所采用。这种方式最大的优点来源于GPU 硬件对虚拟化的支持,通过专用硬件可将一个性能强大的 GPU 资源拆分为多个性能较弱的 GPU 资源使用,通常被用于解决VDI环境。另一种是通过CUDA环境变量 CUDA_VISIBLE_DEVICES 指定当程序运行时所能获取的 GPU 编号实现隔离。CUDA_VISIBLE_DEVICES 的值是一个由 GPU minor number 组成的列表,当CUDA程序运行获取系统 GPU设备时,系统只会返回列表中编号对应的GPU,且会从 0 开始根据列表顺序重排 minor number,程序会继续从中选择合适的 GPU 设备运行核函数。程序无法获取列表之外的GPU资源,以此实现程序进程间的GPU资源隔离。

与vGPU Manager 不同,通过环境变量的方式是以单一GPU设备为基础单位进行隔离,与vGPU可以从一个GPU设备虚拟为多 个vGPU设备不同,前者可以将单一GPU设备映射到唯一的隔离环境中,后者可以将单一GPU设备映射到多个隔离环境中。HPC 资源调度器 slurm 采用环境变量的方式调度任务所使用的GPU 资源,通过记录 GPU 资源的使用情况,将任务对 GPU 的资源请求通过 CUDA_VISIBLE_DEVICES编号的形式进行调度,任务获取 GPU 编号即获取GPU 资源。但是每个 GPU 对应的 minor number 并非固定的,当系统重新加载 GPU 时,其值会发生改变。这造成程序无法根据 minor number 向 GPU 资源管理器直接获取满足需求的 GPU 资源,也限制了程序的迁移。

容器技术通过cgroup 实现容器间的资源隔离。以Docker容器为例,通过device参数将主机指定设备文件映射到容器中。NVIDIA 公司的开源项目Nvidia-docker 以Docker为基础,对使用 GPU 资源隔离的容器使用操作和运行环境进行封装。Nvidia-docker将主机端的GPU驱动与指定的GPU设备共同映射到容器内,确保容器与主机GPU 驱动一致,避免容器内重新安装驱动的问题。以容器方式对GPU资源隔离的基础单位与环境变量相同,属于一对一的方式进行隔离映射。在深度学习计算中更需要高效的计算能力。三种 GPU 隔离技术的对比如下表1所示

微信图片_20190103133949.jpg

富通云腾深度学习容器云框架结构

富通云腾深度学习容器云是以CloudoorSphere私有云平台为基础。CS平台不仅仅支持高可用的、弹性扩展的Kubernetes集群;也支持基于HyperVisor层的vGPU虚拟化。2016年,Kubernetes在版本1.6后正式加入了Nvidia GPU的调度功能,支持在Kubernetes上运行和管理基于GPU的应用。另一方面,在2018年 GTC 大会上,Nvidia CEO 黄仁勋宣布 Nvidia GPU 已经支持由 Google 孵育的 Kubernetes 容器编排系统了.

微信图片_20190103132923.jpg

当Kubernetes和GPU在CS私有云上相遇,会有什么样美好的事情发生呢?下面的图为富通云腾深度学习容器的基础框架抽象示意图,按照这个框架,物理GPU卡是首先加载在GPU节点上,并通过CS平台上虚拟成若干个vGPU。如果用户在创建kubernetes集群时选择了GPU高性能计算资源以及深度学习资源,那么在创建完毕时,就会自动配置Nvidia的驱动以及高性能计算工具包。富通云腾深度学习容器云还支持多种主流深度学习框架,无需额外配置,在创建任务时,可以配置选择对应的框架。

微信图片_20190103132927.jpg

微信图片_20190103132932.png