NVIDIA Jetson性能差?那我能在Jetson 集群上部署类似ChatGPT的LLM-LLaMA2模型?

2023-11-30 15:12:09 浏览数 (1)

在群里,经常遇到有开发者说手里有好几块NVIDIA Jetson的板子,看能否将这几块板子“连起来”用。

但是我也说了,你不能认为集群起来的性能会比一台性能更好,于是有人对此表示了疑问:

正好今天小编看到一个教程《Running a ChatGPT-Like LLM-LLaMA2 on a Nvidia Jetson Cluster》

作者在一台装有16GB RAM的Nvidia Jetson板上成功安装了Llama.cpp,可以直接从终端使用机器学习LLM生成类似人类的文本。他运行LLaMA2模型的推理,GPU结果是每秒5Tokens,CPU结果是每秒1Tokens。

然后作者决定搭建一个Jetson集群

由三个节点组成的K3s Kubernetes集群:

  • Node 1: Nvidia Jetson Xavier NX 16GB - 主节点
  • Node 2: Nvidia Jetson Xavier NX 8GB - 工作节点
  • Node 3: Nvidia Jetson Nano 4GB - 工作节点

该集群由运行在Raspberry Pi 4 Model B上的ansible节点管理。它还是一个NFS存储,用于存储数据。通过添加更多节点,可以扩展集群。

该集群由运行在Raspberry Pi 4 Model B上的ansible节点管理。它还是一个NFS存储,用于存储数据。通过添加更多节点,可以扩展集群。作者使用了连接到路由器的非托管5端口交换机,其中主节点和工作节点之间在本地通信,而路由器为主机提供互联网访问。该集群使用每秒1GB的本地网络。IP地址由路由器使用DHCP进行管理。

步骤:

1. 在Raspberry Pi 4上安装Ansible

2.在Raspberry Pi 4上设置NFS共享

3. 轻量级Kubernetes k3S设置

4. Kubernetes仪表板设置

5. 使用Volcano和MPI将llama.cpp部署到K3s集群

系统将创建六个Pod,包括五个工作节点和一个主节点,如下图所示。

主Pod lama-mpi-job-mpimaster-0 负责管理K3s集群中的资源和任务。

正如您所见,作者使用MPI进行了大型语言模型的推理。

以下为作者测试的结果:

最初,我在单个主节点上运行它,每秒大约处理1个标记。然后,我在两个多节点上执行了推理,在每个节点上每秒处理了0.85个标记。最后,我扩展到在所有可用节点上运行推理,在每个节点上每秒处理了0.35个标记。使用MPI在多个节点上扩展大型语言模型的推理时,性能下降是由于节点之间的通信开销和同步延迟导致的,这导致了标记处理速度的降低。节点间通信比单个节点内慢,可能会慢一些,但也可能慢得多,这取决于集群架构等因素.

集群后性能果然下降了

对于这个结果,作者的反思:

MPI实现目前支持流水线并行化,使每个节点能够处理流水线的一部分并将结果传递给后续节点。这种方法允许每个节点有效地专注于模型的有限方面,从而在整个集群中高效分发模型。这与张量并行化不同,其中所有节点可以同时处理图的不同部分,从而更有效地处理复杂模型。

尽管MPI主要设计用于节点间通信和网络,但它不能有效地用于大型语言模型的推理。为了实现这种效率,需要将问题分解为较小的块并将它们分发到不同的节点。一旦每个节点完成其分配的块的处理,就必须重新组织和合并结果以生成最终输出。

在常规推理流水线中使用大型语言模型(LLM)时,每次都必须重新加载模型,这可能会导致相当大的延迟,特别是在处理庞大模型时。在这些情况下,等待模型产生输出的时间可能超过几分钟。

大型语言模型(LLMs)被称为具有所谓的“幻觉”。这意味着它们可以生成看似准确的类似人类文本的信息,但实际上是错误的信息。模型量化的目标是降低参数精度,通常是从16位浮点数降至4位整数。这是4倍的模型压缩。大多数量化方法都会经历一定程度的信息损失,导致性能下降。这个过程涉及模型准确性和推理性能之间的权衡。

在将应用程序分发到多个节点之前,请考虑优化它。将计算密集型任务分布到不同的节点上并不保证它会胜过在单个节点中处理。

除了GPU和CPU外,您还需要足够的RAM(随机访问内存)和存储空间来存储模型参数和数据。所需的RAM量取决于GGML量化的类型和您使用的模型。

作者的完整教程,小编已经翻译好,放在知乎上,大家可以自行阅读:

0 人点赞