
在 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 与 GrafanaHelm Chart 会通过ServiceMonitor将 Triton 的指标暴露给 Prometheus再由 Grafana 展示。因此即使你暂时不想看 Grafana 面板也必须先部署 Prometheus 和 Grafana否则指标采集链路不完整详见部署 Prometheus 与 Grafana一节GPU 节点可选但强烈推荐如果你希望 Triton 使用 GPU 执行推理集群需要包含足够数量的 GPU 节点官方文档推荐使用EC2 G4 实例并且节点上安装的 NVIDIA 驱动与 CUDA 版本必须与所使用的 Triton 镜像版本相匹配。完成环境准备后整体部署流程分为四步准备模型仓库 → 部署 Prometheus/Grafana → 用 Helm 部署推理服务 → 发送推理请求验证。安装 HelmHelm 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 --clusterrolecluster-admin --serviceaccountkube-system:tiller $ helm init --service-account tiller --wait如遇问题可参考 Helm v2 官方安装文档v2.helm.sh/docs/install。准备模型仓库Model RepositoryTriton 通过模型仓库发现并加载可供推理的模型。你可以直接使用已有的模型仓库也可以按下面的方式从源码仓库获取官方示例模型仓库。获取示例模型仓库并上传到 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.region、secret.id、secret.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 KeyAWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEYS3 访问凭证 Secret Key从源码结构看这一设计保证了凭据以 Kubernetes Secret 的方式交付而不是明文写入 Deployment 清单避免敏感信息直接暴露在 Pod 定义中。部署 Prometheus 与 GrafanaTriton 的推理指标由 Prometheus 采集、由 Grafana 可视化。即便你不需要 Grafana 面板也必须完成本步因为 Triton Helm Chart 默认假定 Prometheus 与 Grafana 已就绪ServiceMonitor需要由 Prometheus Operator 处理。推荐使用kube-prometheus-stack一键安装这两个组件。关键参数serviceMonitorSelectorNilUsesHelmValuesfalse是为了让 Prometheus 能发现下文部署在examplerelease 中的 Triton 指标$ helm install example-metrics --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValuesfalse 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主 ServiceLoadBalancer类型暴露 8000/8001/8002 三个端口额外创建一个*-metricsService将metrics端口容器内 8002映射为集群内 8080通过ServiceMonitormonitoring.coreos.com/v1以15 秒的抓取间隔interval: 15s采集 Triton 指标端点。ServiceMonitor正是前文设置serviceMonitorSelectorNilUsesHelmValuesfalse的原因该参数控制 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理解它有助于你判断各项默认行为启动参数容器以如下参数启动 Tritontritonserver --model-store{{ .Values.image.modelRepositoryPath }} \ --model-control-modepoll \ --repository-poll-secs5其中--model-store指向 S3 模型仓库路径--model-control-modepoll与--repository-poll-secs5表示 Triton 每 5 秒轮询一次模型仓库自动感知新增或更新的模型对应模型管理中的轮询模式。GPU 资源通过resources.limits[nvidia.com/gpu]申请 GPU数量由values.yaml的image.numGpus控制默认 1。健康检查livenessProbe检查/v2/health/livereadinessProbe检查/v2/health/ready其中就绪探针设置了initialDelaySeconds: 5、periodSeconds: 5确保只有服务真正就绪后才会接收流量。安全上下文securityContext设置runAsUser: 1000与fsGroup: 1000以非 root 用户运行容器。覆盖默认配置的三种方式Helm 提供了多种覆盖默认配置的方式可按需选用方式一直接编辑 deploy/aws/values.yaml。该文件是 Chart 的核心参数入口主要参数如下参数默认值说明replicaCount1推理服务器实例数即集群规模image.imageNamenvcr.io/nvidia/tritonserver:26.08-py3Triton 镜像地址NGCimage.pullPolicyIfNotPresent镜像拉取策略image.modelRepositoryPaths3://triton-inference-server-repository/model_repository模型仓库路径S3 URIimage.numGpus1每个实例申请的 GPU 数量service.typeLoadBalancer对外 Service 类型secret.region/secret.id/secret.key占位值AWS 凭证base64 编码方式二使用--set覆盖单个参数。例如部署一个由 4 个推理服务器组成的集群$ helm install example --set replicaCount4 .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 ChartTriton 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),仅供参考