Series · Aliyun PAI · Chapter 4

阿里云 PAI 实战(四):PAI-EAS——模型部署、冷启动、以及 TPS 谎言

PAI-EAS 端到端:基于镜像 + OSS 挂权重的部署、三种推理模式、不让账单爆炸的扩缩容、用服务组做灰度发布。配上来自官方 Quick Start 的 vLLM Qwen3 完整部署示例。

EAS 是钱花掉的地方。DSW 一个月几百块跑研发;DLC 是峰值消耗。EAS 24/7 都在烧——因为随时可能有人调你的端点,扩缩容配置里那行"最小副本数"是整个平台杠杆最大的一个旋钮。这篇是我希望第一次 EAS 上线前一天就有人告诉我的事。

EAS 是什么——按文档原话

官方"EAS overview"原话:将训练好的模型快速部署为在线推理服务或 AI Web 应用,支持异构资源、自动扩缩容、一键压测、灰度发布、实时监控。两件事要画线:

  • 它是容器运行时层——你的模型在 OSS,代码在容器镜像,EAS 拉镜像、启动时挂 OSS、跑你的启动命令、监听端口。
  • 它是按副本数自动扩缩——不是 Serverless 函数模型(有一个例外,下面讲)。副本是真实 GPU pod,启动需要 30-120 秒。请按这个量级做规划。

请求路径

EAS 请求路径

文档"运行时镜像部署"里点出的四个组件:

  1. 运行时镜像 — 只读模板,含 OS、CUDA、Python、依赖。可以用 PAI 官方的(vllm:0.11.2-mows0.5.1pytorch:...)或推自己的到 ACR。
  2. 代码和模型不在镜像里,存 OSS / NAS。解耦后更新权重不用重打镜像。
  3. 存储挂载 — 启动时 EAS FUSE 挂载你指定的 OSS 路径到容器内目录,比如 /mnt/data/
  4. 运行命令 — 容器启动后执行的第一条命令,通常拉起你的 HTTP 服务(vllm serve /mnt/data/Qwen/Qwen3-0.6B)。

真实经验: 第一天就把 /mnt/data/ 写进代码里。别让模型路径写死成 /workspace/models/。本地 dev 切到 EAS 就只是改一行配置,不用改代码。

三种推理模式

文档列了三种。请有意识地选——选错要么浪费钱要么浪费延迟。

EAS 三种推理模式

实操判据:

  • 实时同步 — 聊天机器人、RAG 检索、广告排序、搜索。在意 p99。
  • 异步 — 单次 5 秒以上的活:图生、视频生成、PDF OCR 批处理。内置队列按积压扩缩,跟这类任务的心智匹配。
  • 批量 — 能等几分钟的:夜间 embedding、语音转文字。配抢占式实例账单减半。

Quick Start 的真实配置

官方 Quick Start 用 vLLM 部署 Qwen3-0.6B。控制台流程:

  1. 方式: 镜像部署。
  2. 镜像: vllm:0.11.2-mows0.5.1(PAI 官方 EAS 镜像——OpenAI-compatible chat 需要 vLLM ≥ 0.8.5)。
  3. 模型: OSS,oss://your-bucket/models/,挂载点 /mnt/data/
  4. 命令: vllm serve /mnt/data/Qwen/Qwen3-0___6B
  5. 资源: ecs.gn7i-c16g1.4xlarge(1 × A10)。
  6. 点部署,~5 分钟到 Running

拿到一个 OpenAI-compatible 端点,控制台里能看到。调用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["EAS_TOKEN"],          # "查看调用信息" 里的 token
    base_url="https://YOUR-ENDPOINT.cn-shanghai.pai-eas.aliyuncs.com/v1",
)

resp = client.chat.completions.create(
    model="Qwen3-0.6B",
    messages=[{"role": "user", "content": "EAS 是什么?一句话。"}],
)
print(resp.choices[0].message.content)

返回一句话就说明端点活着,去同事面前装巫师吧。

自动扩缩容——做对的版本

这块文档其实没真往死里讲。默认行为(按请求率扩缩,最小副本=1)要么给你冷启动延迟工单,要么给你账单惊喜。

EAS 自动扩缩容——副本随 QPS 变化

真正重要的三个设置:

  • min_replicas — 生产里永远别设 0。7B vLLM 容器冷启 60-120 秒;用户 5 秒就走了。我默认 2(一个高可用,一个冗余)。异步服务可以 0,靠队列兜。
  • max_replicas — 预算刹车。算法:(单副本 p99 QPS) × 2。不知道单副本 QPS 就先跑一键压测,文档"服务压测"里有。
  • 扩缩容指标 — 默认 qps。LLM 服务换成 concurrent_requests(或 vLLM 的 running 指标)。QPS 误导,因为长生成不算多请求。

真实经验: 我见过最浪费的钱是:某服务 max_replicas=50min_replicas=10,但低峰期只有 0.5 QPS。5 张闲置 A10 烧了两个月。出门度假前看一眼周六晚上的监控。

灰度、蓝绿、流量镜像

EAS 用服务组做这些:路由前端指多个服务版本,按百分比切流。同一原语支持流量镜像——把真流量复制一份发去候选版本,丢弃响应,对用户零影响。这是测试新模型最安全的方式。

EAS 服务组——灰度和镜像

任何模型替换我都先 90/10 跑 24 小时,再 50/50,再 0/100。任何一步成功率或 p99 退化,立刻回滚——服务组改流量权重秒级生效。

压测——真的要做

文档有专章讲一键压测。用它。它会自动 ramp QPS,画出副本扩缩,告诉你单副本饱和点。这个数就是你扩缩容配置的依据。不压测就上线,是 “下午 3 点峰值挂了” 工单的头号原因。

180 天暗坑

文档里埋了一句:“EAS 服务连续 180 天处于非 Running 状态会被系统自动删除。” 设个日历提醒。我有过一次配置丢了——团队解散没人续费,要恢复要花一个下午做 vLLM 版本和权重的二分。

下一篇

第五篇收尾,讲 DesignerModel Gallery 这两个零/低代码界面的诚实定位。它们不是工程师第一反应的工具,但用对了能省力,特定场景里它们就是正确答案。

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub