关注了就能看到更多这么棒的文章哦~
High-performance computing with Ubuntu
By Daroc Alden
March 27, 2024
SCALE
ChatGLM translation
https://lwn.net/Articles/965516/
在今年的 SCALE 大会上,Jason Nucciarone 和 Felipe Reyes 连续发表了关于使用 Ubuntu 进行高性能计算 (HPC) 的演讲。Nucciarone 谈到了正在进行的 Open OnDemand(一个基于 Web 的 HPC 集群界面)打包工作,旨在使高性能计算集群更加用户友好。Reyes 则介绍了如何使用 OpenStack(一个云计算平台)将硬件的性能优势传递给集群上运行的虚拟机 (VM)。
Open OnDemand
根据 Nucciarone 的幻灯片,高性能计算是:“一种使用超级计算机、计算集群和网格来解决高级科学挑战的范式(paradigm)。” Nucciarone 自称是“Ubuntu HPC 的老前辈”,自 2022 Ubuntu 峰会 之后成立的 Ubuntu HPC 社区团队以来,他一直参与其中。在该峰会上,来自 Canonical 和 Omnivector 的参与者注意到他们在尝试打包软件以用于 HPC 集群时遇到了许多相同的问题,因此组建了 社区团队 来尝试解决这个问题。Nucciarone 呼吁人们加入该小组,哪怕他们目前没有进行任何 HPC 工作,只要对此感兴趣的话都欢迎。
接下来就来到了演讲的重点,他询问为什么即使 HPC 用户是“聪明的人”,他们也经常难以充分利用 HPC 集群?。他给出了一些常见原因的例子,例如 HPC 集群通常使用不同的技术栈,或者系统“太先进”。但他认为这些都不是主要问题。“主要问题是:终端(the terminal)。”
HPC 集群通常组织成一个工作节点池的形式,所有的作业(job)被发送到这里。用户不直接连接到工作节点,而是连接到“头节点(head node)”或“跳转主机(jump host)”,后者为他们提供管理集群的工具。当新的 HPC 用户(总是通过 SSH)连接到集群的头节点时,他们会看到一个 shell 提示符。Nucciarone 指出了这四个问题:可提供性(affordances)、可学习性、一致性和可见性。首先,终端不会告诉用户它能做什么。这使得人们很难知道系统有什么能力。其次,运行 HPC 系统所涉及的语言都有自己的学习曲线。要同时精通 bash、Python 和集群中使用的任何其他编程语言是一项很艰巨的任务。第三,每个工具都有自己的界面和命令行约定。学习一个工具的交互界面并不能保证用户可以将这些知识转移到另一个工具。最后,shell 只是为用户提供了一个空白提示符,它并没有引导他们下一步该做什么。“如果你都不知道你缺乏哪方面的信息,你怎么能开始针对性的学习?”
Nucciarone 提出的解决方案是 Open OnDemand,“一个用于通过互联网访问 HPC 资源的交互式门户”。他还将其描述为一个“超越终端的基于 Web 的应用程序”,并且“专注于提供用于访问 HPC 资源的可视化界面”。他说,使用 Open OnDemand 的好处包括能够使用笔记本等交互式应用程序、与许多现有的集群调度系统兼容,甚至能够“直接在集群上启动桌面会话”(使用户能够在集群上运行图形应用程序)。
Ubuntu HPC 团队一直在努力开发“Charmed HPC”,这是一个使用 Juju 使从头开始部署 HPC 集群变得更加容易的系统。Open OnDemand 可以通过为用户提供更好的开箱即用用户界面来与之结合。但是,要使其工作,Open OnDemand 需要打包用于 Ubuntu,这就是 Nucciarone 目前正在做的事情。
他一直在编写一个 snap,它运行 Open OnDemand 所需的所有服务。他做了一个演示,展示了这如何使启动 Open OnDemand Web 界面变得像安装 snap 然后启动服务一样简单。当然,实际使用 Web 界面进行任何操作都需要有一个配置正确的 HPC 集群并且已经设置好相关连接。
Nucciarone 目前正在研究 OpenID Connect 集成工作并解决 Open OnDemand 的一些内部问题。一个特别的困难是打包 Open OnDemand 所需的 Apache 和 NGINX Web 服务器的自定义版本。当被问及为什么两者都需要同时使用时,Nucciarone 回答说:“老实说,我自己也不太清楚”。他接着说,这就是上游项目的方式,他们的很多工具都是围绕使用 Apache 构建的。
等到他完成最后几个问题的修复,他计划在 Snap Store 中提供 snap。将来,他希望添加对一组基本交互式 Web 应用程序的内置支持,并编写一个 Juju 操作工具以便于部署。Nucciarone 再次呼吁人们加入 Ubuntu HPC 团队,在此结束了他的演讲。
OpenStack
Reyes 的演讲面向的受众略有不同。他谈到了如何使用 OpenStack(一个可以用来配置 HPC 集群的基础设施即服务的平台)来最大限度地提高集群的性能。OpenStack 允许用户在集群上运行虚拟机,透明地处理网络设置、工作负载的迁移等。
他描述了 OpenStack 集群的相关组件,并指出每个人都关心不同的指标优化。不同的人会关心吞吐量、CPU 使用率、延迟等不同指标。他还展示了 Brendan Gregg 的 图表,其中包含了我们用来跟踪这些指标所必备的众多性能观察工具。
OpenStack 用户可以使用许多不同的配置选项来微调其集群的性能。Reyes 解释了如何创建“风格(flavors)”——集群上可用的特定类型的节点,针对特定工作负载进行微调。“你可能拥有一组节点,这些节点可能具有不同的属性”,他解释道。将具有特定属性(例如,固态硬盘)的节点分割成单独的风格可以帮助调度程序决定应该将集群上运行的 VM 分配到哪里。
一旦节点被分成不同的风格,他讨论的其余设置就可以按风格来进行应用了。这些选项的总体主题是使 VM 可用的虚拟化硬件尽可能地映射到底层物理硬件,以避免不必要的开销。Reyes 将其总结为试图采用“良好的表示方式,以便可以更好地利用硬件”。
为了实现这一点,风格可以规定每个 VM 可用的套接字、内核和线程数。然后可以固定这些虚拟 CPU,以确保每个虚拟 CPU 使用特定的物理 CPU。如果没有其他 VM 可以访问这些 CPU,这写措施将确保只有配置的 VM 才能在那里运行。但是,这不足以将 CPU 的完全控制权交给 VM。主机(host)内核仍然可以选择在这些 CPU 上运行内核任务。为了解决这个问题,Reyes 建议添加 isolcpus
命令行选项,以指示 Linux 内核不要在这些 CPU 上调度任务。“这可以保证任何 VM […] 都不会争夺资源。”
他还指出,OpenStack 支持为每种风格配置非一致性内存访问 (NUMA)。通常,内核从硬件中获取有关机器 NUMA 配置的信息。通过将 VM 的虚拟硬件配置为与集群的实际 NUMA 属性匹配,可以让内核利用其 NUMA 来进行优化。默认情况下,VM 只有一个 NUMA 节点,但可以配置更具体的设置,包括“创建非对称定义”的能力。
在问答环节中,Nucciarone 询问可以做些什么来改进这些选项的文档,以便运行私有集群的人知道他们需要做什么。Reyes 回答说,文档确实是一个问题,并且“做出了很多假设”,最终建议可以通过添加更多指向其他地方的链接来改进它,人们可以在这些地方了解 NUMA 等概念。
另一位观众询问文档是否应该包含示例用例。Reyes 在原则上同意该请求,但表示这很棘手,因为人们有时会将文档中的示例视为可以不加理解地复制和粘贴的黄金法则。“如果你不了解你正在运行的东西的特性,最好保持默认设置”。这引发了一些讨论,另一位观众说:“没什么有默认设置是对每个人都适用的”。
最终,Reyes 讨论的配置是高度专业化的,可能最适合那些已经知道 NUMA 和 CPU 固定等细节如何工作的人。他明确表示,虽然这些选项提供了对托管 VM 性能特征的精细控制,但是人们仍然必须要对希望改进的性能特征来进行测量。
结论
高性能计算是一个充满挑战的行业。尽管如此,人们仍在付出巨大的努力,使 Ubuntu 成为构建 HPC 集群的更有用的平台。未来的进展可能会在 Ubuntu 的 HPC 博客 上报道或在 Ubuntu Discourse 论坛 上讨论。
[我要感谢 LWN 的旅行赞助商 Linux 基金会为前往帕萨迪纳参加 SCALE 大会提供的旅行帮助。]
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~