EAS常见问题

更新时间:
复制 MD 格式

本文为您介绍在线预测的相关问题。

有问题先问小PAI

PAI智能助手(小PAI)针对PAI全链路产品功能使用提供详细说明及使用指引,提供DSW实例、DLC任务、EAS服务运维诊断能力,自动诊断失败原因,提供下一步操作工具/建议。

image

服务部署与状态异常

服务部署后,您可以通过概览页面的服务实例列表,查看服务实例的状态、日志及事件,以定位问题。

Q: 服务长时间处于等待中状态,如何解决?

服务在部署阶段后会进入到Waiting(等待中)状态,等待资源调度和服务实例启动。当所有服务实例均启动成功后,服务会进入到Running(运行中)状态。可能的情况有:

一、资源不足:服务实例列表中所有实例或部分实例状态为Pending。

大部分原因在于专属资源组中空闲资源不足,导致实例无法调度。

此时,您可以检查专属资源组中的机器节点是否有足够多的空闲资源(包括CPU、MemoryGPU)。如果一个实例需要34 GB的资源,那么在专属资源组中需要至少一个机器节点有34 GB的空闲资源。

重要

为避免在高负载时出现系统故障,机器节点需要预留1个核给系统组件,能调度的资源需要在总资源中减少一个核。

专属资源组节点列表如下所示。如何查看资源组详情,请参见使用EAS资源组。在对应资源组页面,单击机器列表 Tab,通过 CPU (使用/总量)GPU (使用/总量)内存 (使用/总量) 列查看各机器节点的资源使用情况。

二、实例健康检查未完成:服务实例状态为Running,但容器状态一般为[0/1]或[1/2]。

正斜线(/)前面的数字表示启动成功的容器数量,正斜线(/)后面的数字表示总的容器数量。当您使用自定义镜像来部署服务时,实例中会自动注入一个Sidecar容器用于服务的流量控制与监控采集等工作,您无需关心该容器。在控制台您会看到总容器数量为2,即包含了您的自定义容器和引擎的Sidecar容器。此时,需要2个容器状态都为Ready时,服务实例才被视为启动完成,并开始接收流量。

三、实例健康检查未通过:EAS服务配置的端口与代码中设置的端口不一致

问题描述:使用Flask(也可以是FastAPI/Sanic/Django等其他Web框架)提供API接口的EAS服务,部署后发现日志已经显示Running on http://127.0.0.1:7000

[2025-07-18 18:50:46] WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
[2025-07-18 18:50:50]  * Serving Flask app 'service'
[2025-07-18 18:50:50]  * Debug mode: off
[2025-07-18 18:50:50] WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
[2025-07-18 18:50:50]  * Running on all addresses (0.0.0.0)
[2025-07-18 18:50:50]  * Running on http://127.0.0.1:7000
[2025-07-18 18:50:50]  * Running on http://xxx:7000
[2025-07-18 18:50:50] Press CTRL+C to quit

但是PAI控制台显示EAS服务仍在等待中。

问题原因:EAS服务的worker没有通过健康检查。worker暴露的端口号是8089,而Flask提供的是7000。

解决方案:修改EAS服务配置的端口号,使其与代码中端口保持一致,重启服务即可。

Q:服务处于Failed(失败)状态,如何解决?

服务会在以下两种情况处于Failed状态:

  • 服务部署阶段:如果部署时指定的资源(如模型地址等)不存在,服务的当前状态信息中将显示报错原因,通常您可以根据报错信息判断出部署失败的原因。

  • 服务启动阶段:在服务完成部署并调度到资源开始启动时失败,此时会出现状态信息Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.

    该状态信息表示服务中某个实例启动失败,此时您需要在服务概览页面的服务实例列表中查看失败状态,来判断具体的失败原因。实例失败有如下几种情况:

    • 服务实例在启动阶段因内存用超发生OOM被系统杀掉,这种情况需要调大服务内存来重新部署。实例状态:服务实例因内存不足被系统终止(OOMKilled),此时上次状态列显示为 OOMKilled(247),表示容器因超出内存限制被终止,可结合重启次数上次退出原因列进一步确认。

    • 服务在启动阶段代码错误发生Crash,该情况下上次状态Error(error code),您需要单击实例操作列下的日志按钮进一步排查服务日志,来定位服务启动失败的原因。

    • 服务镜像拉取失败,参见镜像拉取失败(ImagePullBackOff)怎么办?

Q:镜像拉取失败(ImagePullBackOff)怎么办?

如果服务实例列表中看到上次退出原因ImagePullBackOff,通常是镜像拉取失败。如果状态列有图标,可以单击查看具体原因。

常见镜像拉取失败原因如下:

失败原因

可能的报错

解决方案

系统盘空间不足

no space left on device

扩容系统盘

ACR访问控制未配置

no such host

使用镜像公网地址,需为ACR开通公网访问

使用镜像内网地址:

  1. EAS添加专有网络如eas_vpc

  2. ACR企业版实例的访问控制中添加eas_vpc,参见ACR配置专有网络的访问控制

EAS网络配置问题

dial tcp ***** timeout

使用镜像公网地址时,需要EAS配置访问公网

鉴权信息缺失或错误

  • 401 Unauthorized

  • authorization failed

ACR企业版实例如果没有配置公开匿名拉取,跨地域通过公网拉取,部署时需配置镜像仓库下载的用户名和密码。 获取请参见配置访问凭证

根据镜像服务与EAS服务所处地域情况,使用建议如下:

  • 同地域:推荐使用镜像内网地址拉取镜像。

  • 跨地域:ACR个人版只能使用镜像公网地址。ACR企业版根据以下情况选择:

    • 安全性和稳定性有较高要求,使用镜像内网地址,需通过CEN打通VPC,参见跨地域或从IDC访问ACR企业版实例

    • 业务场景较为简单,或暂时无法完成内网打通,使用镜像公网地址,作为临时解决方案。通过公网下载,速度会比较慢。

关于ACR企业版实例,注意点如下:

  • 需根据情况配置专有网络和公网的访问控制。

  • 如仓库没有配置公开匿名拉取,那么跨地域通过公网地址拉取时,EAS服务需配置镜像仓库下载的用户名和密码。

Q: EAS服务停止后自动重启

问题描述:EAS服务停止一段时间后自动重启。

部署事件记录如下:

部署事件列表显示服务版本从 24 升级到 25 期间的状态变化,时间范围为 2024-08-31 17:38:29 至 18:52:56。事件状态依次包含 DeployingScalingHotUpdateRunning 等,信息列显示 Service is now runningStage scale completeService is now auto scalingSuccessfully synchronized resources 等消息,可用实例数在 0 与 1 之间变化,表明服务在版本更新过程中经历了缩容、部署同步和热更新后自动恢复运行。

问题原因:

这种情况是因为服务实例配置了弹性伸缩,且最小实例数为0。在一段时间没有流量后,实例数会自动缩容到0。因自动缩容导致的无可用实例,如果有请求就会触发自动扩容(不需要达到设置的扩容指标阈值)。

是否自动扩容可以根据部署事件中auto scaling的描述来判断。

部署事件中,信息列出现Service is now auto scaling,表明服务被自动触发扩容,随后事件状态从Waiting经过Scaling变为Running,可用实例数从0变为1。

解决方案:

  • 如不再需要该服务,可直接删除。

  • 如不想删除服务,可主动停止(通过控制台点击停止,或者调用API接口StopService)。主动停止的服务无法通过流量触发扩容。

  • 如果不希望弹性扩缩容导致服务自动停止,请不要将最小实例数设置为0。

  • 您也可以根据实际需要关闭弹性扩缩容,防止意外流量触发扩容启动。

Q: PAI-EAS启动报错IoError(Os { code: 28, kind: StorageFull, message: "No space left on device" })

问题描述

[2024-10-21 20:59:33] serialize_file(_flatten(tensors), filename, metadata=metadata)

[2024-10-21 20:59:33] safetensors_rust.SafetensorError: Error while serializing: IoError(Os { code: 28, kind: StorageFull, message: "No space left on device" })

[2024-10-21 20:59:35] time="2024-10-21T12:59:35Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh

问题原因:EAS实例系统盘被大量模型文件占据,造成服务无法正常启动。

解决方案:

方案一:为EAS实例扩容系统盘

方案二:如果是模型文件过大,考虑将模型文件存储到外部存储(OSS、NAS等),通过存储挂载来读取。

Q: 部署报错:fail to start program with error:fork/exec /bin/sh: exec format error

exec format error 表明操作系统无法执行目标程序文件,最常见的原因是可执行文件或容器镜像的 CPU 架构与运行它的宿主机系统架构不兼容

建议切换其他资源规格尝试。

Q:报错:Invalid GPU count 6, only supported: [0 1 2 4 8 16]

为了最大化多GPU间的通信效率,为单个服务指定的GPU数量必须是2的幂次方。

支持分配0,1,2,4,8,16卡。

资源问题

计算资源及系统盘使用问题,详情请参见资源配置-常见问题

服务更新与扩缩容

Q: EAS的扩缩容策略

扩缩容策略需由客户根据业务需求自行选择:支持水平自动扩缩容定时扩缩容

若选择水平自动扩缩容,可以基于自定义指标(如 QPS、CPU 使用率等)进行配置。具体指标的计算方式和配置方法,请参见水平自动扩缩容

为避免因指标波动导致频繁扩缩容,系统对阈值设置了 10% 的容忍区间。例如,当您将 QPS 阈值设为 10 时,实际触发扩容的条件通常为 QPS 持续高于 11(即 10 × 1.1)。这意味着:

  • 若 QPS 在 10–11 之间短暂波动,系统可能不会立即扩容;

  • 只有当 QPS 持续稳定在 11–12 或更高时,才会触发扩容操作。

该机制有助于减少不必要的资源变动,提升系统稳定性与成本效益。

Q: 扩容的实例在哪?

如果使用专属资源组,并配置了弹性资源池,在专属资源组中没有可用节点资源时,会使用公共资源组扩容。

Q:如何平滑更新服务

  • 问题详述:在更新服务时,需保证服务不中断,并且在专属资源不足时,能临时使用公共资源来完成更新,更新完成后再将实例调度回专属资源组。

  • 解决方案:需要组合使用滚动更新高优资源重调度弹性资源池

    1. 配置滚动更新:保证服务不中断。在服务功能 > 稳定保障下配置滚动更新策略。详见滚动更新与优雅退出。在自定义部署页面的稳定保障区域,开启滚动更新开关,在弹出的配置对话框中设置超过期望的实例数最大不可用实例数参数,然后单击确定

    2. 开启弹性资源池:允许在专属资源组不足时,将超出的实例部署到按量付费的公共资源组。详见弹性资源池

    3. 开启高优资源重调度:当专属资源组释放出空间后(例如旧实例被销毁),系统会自动将在公共资源组上的实例“调度”回专属资源组,以节省成本。

服务调用问题

服务调用报错

根据返回的状态码排查,详情请参见附录:服务状态码与常见报错

HTTPS与自定义域名

Q:服务是否支持 HTTPS 调用? 

支持。您只需将服务地址中的 http:// 替换为 https:// 即可进行加密传输。如果客户端(如 Python requests)报告 SSL 证书验证错误,这通常是客户端环境配置问题,而非 EAS 服务本身的问题。

Q:如何强制使用 HTTPS 访问?

  • 共享网关:不支持强制 HTTPS。

  • 专属网关:支持。您可以在专属网关配置中开启 HTTPS 重定向,开启后,所有通过 HTTP 的访问请求都将被自动重定向到 HTTPS。

Q:能否使用自定义域名调用?

可以。您需要创建并使用全托管专属网关,并在网关中配置您的自定义域名。详情请参见使用专属网关

Token 管理

Q:Token 是否会过期或变化?

不会。服务部署后生成的 Token 是长期有效的。服务的重启、更新(除非手动修改鉴权方式)或扩缩容都不会改变 Token。只有当您手动重置 Token 或删除服务时,它才会失效。

Q:能否为一个服务创建多个 Token?

不支持。一个 EAS 服务实例仅支持一个认证 Token。如需实现多用户权限管理或分别计量,建议结合使用阿里云 RAM 鉴权等更灵活的方案。

其他调用问题

Q:如何为LLM服务启用流式响应 (Streaming)?

EAS 服务本身不提供全局的流式开关。您必须在每次 API 调用的请求体(Request Body)中明确指定需要流式输出。例如,调用兼容 OpenAI 格式的 LLM 服务时,在 JSON 请求体中加入 "stream": true 即可。

Q:VPC 地址调用与 VPC 高速直连的区别

  • VPC 地址调用:VPC地址调用是内网SLB+网关的模式(公网地址是公网SLB+网关),这是比较经典的请求模式。在这种模式下,请求需要通过SLB4层转发和网关的7层转发之后到达服务实例。在大流量高并发的场景中,通过转发会带来一定的性能开销,同时网关也会有带宽的限制(默认1 Gbps)。

  • VPC 高速直连:EAS提供了高速直连的访问模式,既解决了性能和扩展性的问题,也无须增加额外的成本。开通VPC高速直连后,相当于打通了您的VPCEAS服务VPC之间的网络通路。您的请求通过EAS提供的服务发现功能对服务进行寻址,并在客户端代码中通过软负载的方式发起负载均衡的服务请求。这个过程需要使用EAS提供的SDK来进行访问,并将endpoint_type设置为DIRECT即可。

    例如在Python SDK使用说明的场景中,您可通过在代码中增加如下一行代码,来将调用由网关改为直连:

    • client = PredictClient('http://pai-eas-vpc.cn-hangzhou.aliyuncs.com', 'mnist_saved_model_example')
      client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
      client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) # Direct link
      client.init()

权限与网络

Q:为什么RAM用户无法自动创建或删除EAS服务关联角色?

只有拥有指定权限的用户才能自动创建或删除AliyunServiceRoleForPaiEas。因此,当RAM用户无法自动创建或删除AliyunServiceRoleForPaiEas时,您需要为其添加相应的权限策略,具体操作方法如下:

  1. 通过脚本配置的方式将如下权限策略创建为自定义策略。具体操作,请参见创建自定义权限策略

    创建或删除服务关联角色的权限策略

    {
      "Statement": [
        {
          "Action": "ram:CreateServiceLinkedRole",
          "Resource": "*",
          "Effect": "Allow",
          "Condition": {
            "StringEquals": {
              "ram:ServiceName": "eas.pai.aliyuncs.com"
            }
          }
        }
      ],
      "Version": "1"
    }
  2. 将上一步创建的自定义策略授权给目标RAM用户。具体操作,请参见管理RAM用户的权限

Q:EAS服务内部如何访问公网?

EAS服务内部默认不通公网,如果您有访问公网的需求,需要为EAS服务配置具有公网访问能力的专有网络。请参见EAS访问公网或内网资源

服务管理

Q:EAS实例是否支持 SSH 登录?

不支持。EAS 作为一个托管服务,不提供进入容器内部的 SSH 权限。如需在容器启动时执行特定命令,请在服务配置的运行命令中指定。

Q:EAS服务状态有哪些?

目前,EAS服务有以下几种状态,您也可以前往模型在线服务(EAS)页面的服务状态列进行查看。

  • Creating:创建中

  • Waiting:等待中(等待实例启动完毕)

  • Stopped:已停止

  • Failed:已失败

  • Updating:升级中(实例会被更新)

  • Stopping:停止中

  • HotUpdate:升级中(热更新,不更新实例)

  • Starting:启动中

  • DeleteFailed:删除失败

  • Running:运行中

  • Scaling:升级中(实例扩缩容中)

  • Pending:等待中(等待具体处理)

  • Deleting:删除中

  • Completed:已完成

  • Preparing:准备

Q: 如何查看服务由哪个RAM用户创建

可通过操作审计控制台进行事件查询,事件名称选择CreateService,详见通过操作审计控制台查询事件

Q:可以公网下载EAS官方镜像么?

PAI官方镜像是平台内部镜像,只能在PAI平台上使用,不能在除平台容器之外的地方下载。

Q:PAI-EAS 服务名称和服务 ID 的唯一性规则是什么?

  • 服务名称唯一性:EAS 服务名称在单个地域内全局唯一。若创建服务时提示"服务名已存在",但模型在线服务(EAS)列表中未显示该服务,说明该名称已被当前地域下的其他用户占用,请更换一个未被使用的服务名称后重试。

  • 服务 ID 唯一性:PAI-EAS 服务 ID 具有全局唯一性,由系统自动分配,不可手动指定。

Q:PAI-EAS 模块停用后再次使用是否需要重新购买?找不到已购服务实例怎么办?

  • 无需重新购买:PAI-EAS 模块开通后长期有效,后续使用时只需在 PAI 控制台中选择或创建一个工作空间,并在该工作空间内创建 EAS 实例即可,无需再次购买或重新开通。

  • 找不到实例的排查步骤

    1. 登录 PAI 控制台,确认页面顶部当前选择的工作空间是否正确。

    2. 若工作空间已被删除或切换,请在概览页或目标工作空间下重新查看模型在线服务(EAS)列表。

    3. 若列表显示无数据且无实例,说明尚未在该工作空间内创建实际计费的 EAS 实例。仅开通模块本身不产生费用,也无需执行额外的删除操作。

其他

Q:部署EAS服务时选择不到OSS Bucket?

在部署EAS服务时,您可以通过挂载的方式来配置模型和代码。请确保所使用的OSS存储空间和NAS文件系统与EAS服务位于同一地域,否则将无法进行选择。

Q:EAS服务资源从按量付费转为包年包月

  • EAS服务支持从按量付费转为包年包月

    登录PAI控制台,进入模型在线服务(EAS)页面,然后单击目标服务操作列下的更新,在资源信息区域,将资源类型公共资源更新为EAS资源组。在模型部署配置页面的资源信息区域,资源类型提供公共资源EAS资源组资源配额三种选项,还需配置资源组实例数以及CPU(核数)内存(GB)GPU(卡数)等部署资源。

  • EAS专属资源组资源不支持从按量付费转为包年包月。

Q:Tensorflow问题

详情见TensorFlow常见问题