本文为您介绍在线预测的相关问题。
服务长时间处于Waiting(等待中)状态,如何解决?
服务在部署阶段后会进入到Waiting(等待中)状态,等待资源调度和服务实例启动。当所有服务实例均启动成功后,服务会进入到Running(运行中)状态。如果服务状态长时间处于等待中时,通常可以通过服务详情页面的服务实例列表,查看服务实例的状态来定位具体原因。原因一般分为如下两类:
资源不足:服务实例列表中所有实例或部分实例状态为Pending。
大部分原因在于专属资源组中空闲资源不足,导致实例无法调度。如下图所示:
此时,您可以检查专属资源组中的机器节点是否有足够多的空闲资源(包括CPU、Memory和GPU)。如果一个实例需要3核4 GB的资源,那么在专属资源组中需要至少一个机器节点有3核4 GB的空闲资源。
重要为避免在高负载时出现系统故障,机器节点需要预留1个核给系统组件,能调度的资源需要在总资源中减少一个核。
专属资源组节点列表如下图所示。如何查看资源组详情,请参见管理专属资源组。
实例健康检查未完成:服务实例状态为Running,但容器状态一般为[0/1]或[1/2]。
正斜线(/)前面的数字表示启动成功的容器数量,正斜线(/)后面的数字表示总的容器数量。当您使用自定义镜像来部署服务时,实例中会自动注入一个Sidecar容器用于服务的流量控制与监控采集等工作,您无需关心该容器。在控制台您会看到总容器数量为2,即包含了您的自定义容器和引擎的Sidecar容器。此时,需要2个容器状态都为Ready时,服务实例才被视为启动完成,并开始接收流量。
服务处于Failed(失败)状态,如何解决?
服务会在以下两种情况处于Failed状态:
服务部署阶段:如果部署时指定的资源(如模型地址等)不存在,服务的当前状态信息中将显示报错原因,通常您可以根据报错信息判断出部署失败的原因。
服务启动阶段:在服务完成部署并调度到资源开始启动时失败,此时会出现状态信息
Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.
。该状态信息表示服务中某个实例启动失败,此时您需要在服务详情页面的服务实例列表中查看失败状态,来判断具体的失败原因。实例失败有如下几种情况:
服务实例在启动阶段因内存用超发生OOM被系统杀掉,这种情况需要调大服务内存来重新部署。实例状态如下图所示:
服务在启动阶段代码错误发生Crash,该情况下上次状态为Error(error code),您需要单击实例操作列下的日志按钮进一步排查服务日志,来定位服务启动失败的原因。实例状态如下图所示:
服务镜像拉取失败,这种情况在实例列表中您可以看到实例状态为Pending,上次退出原因为ImagePullBackOff。实例状态如下图所示:
当您使用自定义镜像部署服务时,如果自定义镜像地址拉取失败,通常会出现ImagePullBackOff的情况。您可做如下几个方面的检查:
镜像地址是否正确。EAS在线服务内部默认与公网不通,默认无法拉取公网镜像地址。如果使用个人版ACR镜像,请使用同地域的内网VPC地址来部署。如需使用公网地址来拉取镜像,请参考下一常见问题:EAS服务内部如何访问公网?
当您选择ACR企业版实例中的镜像时,ACR企业版实例的专有网络配置需要和EAS的网络直连配置一致,配置方法如下:
ACR企业版实例专有网络配置:配置专有网络的访问控制。
EAS专属资源组直连配置:配置资源组网络连通。
EAS公共资源组直连配置:配置资源组网络连通。
请判断鉴权信息是否正确。您在控制台上对EAS做过一键授权之后,即可对ACR镜像仓库中的镜像进行免密拉取。个人版镜像仓库直接填镜像地址即可,企业版镜像仓库需要在服务配置中通过
"cloud.docker_registry.instance_id": "cr_xxx"
字段来指定企业版镜像仓库的实例ID。在使用第三方镜像仓库的情况下,您可以使用dockerAuth字段来指定镜像仓库下载的用户名和密码。
EAS服务内部如何访问公网?
EAS服务内部默认不通公网,如果您有访问公网的需求,则需要通过开通到您的VPC的网络直连来实现公网访问,同时需要确保在开通直连时选择的VPC自身具有公网访问的能力。若您的VPC不具备公网访问能力,则需要为该VPC通过创建NAT网关来开通公网访问能力。EAS开通直连的方法可参考文档:
服务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()
服务日志中出现[WARN] connection is closed: End of file或Write a Invalid stream: End of file,如何解决?
客户端与服务端之间的连接断开,服务端在向该连接中回写请求结果时,发现连接已断开后所打的warning日志,连接断开一般分两种情况:
服务端超时断开连接:在Processor模式下,服务端默认超时时间为5秒,您可以通过服务的
metadata.rpc.keepalive
参数来修改。在超时时间到达后,服务端将关闭该连接,并在服务端的监控中记录一个408状态码。客户端超时断开连接:客户端的超时时间由您的调用端代码中设置的超时时间决定。因超时未返回HTTP响应,客户端会主动断开连接,此时服务端的监控记录中会记录一个499状态码。
关于服务请求状态码的详细说明,请参见:附录:服务状态码说明。
Tensorflow/Pytorch processor部署的服务请求在线调试失败,如何解决?
出于性能考虑,TensorFlow/PyTorch Processor的Request Body采用非明文的protobuf格式。目前在线调试仅支持明文的文本格式输入,因此该服务暂时无法在控制台上直接进行在线调试。您可以使用EAS配套提供的SDK来进行请求访问,各语言版本SDK可参考:服务调用SDK。
为什么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专属机器预付费。
单击搜索找到待退订资源,然后单击操作列下的退订资源,并按照控制台操作指引完成退订流程。
如何使用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:配置为服务请求数据。
EAS服务状态有哪些?
目前,EAS服务有以下几种状态,您也可以前往模型在线服务(EAS)页面的服务状态列进行查看。
Creating:创建中
Waiting:等待中(等待实例启动完毕)
Stopped:已停止
Failed:已失败
Updating:升级中(实例会被更新)
Stopping:停止中
HotUpdate:升级中(热更新,不更新实例)
Starting:启动中
DeleteFailed:删除失败
Running:运行中
Scaling:升级中(实例扩缩容中)
Pending:等待中(等待具体处理)
Deleting:删除中
Completed:已完成
Preparing:准备中
EAS资源组机器退订后服务实例数据是否会保留?
不保留服务实例数据。
部署EAS服务时选择不到OSS Bucket?
在部署EAS服务时,您可以通过挂载的方式来配置模型和代码。请确保所使用的OSS存储空间和NAS文件系统与EAS服务位于同一地域,否则将无法进行选择。
部署EAS服务时为什么不能选择1核2 GB的配置资源?
为避免您在使用时出现问题,目前1核2 GB的资源已下架。因为EAS会在每个机器节点上部署一些系统组件,这些组件会占用部分机器资源。如果机型规格太小,系统组件占用的资源比例会过高,导致您的可用资源比例降低。
EAS部署服务数量上限是多少?
EAS服务部署实例数要根据资源的剩余使用量来确定,具体的剩余量可以在控制台的资源组列表的机器列表中查看,详情请参见使用专属资源组。
如果根据CPU核数来分配任务,那么部署的实例数上限就是 (CPU核数 - 1) / 每个实例使用的核心数。
常见报错解决
upstream connect error or disconnect/reset before headers. reset reason: connection termination
通常是由于长连接超时导致请求失败或实例负载不均衡等问题引起。服务端的处理超过客户端配置的HTTP超时时间后,客户端会放弃该请求,主动断开连接,此时服务端监控会出现状态码499,可以查
看监控指标进一步确认。对于推理耗时较长的情况,建议部署异步推理服务。