GPU 技术大会上采访 Greg Kurtzer

  • Rags Srinivas
  • 周元昊

2017 年 6 月 25 日

话题:语言 & 开发架构AI

NVIDIA 在最近结束的 GPU 技术大会(GPU Technology Conference)上有不少发布,NVIDIA 的 CEO Jensen Huang 在他的主题演讲中谈到了 AI 的重生、深度学习,以及下一代 GPU 的代号Volta,和它将解决的机器学习算法中的一些痛点。

此次大会有一个主题、多场讲座、大量海报以及 GPU 领域新手所喜闻乐见的像深度学习专家一般的上手实验室。大会的话题广泛包括从虚拟现实到最近高性能计算领域所热捧的容器等方面。

InfoQ 就 GPU 技术大会、容器以及高性能计算(HPC)采访了 Gregory M. Kurtzer,他是多个开源项目的负责人和贡献者,参与了包括 Centos,WarewulfSingularity等项目。

InfoQ:GPU 已经发展了一段时间,容器技术也是如此。在容器中使用 GPU 技术有什么新的动向么?

Gregory M. Kurtzer:容器中使用 GPU 技术并没有什么特别“新”的动向,像“nvidia-docker”等技术已经发展了有一段时间。它已经能很好地为操作本地私有资源的科学家服务,同时它也使用了如 Docker 等技术,使得协作和可移植成为可能,但是这些技术主要受限于一般目的的高性能计算及科学计算资源。

Singularity 带来了一种新的模式。它通过支持更大量的科学用例,并专注于计算的可重现及移动化,使容器可以支持高性能计算的资源。所有这些都是 GPU 原生支持的。

InfoQ:可以看到 Docker 和容器技术正进军各个领域。容器化应用对于高性能计算也是如此么?高性能计算是否更适合归属于一个特定的分类?

Gregory M. Kurtzer:为了准确回答这个问题,我想通过区分 Docker 和容器来澄清一下。Docker 是一个容器解决方案,但是除了 Docker 还有许多其他容器解决方案。

从 Docker 的角度来看,它是企业微服务虚拟化的绝佳解决方案。由于它是专为这种用例而量身设计的,因此这正是它所擅长的。它可以用于某些形式的本地、私有科学计算,研究人员可以通过专用笔记本或工作站来访问并构建工作流,再将其推送到 DockerHub 中。但是,如果这些用户希望将其研究扩展到传统的高性能计算上就可能会陷入僵局。

有一些很有声望的倡导者支持在科学计算领域使用 Docker,特别是高性能计算领域,这引起了很多用户的困惑及问题。非常不幸的是,Docker 架构和工作流与传统的高性能计算基础架构并不兼容,每个高性能计算中心都不得不处理这并不令人满意的结果。

现在,如果您像我一样考虑到的是高性能计算应用程序的紧密耦合、高度可扩展、基于 MPI 的应用,那么使用容器就可能并不那么具有吸引力了,因为用户空间的库堆栈必须进行大量调优并对底层硬件进行专门的优化,这势必是以损失可移植性为代价的。

但是,如果考虑的是科学计算应用(通常称为“科学长尾”)以外其他大部分情况,那么这样的用例就很常见而且容易实现。

还有另一种用例正迅速地获得关注。那就是计算敏捷性,也称为计算的移动性,它让用户可以打包特定的科学工作流,并在各种主机和资源上可重复地运行。

InfoQ:您能简单介绍下 Singularity 的历史么?以及它是如何结合容器和高性能计算的?

Gregory M. Kurtzer:Singularity 是一个专注于科学计算的可重现性、移动性、敏捷性和高性能计算兼容性的容器系统。

相较于其他系统,Singularity 为了实现移动性、可重现性和敏捷性,使用单个文件作为容器镜像。将整个操作系统、环境、应用程序和将给定工作流复制的整个软件堆栈的工作流封装在这个镜像中。这样只需简单地复制单个镜像文件,就可以将容器环境从一个系统复制到另一个系统。如果需要为镜像建立分支,同样只需复制文件,如果需要共享镜像,只要设置该文件的 POSIX 权限或通过电子邮件进行发送就可以了。相反,如果在容器中有受控的数据、库或应用程序,则可以以当前限制访问的方式限制对该容器的访问。容器和其他的数据一样,只是一个文件!此外,使用单个文件可以高度优化并发及并行,特别是在高性能并行文件系统上。由于使用了 Singularity 镜像中特定类型的任务,我们在速度上获得了显著的提升。

现在,Singularity 想通过获得对传统共享高性能计算资源的支持,来区别于其他企业所关注的容器系统。高性能计算系统通常已经同时有可信任和不受信任的用户,他们通过命令行 shell 登录到系统,同样是这些用户,我们不单单只想提供容器的访问,同时还要允许他们使用自己的不受信任的容器。Singularity 允许不受信任的用户以可信任的方式运行不受信任的容器,方法是保持父进程和容器化的子进程之间的连接,这些子进程为容器中用户的 shell 限制了权限。Singularity 还可以确保容器内的用户始终与调用的用户相同。一旦这样做,我们就可以阻止任何用户在容器内增加他们的权限。

这是一个与其他企业不同的使用模式,它还能让主机直接共享资源到容器中,从而模糊了容器与主机之间的界限。同时还允许容器内的应用程序与资源管理器和现有高性能计算资源(文件系统、GPU、高性能互连等)轻松集成。

Singularity 的大量使用率直接反映了我们这些功能的必要性。在这一点上,我们正在寻找志愿者或雇佣相关人员来参与到项目中!

InfoQ:NVIDIA 提供了一个 Docker 插件以及一个利用 GPU 的可选命令行。这和 Singularity 有什么区别?

Gregory M. Kurtzer:Nvidia 的 Docker 解决方案利用了 Docker 的设计假设,即取消设备间的隔离,重新映射驱动、库及必要的数据到运行的 Docker 实例中来实现隔离。在独立系统中,该方式可以让容器与主机的 GPU 进行交互,但这并不能解决 Docker 与传统高性能计算系统不兼容的众多其他问题。

Singularity 是专门为传统的高性能计算用例而设计的,并且支持受控的软件、库和数据(例如导出控制、HIPAA、政府或商业机密)。此外,Singularity 可以轻松地模糊主机和容器之间的界限,并方便地使容器化应用原生地与主机 GPU 进行交互。

InfoQ:可以谈论下在高性能计算领域其他与 Singularity 竞争的容器平台么?当前 Singularity 社区的参与度和路线图是什么?尤其在关于 Docker 生态系统方面,比如 Kubernetes、Docker Swarm 等。

Gregory M. Kurtzer:Singularity 的竞争者不多,还没有其他的容器系统专注于使用单个镜像文件来为非 root 用户的计算提供可重现性和移动性。Singularity 抓住了这个机会。

目前,我们希望让 Kubernetes 和 Mesos 支持 Singularity。但不幸的是,这一切都还在研究层面,这些项目的主要维护者对这并不感兴趣(至少我目前看来是这样的)。所以,我们准备了一些资金,希望聘请相关开发者来进行这个工作。

就我们的路线图而言,Singularity 的独特定位是支持“可信计算”和其他需要高度信任,受控制的工作流的范例。这是我们路线图上的一大努力方向,同时还有对后台守护进程容器化的支持,以及 Singularity 处于领先地位的新概念——数据容器。

InfoQ:您在 GPU 技术大会上最大的感想是什么?您认为将来 GPU 将如何发展?

Gregory M. Kurtzer:不敢相信这次大会获得了如此多的关注!在午餐休息时我都被人群弄得晕头转向了,想象一下,在一个飞机机库大小的会场挤满了人。机器学习发展迅速,它代领 GPU 技术提升到了新水准!很欣喜看到 GPU 技术大会的壮大!

主题演讲和其他录音可以在 NVIDIA 的on demand GTC网站查看。

查看英文原文Q&A with Greg Kurtzer from the GPU Technology Conference

语言 & 开发架构AI