EKS 上的多节点 Triton + TRT-LLM 部署#
本仓库提供了在 EKS (Amazon Elastic Kubernetes Service) 上多节点部署 LLM 的说明。这包括构建自定义镜像以启用 EFA 等功能、Helm Chart 和相关的 Python 脚本的说明。此部署流程使用 NVIDIA TensorRT-LLM 作为推理引擎,NVIDIA Triton 推理服务器作为模型服务器。
我们每个节点有 1 个 pod,因此部署需要多节点的模型的主要挑战在于,模型的一个实例跨越多个节点,因此跨越多个 pod。因此,在可以处理请求之前需要准备好的原子单元,以及需要扩展的单元都变成 pod 组。此示例展示了如何解决这些问题,并提供了代码来设置以下内容
用于在 pod 组上启动 Triton+TRT-LLM 的 LeaderWorkerSet: 为了跨节点启动 Triton 和 TRT-LLM,您可以使用 MPI 让一个节点在构成模型一个实例的所有节点(包括自身)上启动 TRT-LLM 进程。这样做需要知道所有涉及节点的主机名。因此,我们需要生成 pod 组并知道它们属于哪个模型实例组。为了实现这一点,我们使用 LeaderWorkerSet,它允许我们创建由一组 pod 组成的“巨型 pod”——一个 leader pod 和指定数量的 worker pod——并提供标识组 membership 的 pod 标签。我们在
deployment.yaml
和 server.py 中配置 LeaderWorkerSet 并通过 MPI 启动 Triton+TRT-LLM。Gang Scheduling(组调度): Gang scheduling 简单来说就是确保构成模型实例的所有 pod 在 Triton+TRT-LLM 启动之前都已准备就绪。我们展示了如何在 server.py 的
wait_for_workers
函数中使用kubessh
来实现这一点。Autoscaling(自动伸缩): 默认情况下,Horizontal Pod Autoscaler (HPA) 扩展单个 pod,但 LeaderWorkerSet 使扩展每个“巨型 pod”成为可能。但是,由于这些是 GPU 工作负载,我们不想使用 CPU 和主机内存使用率进行自动伸缩。我们展示了如何利用 Triton Server 通过 Prometheus 公开的指标,并在
triton-metrics_prometheus-rule.yaml
中设置 GPU 利用率记录规则。我们还演示了如何在pod-monitor.yaml
和hpa.yaml
中正确设置 PodMonitor 和 HPA(关键是仅从 leader pod 抓取指标)。有关正确设置 Prometheus 和公开 GPU 指标的说明,请参阅 Configure EKS Cluster and Install Dependencies。为了使部署能够动态添加更多节点以响应 HPA,我们还设置了 Cluster AutoscalerLoadBalancer Setup(负载均衡器设置): 尽管模型每个实例中有多个 pod,但每个组中只有一个 pod 接受请求。我们展示了如何在
service.yaml
中正确设置 LoadBalancer Service 以允许外部客户端提交请求