在 AWS EKS 上使用 Helm 部署 Triton Inference Server:从模型仓库到推理请求的完整指南
2026/9/23 13:28:10 网站建设 项目流程

在 AWS EKS 上使用 Helm 部署 Triton Inference Server:从模型仓库到推理请求的完整指南

【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址: https://gitcode.com/gh_mirrors/server117/server

导读

本文基于 Triton Inference Server 仓库中提供的官方 Helm Chart(位于 deploy/aws),完整讲解如何在 AWS Kubernetes 集群上部署一套可对外提供推理服务的 Triton Inference Server 集群。你将学会:准备 S3 模型仓库、通过replicaCount参数水平扩展推理实例、联合 kube-prometheus-stack 采集并可视化推理指标,以及通过 HTTP/gRPC 发送真实推理请求——最终掌握一套从零到一、可直接复制的 AWS 云端推理服务部署方案。

前置条件与部署前评估

在开始之前,请确认你已经具备以下环境:

  • 一个可用的 Kubernetes 集群,且已安装helm命令行工具(本文后续章节会给出安装方式);
  • Prometheus 与 Grafana:Helm Chart 会通过ServiceMonitor将 Triton 的指标暴露给 Prometheus,再由 Grafana 展示。因此即使你暂时不想看 Grafana 面板,也必须先部署 Prometheus 和 Grafana,否则指标采集链路不完整(详见"部署 Prometheus 与 Grafana"一节);
  • GPU 节点(可选但强烈推荐):如果你希望 Triton 使用 GPU 执行推理,集群需要包含足够数量的 GPU 节点,官方文档推荐使用EC2 G4 实例,并且节点上安装的 NVIDIA 驱动与 CUDA 版本必须与所使用的 Triton 镜像版本相匹配。

完成环境准备后,整体部署流程分为四步:准备模型仓库 → 部署 Prometheus/Grafana → 用 Helm 部署推理服务 → 发送推理请求验证。

安装 Helm

Helm v3(推荐)

本仓库的 Chart 从维护策略上只对 Helm v3 做持续测试与维护。如果集群尚未安装 Helm,请参考官方安装指南(helm.sh/docs/intro/install)快速完成安装。如果你正在使用 Helm v2 并希望迁移到 v3,请参考官方迁移指南(helm.sh/docs/topics/v2_v3_migration)。

Helm v2(历史参考)

注意:官方声明该 Chart 未来只会针对 Helm v3 进行测试和维护,Helm v2 仅作历史参考。

早期版本可参考如下命令安装 Helm v2 及其 Tiller 组件:

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash $ kubectl create serviceaccount -n kube-system tiller serviceaccount/tiller created $ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller $ helm init --service-account tiller --wait

如遇问题,可参考 Helm v2 官方安装文档(v2.helm.sh/docs/install)。

准备模型仓库(Model Repository)

Triton 通过模型仓库发现并加载可供推理的模型。你可以直接使用已有的模型仓库,也可以按下面的方式从源码仓库获取官方示例模型仓库。

获取示例模型仓库并上传到 S3

首先克隆 Triton Inference Server 源码仓库,以获得示例模型文件:

$ git clone https://github.com/triton-inference-server/server.git

然后创建一个 AWS S3 存储桶用于存放模型仓库:

$ aws s3 mb s3://triton-inference-server-repository

按照 QuickStart 的指引下载示例模型仓库,并递归拷贝到 S3 存储桶中:

$ aws s3 cp --recursive docs/examples/model_repository s3://triton-inference-server-repository/model_repository

这里拷贝的 docs/examples/model_repository 是仓库内自带的官方示例模型仓库,其中包含 densenet_onnx、inception_v3_onnx 等经典图像分类模型,可直接用于后续的推理验证。若部分模型文件缺失,可先执行 docs/examples/fetch_models.sh 从公共模型库补全。

为 Chart 提供 AWS 访问凭证

要让部署在 Kubernetes 中的 Triton 容器能够读取 S3 上的模型仓库,需要把 AWS 凭证写入 Helm 的values.yaml。由于 Kubernetes Secret 中存放的是base64 编码后的值,因此需要先对凭证进行编码:

# 区域,例如 us-west-2 echo -n 'REGION' | base64 # Access Key ID echo -n 'SECRECT_KEY_ID' | base64 # Secret Access Key echo -n 'SECRET_ACCESS_KEY' | base64

将三组 base64 编码结果分别填入 deploy/aws/values.yaml 中的secret段。从 Chart 的模板可以看出凭证的传递链路:模板 deploy/aws/templates/secrets.yaml 会读取values.yaml中的secret.regionsecret.idsecret.key三个字段,生成一个名为aws-credentials的 Opaque 类型 Secret;随后 deploy/aws/templates/deployment.yaml 通过secretKeyRef将该 Secret 注入容器的三个环境变量:

环境变量对应 Secret 键用途
AWS_DEFAULT_REGIONAWS_DEFAULT_REGION指定 S3 所在的 AWS 区域
AWS_ACCESS_KEY_IDAWS_ACCESS_KEY_IDS3 访问凭证 Access Key
AWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEYS3 访问凭证 Secret Key

从源码结构看,这一设计保证了凭据以 Kubernetes Secret 的方式交付,而不是明文写入 Deployment 清单,避免敏感信息直接暴露在 Pod 定义中。

部署 Prometheus 与 Grafana

Triton 的推理指标由 Prometheus 采集、由 Grafana 可视化。即便你不需要 Grafana 面板,也必须完成本步,因为 Triton Helm Chart 默认假定 Prometheus 与 Grafana 已就绪(ServiceMonitor需要由 Prometheus Operator 处理)。

推荐使用kube-prometheus-stack一键安装这两个组件。关键参数serviceMonitorSelectorNilUsesHelmValues=false是为了让 Prometheus 能发现下文部署在examplerelease 中的 Triton 指标:

$ helm install example-metrics --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false prometheus-community/kube-prometheus-stack

安装完成后,将 Grafana 服务端口转发到本地浏览器:

$ kubectl port-forward service/example-metrics-grafana 8080:80

在浏览器中访问localhost:8080,即可看到 Grafana 登录页,默认账号为:

  • 用户名:admin
  • 密码:prom-operator

仓库为 AWS 部署场景提供了一份现成的 Grafana Dashboard 模板 deploy/aws/dashboard.json。登录 Grafana 后,使用Import 功能导入该 JSON 文件即可直接查看 Triton 的实时指标面板。从该文件头部可以看到,它依赖 Prometheus 数据源(DS_PROMETHEUS),并包含 Graph 与 Heatmap 两类面板,覆盖了时序曲线与热力图两种指标可视化形态,适合观察推理吞吐、延迟分布等指标随时间的走势。

Chart 中的指标采集链路

Triton Helm Chart 本身也内置了指标采集所需的资源,见 deploy/aws/templates/service.yaml:

  • 主 Service(LoadBalancer类型)暴露 8000/8001/8002 三个端口;
  • 额外创建一个*-metricsService,将metrics端口(容器内 8002)映射为集群内 8080;
  • 通过ServiceMonitormonitoring.coreos.com/v1)以15 秒的抓取间隔(interval: 15s)采集 Triton 指标端点。

ServiceMonitor正是前文设置serviceMonitorSelectorNilUsesHelmValues=false的原因:该参数控制 Prometheus 的 ServiceMonitor 选择器不再限制于同一 Helm release 的标签,从而能够发现 Triton Chart 创建的ServiceMonitor资源。

部署 Triton Inference Server

使用默认配置部署

进入包含Chart.yaml的目录(即 deploy/aws),执行:

$ cd <directory containing Chart.yaml> $ helm install example .

kubectl观察 Pod 状态,等待推理服务 Pod 进入 Running:

$ kubectl get pods NAME READY STATUS RESTARTS AGE example-triton-inference-server-5f74b55885-n6lt7 1/1 Running 0 2m21s

理解默认 Deployment 的构成

Helm 渲染出的 Deployment 定义位于 deploy/aws/templates/deployment.yaml,理解它有助于你判断各项默认行为:

  • 启动参数:容器以如下参数启动 Triton:

    tritonserver --model-store={{ .Values.image.modelRepositoryPath }} \ --model-control-mode=poll \ --repository-poll-secs=5

    其中--model-store指向 S3 模型仓库路径;--model-control-mode=poll--repository-poll-secs=5表示 Triton 每 5 秒轮询一次模型仓库,自动感知新增或更新的模型(对应模型管理中的轮询模式)。

  • GPU 资源:通过resources.limits["nvidia.com/gpu"]申请 GPU,数量由values.yamlimage.numGpus控制(默认 1)。

  • 健康检查livenessProbe检查/v2/health/livereadinessProbe检查/v2/health/ready,其中就绪探针设置了initialDelaySeconds: 5periodSeconds: 5,确保只有服务真正就绪后才会接收流量。

  • 安全上下文securityContext设置runAsUser: 1000fsGroup: 1000,以非 root 用户运行容器。

覆盖默认配置的三种方式

Helm 提供了多种覆盖默认配置的方式,可按需选用:

方式一:直接编辑 deploy/aws/values.yaml。该文件是 Chart 的核心参数入口,主要参数如下:

参数默认值说明
replicaCount1推理服务器实例数,即集群规模
image.imageNamenvcr.io/nvidia/tritonserver:26.08-py3Triton 镜像地址(NGC)
image.pullPolicyIfNotPresent镜像拉取策略
image.modelRepositoryPaths3://triton-inference-server-repository/model_repository模型仓库路径(S3 URI)
image.numGpus1每个实例申请的 GPU 数量
service.typeLoadBalancer对外 Service 类型
secret.region/secret.id/secret.key占位值AWS 凭证(base64 编码)

方式二:使用--set覆盖单个参数。例如部署一个由 4 个推理服务器组成的集群:

$ helm install example --set replicaCount=4 .

replicaCount会直接映射到 Deployment 的replicas字段(见 deploy/aws/templates/deployment.yaml 中的replicas: {{ .Values.replicaCount }}),从而水平扩展推理服务。资源命名则由 deploy/aws/templates/_helpers.tpl 中的模板函数统一生成(遵循 Kubernetes DNS 规范的 63 字符截断规则)。

方式三:编写自定义config.yaml并通过-f传入。这种方式适合一次性覆盖多个参数:

$ cat << EOF > config.yaml namespace: MyCustomNamespace image: imageName: nvcr.io/nvidia/tritonserver:custom-tag modelRepositoryPath: gs://my_model_repository EOF $ helm install example -f config.yaml .

注意,modelRepositoryPath不仅支持s3://,也支持gs://等 Triton 支持的存储后端,便于在混合云场景下复用同一套 Chart。

使用 Triton Inference Server 发送推理请求

获取服务对外地址

默认情况下,推理服务以LoadBalancer类型的 Service 对外暴露。通过以下命令获取外部 IP:

$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... example-triton-inference-server LoadBalancer 10.18.13.28 34.83.9.133 8000:30249/TCP,8001:30068/TCP,8002:32723/TCP 47m

如上例所示,外部 IP 为34.83.9.133。Triton 对外暴露三个端口(对应 deploy/aws/templates/service.yaml 与 deploy/aws/templates/deployment.yaml 中的端口定义):

端口协议/用途
8000HTTP 推理端点
8001gRPC 推理端点
8002Prometheus 指标端点

验证服务元数据

使用curl访问 HTTP 端点的/v2接口,可获取推理服务器的元数据(版本、扩展能力等):

$ curl 34.83.9.133:8000/v2

运行图像分类推理

按照 QuickStart 获取官方图像分类客户端,对 S3 模型仓库中的inception_v3_onnx模型发起推理请求。例如:

$ image_client -u 34.83.9.133:8000 -m inception_v3_onnx -s INCEPTION -c3 mug.jpg Request 0, batch size 1 Image 'images/mug.jpg': 504 (COFFEE MUG) = 0.723992 968 (CUP) = 0.270953 967 (ESPRESSO) = 0.00115997

输出中给出了 Top-3 分类结果及其置信度(COFFEE MUG 置信度约 0.724),说明模型加载成功且推理链路完全打通。若使用 gRPC,将-u参数指向 8001 端口即可。

清理部署

推理服务使用完毕后,使用 Helm 卸载对应 release:

$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE example 1 Wed Feb 27 22:16:55 2019 DEPLOYED triton-inference-server-1.0.0 1.0 default example-metrics 1 Tue Jan 21 12:24:07 2020 DEPLOYED prometheus-operator-6.18.0 0.32.0 default $ helm uninstall example $ helm uninstall example-metrics

由于 kube-prometheus-stack 会安装 CRD,卸载后还应显式删除这些 CRD,避免残留资源:

$ kubectl delete crd alertmanagerconfigs.monitoring.coreos.com alertmanagers.monitoring.coreos.com podmonitors.monitoring.coreos.com probes.monitoring.coreos.com prometheuses.monitoring.coreos.com prometheusrules.monitoring.coreos.com servicemonitors.monitoring.coreos.com thanosrulers.monitoring.coreos.com

最后,若不再需要示例数据,可删除先前创建的 S3 存储桶(注意原文档此处命令中的gs://前缀疑似笔误,实际应为s3://):

$ aws s3 rm -r s3://triton-inference-server-repository

总结

通过 deploy/aws 下的 Helm Chart,Triton Inference Server 可以在一套标准化流程中完成 AWS 云端部署:用 S3 承载模型仓库、用 Secret 注入 AWS 凭证、用replicaCount实现水平扩展、用 kube-prometheus-stack 与ServiceMonitor完成指标采集,再配合仓库自带的 deploy/aws/dashboard.json 实现可视化监控。整条链路从模型准备到推理验证均可在 Kubernetes 上闭环完成,为生产环境的模型服务化提供了一条清晰、可复制的参考路径。

【免费下载链接】serverThe Triton Inference Server provides an optimized cloud and edge inferencing solution.项目地址: https://gitcode.com/gh_mirrors/server117/server

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询