异构 GPU 混合部署 Whisper,我用 HyperPod 一个集群搞定了

异构 GPU 混合部署 Whisper,我用 HyperPod 一个集群搞定了

老板要语音转文字服务,g5 和 g6e 混着用,托管 Endpoint 搞不定。最后用 SageMaker HyperPod + TensorRT-LLM + Triton 跑通了全流程,这是我的实战记录。

故事的起点

"语音转文字,三天上线。"

老板说得轻巧,我心里发苦。Whisper 模型我熟,但上生产不是跑个 notebook 那么简单。推理要快、服务要稳、GPU 还得省着用。

更头疼的是,g5 实例不够用了,得混上 g6e。两种 GPU 架构不一样,部署方案得重新想。

最终方案:亚马逊云科技 SageMaker HyperPod Cluster + TensorRT-LLM 编译 + Triton 推理服务

一个 EKS 集群管所有 GPU 节点,NLB 统一对外,还带监控。下面是完整实战过程。

先说为什么放弃了托管 Endpoint

我一开始用的 SageMaker 托管 Endpoint。单机型部署没问题,但两种 GPU 混合部署就卡住了:

  • 一个 Endpoint 只能挂一种机型。 g5 一个、g6e 一个,两个 Endpoint 分开管。
  • 请求路由得自己做。 两个 Endpoint 各有 QPS 上限,扩缩容节奏不同步,客户端怎么分发流量全靠自己。

说白了,运维复杂度直接翻倍。

HyperPod Cluster 换了个思路:直接给你一个托管的 EKS 集群,不同 GPU 建不同节点组,Kubernetes 原生调度。弹性伸缩用 Karpenter,监控用 AMP + Grafana。

前期准备:别跳过这几步

Quota 先提

去 Service Quotas 找 SageMaker 下面的 ml.g5.2xlarge for cluster usageml.g6e.2xlarge for cluster usage,把数量提上去。

别偷懒跳过这步。 我第一次就忘了,后面创建节点组直接报 quota 不足,白等了半小时。

编译模型(这步花时间)

核心操作:用 TensorRT-LLM 把 Whisper 编译成高性能版本,打包成 Triton 格式。

bash 复制代码
git clone https://github.com/aws-samples/finetune-and-deploy-whisper-models.git
cd finetune-and-deploy-whisper-models/deployment/sagemaker_triton_tensorrt_llm/hyperpod_hybrid

大坑警告: g5 用的 A10G,g6e 用的 L40S,两个架构的 TensorRT-LLM 编译产物不通用。必须分别编译。我第一次只编译了一份,g6e 节点上模型直接加载失败,debug 了两个多小时才搞清楚。

编译完把模型传 S3、镜像推 ECR。

创建 HyperPod 集群

进 SageMaker 控制台 → HyperPod → Clusters → Create,选 Custom Setup。

关键配置:

  • VPC: 新建或已有都行
  • EKS 版本: 选较新的
  • Storage: 本次不用 FSx,选 none
  • Observability: 先关掉,后面手动配
  • Operator: training/MLops 的 operator 先别勾,省资源

Instance group 是重点:

建两个节点组------g5.2xlarge 和 g6e.2xlarge。进 Advanced configuration,把 Threads per core 改成 2

踩坑: 默认值是 1,不改的话 CPU 只用了一半的超线程能力。我第一次部署 Pod 启动贼慢,排查半天才发现是这个参数。

配置环境 & 部署存储

环境变量

bash 复制代码
cp config.env.example config.env
vi config.env
# 填入集群名称、Region、S3 bucket 等

S3 CSI Driver(让 Pod 能挂载 S3)

bash 复制代码
./create_s3_csi_driver.sh \
  -c <你的EKS集群名称> \
  -r <你的region> \
  -b <你的模型bucket名称>

Load Balancer Controller(让服务能对外暴露)

bash 复制代码
./create_lb_controller.sh \
  -v <你的VPC ID> \
  -c <你的EKS集群名称>

部署 Whisper 推理服务

bash 复制代码
./upload_scripts_to_s3.sh
./deploy_pv_scripts.sh

两个必须改的地方:

  1. whisper-triton-pv-scripts.yaml 里的 subPath → 改成你模型在 S3 的实际路径
  2. Deployment 的镜像地址 → 改成你 ECR 的实际地址

踩坑: subPath 填错不报错!Pod 跑起来了,但挂载目录是空的,Triton 找不到模型,一直 CrashLoopBackOff。kubectl logs 看到 "model not found" 才反应过来。整整卡了一个小时。

验证:一条 curl 搞定

bash 复制代码
kubectl get svc

找到 EXTERNAL-IP,就是 NLB 地址。

bash 复制代码
curl -X POST http://<NLB地址>:8080/invocations \
  -H "Content-Type: application/json" \
  -d "{\"audio_data\": \"$(base64 -i test.wav)\", \"whisper_prompt\": \"\"}" | jq .

返回:

json 复制代码
{
  "code": 0,
  "message": "Success",
  "transcribe_text": " I want to play Søya."
}

到这里,Whisper 推理服务就跑通了。NLB 会自动把请求分发到 g5 和 g6e 节点上的 Pod。

监控:AMP + Grafana

生产环境不上监控等于裸奔。

开启 EKS Private Access

bash 复制代码
aws eks update-cluster-config \
  --name <你的集群名称> \
  --region <你的region> \
  --resources-vpc-config endpointPrivateAccess=true,endpointPublicAccess=true

配 AMP Scraper

EKS 控制台 → Observability → Add Scraper → 上传配置文件(改集群 ID)。

验证采集

bash 复制代码
pip3 install awscurl

WORKSPACE_ID="<你的AMP Workspace ID>"
REGION="us-east-1"
ENDPOINT="https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}"

awscurl --service aps --region $REGION \
  "${ENDPOINT}/api/v1/query?query=nv_inference_request_success" | python3 -m json.tool

Grafana 面板

创建 Amazon Managed Grafana Workspace,关联 Prometheus 数据源,导入仪表板 JSON。

能看到的指标包括:推理请求速率、平均延迟、GPU 利用率/显存/功耗、吞吐量、队列等待时间等。

踩坑清单

现象 根因 修复
Quota 不足 节点组创建失败 没提额度 Service Quotas 申请
模型加载失败 g6e 上 Triton 报错 用了 g5 编译产物 分别编译
Pod 启动慢 起一个 Pod 要好几分钟 Threads per core=1 改成 2
CrashLoopBackOff Triton 反复重启 subPath 填错 检查 S3 路径

总结

HyperPod Cluster 方案的核心优势: 一个 EKS 集群管多种 GPU、NLB 统一入口、K8s 原生弹性伸缩、AMP+Grafana 全套监控。

配置工作比托管 Endpoint 多一些,但灵活性高很多。如果你也有异构 GPU 混合部署的需求,这个方案推荐试试。

相关链接:

相关推荐
yyuuuzz1 天前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
代码N年归来仍是新手村成员2 天前
【AWS】Lambda 初识与服务部署
javascript·react.js·ai·node.js·云计算·ai编程·aws
zhojiew4 天前
在AWS裸金属实例上安装Cubesandbox并集成PydanticAI进行数据分析的实践
数据分析·云计算·aws
yyuuuzz4 天前
aws亚马逊云上运维常见问题梳理
运维·服务器·网络·云计算·aws
亚林瓜子4 天前
AWS S3日志桶常用过期文件生命周期策略
云计算·生命周期·aws·s3·过期·glacier
yyuuuzz4 天前
企业出海场景下的技术适配小经验
运维·服务器·网络·云计算·aws
yyuuuzz7 天前
国外云服务使用的常见技术问题梳理
运维·服务器·网络·数据库·aws
光于前裕于后8 天前
AWS Redshift 集成Zero-ETL和数据共享 Data sharing
云计算·etl·aws
zhojiew9 天前
在AWS中国区实现EKS跨VPC跨区域实现节点加入集群的实践
云计算·aws
认真的薛薛9 天前
Terraform: AWS VPC+可SSH登录EC2
ssh·aws·terraform