本文为您介绍在线预测的相关问题。
有问题先问AI助理
阿里云官网AI助理具有强大的智能问答能力,能实时、精准地解答您使用云产品时遇到的问题,快速为您提供技术支持、解决方案和文档指引。
服务状态异常
1. 服务长时间处于Waiting(等待中)状态,如何解决?
服务在部署阶段后会进入到Waiting(等待中)状态,等待资源调度和服务实例启动。当所有服务实例均启动成功后,服务会进入到Running(运行中)状态。如果服务状态长时间处于等待中时,通常可以通过概览页面的服务实例列表,查看服务实例的状态和日志来定位具体原因。可能的情况有:
一、资源不足:服务实例列表中所有实例或部分实例状态为Pending。
大部分原因在于专属资源组中空闲资源不足,导致实例无法调度。如下图所示:
此时,您可以检查专属资源组中的机器节点是否有足够多的空闲资源(包括CPU、Memory和GPU)。如果一个实例需要3核4 GB的资源,那么在专属资源组中需要至少一个机器节点有3核4 GB的空闲资源。
为避免在高负载时出现系统故障,机器节点需要预留1个核给系统组件,能调度的资源需要在总资源中减少一个核。
专属资源组节点列表如下图所示。如何查看资源组详情,请参见使用EAS资源组。
二、实例健康检查未完成:服务实例状态为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
:
但是PAI控制台显示EAS服务仍在等待中:
问题原因:EAS服务的worker没有通过健康检查。worker暴露的端口号是8089,而Flask提供的是7000。
解决方案:修改EAS服务配置的端口号,使其与代码中端口保持一致,重启服务即可。
2. 服务处于Failed(失败)状态,如何解决?
服务会在以下两种情况处于Failed状态:
服务部署阶段:如果部署时指定的资源(如模型地址等)不存在,服务的当前状态信息中将显示报错原因,通常您可以根据报错信息判断出部署失败的原因。
服务启动阶段:在服务完成部署并调度到资源开始启动时失败,此时会出现状态信息
Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.
。该状态信息表示服务中某个实例启动失败,此时您需要在服务概览页面的服务实例列表中查看失败状态,来判断具体的失败原因。实例失败有如下几种情况:
服务实例在启动阶段因内存用超发生OOM被系统杀掉,这种情况需要调大服务内存来重新部署。实例状态如下图所示:
服务在启动阶段代码错误发生Crash,该情况下上次状态为Error(error code),您需要单击实例操作列下的日志按钮进一步排查服务日志,来定位服务启动失败的原因。实例状态如下图所示:
服务镜像拉取失败,参见镜像拉取失败(ImagePullBackOff)怎么办?。
3. EAS服务停止后自动重启
问题描述:EAS服务停止一段时间后自动重启。
部署事件记录如下:
问题原因:
这种情况是因为服务实例配置了弹性伸缩,且最小实例数为0。在一段时间没有流量后,实例数会自动缩容到0。因自动缩容导致的无可用实例,如果有请求就会触发自动扩容(不需要达到设置的扩容指标阈值)。
是否自动扩容可以根据部署事件中auto scaling的描述来判断。
解决方案:
如不再需要该服务,可直接删除。
如不想删除服务,可主动停止(通过控制台点击停止,或者调用API接口
StopService
)。主动停止的服务无法通过流量触发扩容。如果不希望弹性扩缩容导致服务自动停止,请不要将最小实例数设置为0。
您也可以根据实际需要关闭弹性扩缩容,防止意外流量触发扩容启动。
4. PAI-EAS启动报错IoError(Os { code: 28, kind: StorageFull, message: "No space left on device" })
问题描述:
PAI-EAS启动报错如下
[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等),通过存储挂载来读取。
5. 部署报错:fail to start program with error:fork/exec /bin/sh: exec format error
exec format error
表明操作系统无法执行目标程序文件,最常见的原因是可执行文件或容器镜像的 CPU 架构与运行它的宿主机系统架构不兼容。
建议切换其他资源规格尝试。
6. 报错:Invalid GPU count 6, only supported: [0 1 2 4 8 16]
为了最大化多GPU间的通信效率,为单个服务指定的GPU数量必须是2的幂次方。
支持分配0,1,2,4,8,16卡。
镜像问题
1. 镜像拉取失败(ImagePullBackOff)怎么办?
如果服务实例列表中看到上次退出原因是ImagePullBackOff,通常是镜像拉取失败。如果状态列有如下图标,可以单击查看具体原因。
常见镜像拉取失败原因如下:
失败原因 | 可能的报错 | 解决方案 |
系统盘空间不足 |
| |
ACR访问控制未配置 |
| 使用镜像公网地址,需为ACR开通公网访问。 使用镜像内网地址:
|
EAS网络配置问题 |
| 使用镜像公网地址时,需要给EAS配置访问公网。 |
鉴权信息缺失或错误 |
| ACR企业版实例如果没有配置公开匿名拉取,跨地域通过公网拉取,部署时需配置镜像仓库下载的用户名和密码。 获取请参见配置访问凭证。 |
根据镜像服务与EAS服务所处地域情况,使用建议如下:
同地域:推荐使用镜像内网地址拉取镜像。
跨地域:ACR个人版只能使用镜像公网地址。ACR企业版根据以下情况选择:
对安全性和稳定性有较高要求,使用镜像内网地址,需通过CEN打通VPC,参见跨地域或从IDC访问ACR企业版实例。
业务场景较为简单,或暂时无法完成内网打通,使用镜像公网地址,作为临时解决方案。通过公网下载,速度会比较慢。
关于ACR企业版实例,注意点如下:
需根据情况配置专有网络和公网的访问控制。
如仓库没有配置公开匿名拉取,那么跨地域通过公网地址拉取时,EAS服务需配置镜像仓库下载的用户名和密码。
2. 可以公网下载EAS官方镜像么?
PAI官方镜像是平台内部镜像,只能在PAI平台上使用,不能在除平台容器之外的地方下载。
计算资源使用
1. 专属资源组一直扩容中
通常是因为当前地域资源不足。
对于预付费机器,如果资源不足创建失败,系统会自动创建退款订单,已支付的费用会原路返回。
2. 如何删除专属资源组的预付费机器实例?
前往阿里云资源退订页面,退订不再使用的EAS预付费专属机器。其中:
类型:选择非全额退订。
产品名称:选择EAS专属机器预付费。
单击搜索找到待退订资源,然后单击操作列下的退订资源,并按照控制台操作指引完成退订流程。
3. EAS资源组机器退订后服务实例数据是否会保留?
不保留服务实例数据。
4. 部署EAS服务时为什么不能选择1核2 GB的配置资源?
为避免您在使用时出现问题,目前1核2 GB的资源已下架。因为EAS会在每个机器节点上部署一些系统组件,这些组件会占用部分机器资源。如果机型规格太小,系统组件占用的资源比例会过高,导致您的可用资源比例降低。
5. EAS部署服务数量上限是多少?
EAS服务部署实例数要根据资源的剩余使用量来确定,具体的剩余量可以在控制台的资源组列表的机器列表中查看,详情请参见使用EAS资源组。
如果根据CPU核数来分配任务,那么部署的实例数上限就是 (CPU核数 - 1) / 每个实例使用的核心数。
6. EAS中与4090显卡近似算力的规格?
ecs.gn8ia-2x.8xlarge
性能接近4090。
7. 在特定资源规格下,模型部署后支持的最大并发数是多少?
模型服务的最大并发数与模型、使用场景、资源配置等多因素相关,建议通过服务自动压测了解服务性能。
服务管理
1. EAS实例可以远程ssh连接吗?
EAS不支持远程SSH连接,无法进入容器内调试。如需执行命令,建议您将命令配置在运行命令中。
2. EAS服务状态有哪些?
目前,EAS服务有以下几种状态,您也可以前往模型在线服务(EAS)页面的服务状态列进行查看。
Creating:创建中
Waiting:等待中(等待实例启动完毕)
Stopped:已停止
Failed:已失败
Updating:升级中(实例会被更新)
Stopping:停止中
HotUpdate:升级中(热更新,不更新实例)
Starting:启动中
DeleteFailed:删除失败
Running:运行中
Scaling:升级中(实例扩缩容中)
Pending:等待中(等待具体处理)
Deleting:删除中
Completed:已完成
Preparing:准备
服务调用
1. 服务调用报错,返回状态码如404、401、504等?
404 Not Found
404 错误通常由无效的请求路径、错误的请求体或服务不支持该接口导致。请根据收到的具体错误信息,参考以下场景进行排查。
错误类型1:{"object":"error","message":"The model `` does not exist.","type":"NotFoundError","param":null,"code":404}
问题原因:调用vLLM部署的服务/v1/chat/completions
接口时,请求体中model
参数值为空或无效。
解决方案:model的参数值须为正确的模型名称,可通过v1/models
接口查询。
错误类型2:{"detail":"Not Found"}
错误类型3:调用 BladeLLM 的 /v1/models
接口,返回404: Not Found
。
错误类型4:在线调试页面返回 404,无其它信息。
问题原因:请求路径错误。如在线调试时,基础地址通常是 http://123***.cn-hangzhou.pai-eas.aliyuncs.com/predict/服务名
。错误地修改或删除了 服务名会导致 404。
解决方案:在线调试时,通常不需要删除或修改默认提供的地址,仅追加需要调用的具体API路径。
错误类型5:API调用ComfyUI返回404 not found page
。
问题原因:通过 API 调用Serverless 版本的 ComfyUI 服务 ,该版本不支持 API调用。
解决方案:部署标准版或者API版,详情请参见AI视频生成-ComfyUI部署。
返回 401 Authorization Failed
访问服务时Token未指定、不正确或使用方式错误。请检查:
Token是否正确。服务概览页面,在基本信息区域单击查看调用信息。
说明鉴权Token默认后台自动生成,也可以通过自定义鉴权指定Token,并支持在服务更新时修改Token。
Token是否正确设置。
使用
curl
命令,添加在HTTP请求头的Authorization
字段中。例如:curl -H 'Authorization: NWMyN2UzNjBiZmI2YT***' http:// xxx.cn-shanghai.aliyuncs.com/api/predict/echo
。在使用SDK访问服务时,调用对应的
SetToken()
函数,详情请参见Java SDK使用说明。
请求长时间无响应,最后超时(timeout
/ 504
)
服务器作为网关或代理,但是没有及时从上游服务器收到请求。这通常意味着模型推理耗时过长。解决方法:
在调用代码中,主动延长HTTP请求的超时时间。
对于耗时很长的任务,建议改用EAS的 队列服务(异步调用) 模式,它可以处理批量或长时间运行的推理任务。
更多状态码说明参见附录:服务状态码与常见报错。
2. PAI-EAS服务是否支持https调用?
支持。直接将http替换成https,可进行更安全的加密传输。请确保调用环境支持HTTPS证书验证。如果您在客户端(如Python requests)遇到SSL证书验证错误,这通常是客户端环境配置问题,而非EAS服务本身不支持HTTPS。
3. 如何阻止http访问并仅允许https访问?
共享网关无法设置阻止http访问。专属网关可以打开HTTPS重定向,这样http访问的请求都会默认重定向到https协议来访问。
4. 可以使用自己的域名调用么?
可以,需要使用专属网关,详情请参见通过专属网关调用。
5. Token会过期或变化吗?
不会。服务部署后,Token是长期有效的。重启服务也不会改变。除非您手动重置(通过自定鉴权修改Token)或删除服务。
6. 能否为一个服务创建多个Token?
目前,一个EAS服务实例仅支持一个固定的认证Token。不支持为单个服务创建多个Token来进行权限控制或分别计量。如需实现多用户鉴权管理,建议采用阿里云的RAM鉴权等更复杂的方案
7. 如何为部署的LLM服务启用流式(Streaming)响应?
EAS服务本身不支持在部署时配置为默认流式响应。您必须在每次API调用请求的Body中明确指定需要流式输出。
例如,在调用LLM服务时,在JSON请求体中加入"stream": true
参数即可。
8. 服务VPC地址调用和VPC高速直连调用有什么区别?
VPC地址调用:VPC地址调用是内网SLB+网关的模式(公网地址是公网SLB+网关),这是比较经典的请求模式。在这种模式下,请求需要通过SLB的4层转发和网关的7层转发之后到达服务实例。在大流量高并发的场景中,通过转发会带来一定的性能开销,同时网关也会有带宽的限制(默认1 Gbps)。
VPC高速直连:EAS提供了高速直连的访问模式,既解决了性能和扩展性的问题,也无须增加额外的成本。开通VPC高速直连后,相当于打通了您的VPC和EAS服务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()
9. 如何使用curl命令调用EAS在线服务?
EAS在线服务部署成功后,使用curl命令通过公网地址或VPC地址调用服务。具体操作步骤如下:
获取服务访问地址和Token。
在模型在线服务(EAS)页面,单击目标服务进入概览页面。
在基本信息区域中,单击查看调用信息。
在调用信息对话框的公网地址调用或VPC地址调用页签,分别获取服务的访问地址和Token。
使用curl命令调用服务。
示例如下:
$ curl <service_url> -H 'Authorization: <service_token>' -d '[{"sex":0,"cp":0,"fbs":0,"restecg":0,"exang":0,"slop":0,"thal":0,"age":0,"trestbps":0,"chol":0,"thalach":0,"oldpeak":0,"ca":0}]'
其中:
<service_url>:替换为已获取的服务访问地址。
<service_token>:替换为已获取的Token。
-d:配置为服务请求数据。
其他
系统盘
如何扩容系统盘?
可以在资源信息 > 额外系统盘进行配置,或如下直接修改服务JSON配置文件。
"features": { "eas.aliyun.com/extra-ephemeral-storage": "40GB" }
使用专属资源时,如需配置的额外系统盘大于机器剩余系统盘大小,需删除当前资源,重新购买,并在购买时调整系统盘大小。
网络问题
EAS服务内部如何访问公网?
EAS服务内部默认不通公网,如果您有访问公网的需求,需要为EAS服务配置具有公网访问能力的专有网络。请参见网络配置。
服务存储挂载
部署EAS服务时选择不到OSS Bucket?
在部署EAS服务时,您可以通过挂载的方式来配置模型和代码。请确保所使用的OSS存储空间和NAS文件系统与EAS服务位于同一地域,否则将无法进行选择。
权限
为什么RAM用户无法自动创建或删除EAS服务关联角色?
只有拥有指定权限的用户才能自动创建或删除AliyunServiceRoleForPaiEas。因此,当RAM用户无法自动创建或删除AliyunServiceRoleForPaiEas时,您需要为其添加相应的权限策略,具体操作方法如下:
通过脚本配置的方式将如下权限策略创建为自定义策略。具体操作,请参见创建自定义权限策略。
创建或删除服务关联角色的权限策略
{ "Statement": [ { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "eas.pai.aliyuncs.com" } } } ], "Version": "1" }
将上一步创建的自定义策略授权给目标RAM用户。具体操作,请参见方式一:在RAM用户页面为RAM用户授权。
计费
EAS服务资源从按量付费转为包年包月
EAS服务支持从按量付费转为包年包月
登录PAI控制台,进入模型在线服务(EAS)页面,然后单击目标服务操作列下的更新,在资源信息区域,将资源类型由公共资源更新为EAS资源组。
EAS专属资源组资源不支持从按量付费转为包年包月。
Tensorflow问题
详情见TensorFlow常见问题。