文档

EAS常见问题

更新时间:

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

服务长时间处于Waiting(等待中)状态,如何解决?

服务状态在部署阶段后会进入到Waiting(等待中)状态,等待资源调度和服务实例启动,当所有服务实例均启动成功后,服务会进入到Running(运行中)状态,而服务长时间处于等待中时通常可以通过在服务详情页面的服务实例列表中查看服务实例的状态来定位具体原因,原因一般分为如下两类:

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

此时大多为专属资源组中空闲资源不足,导致实例无法调度。如下图:8da00c3a5f2ebf7f0a110686ae473103

此时,可检查资源组中的机器节点是否有足够多的空闲资源(包括CPU、Memory和GPU),如果一个实例需要3核4 GB的资源,那在资源组中需要至少一个机器节点有3核4 GB的空闲资源。

重要

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

资源组节点列表如下图所示:image

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

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

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

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

  • 服务部署阶段:如部署时指定的资源(模型地址等)不存在,这种情况在服务的当前状态信息中可以看到报错的原因,通常能够根据报错再判断出来部署失败的原因。

  • 服务启动阶段:在服务完成部署并且调度到资源开始启动时失败,此时会遇到如下状态信息:

Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.

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

  • 服务实例在启动阶段因内存用超发生OOM被系统杀掉,这种情况需要调大服务内存来重新部署,实例状态如下图所示:5c694af1e97b7d3c11cea6d6303d1540

  • 服务在启动阶段代码错误发生Crash,该情况下[上次状态]为Error(error code),这种情况需要点击实例列表中的[日志]按钮来进一步排查服务日志定位服务启动失败的原因,实例状态如下图所示:93d610794f407ebfc40a862fe47a9069

  • 服务镜像拉取失败,这种情况在实例列表中可以看到实例状态为Pending,[上次退出原因]为ImagePullBackoff,实例状态如下图所示:22ae9fd7921e974931e7e9f5027169a5

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调用地址是内网SLB+网关的模式(公网地址是公网SLB+网关),这是比较经典的请求模式,在这种模式下请求需要通过SLB的4层转发和网关的7层转发之后到达服务实例,在大流量高并发的场景中通过转发会带来一定的性能开销,同时网关也会有带宽的限制(默认1 Gbps)。EAS暂不提供付费的可扩缩的专属网关,专属网关会给用户带来额外的资源和流量成本。相反EAS提供了高速直连的访问模式,既解决了性能和扩展性的问题,也无须增加额外的成本。在开通直连后,相当于打通了用户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模式下服务端超时默认超时时间为5s,可通过服务的metadata.rpc.keepalive参数来修改,超时时间到达后服务端会关闭该连接,并在服务端的监控中记录一个408状态码。

  • 客户端超时断开连接:客户端的超时时间由用户调用端代码中设置的超时时间决定,超时未返回HTTP客户端会主动断开连接,此时服务端监控中会记录一个499状态码。

关于服务请求状态码的详细说明请参考:附录:服务状态码说明

Tensorflow/Pytorch processor部署的服务请求或在线调试失败,如何解决?

TensorFlow/PyTorch Processor出于性能考虑Request Body是非明文的protobuf格式,目前在线调试只能支持明文的文本格式的输入,因此暂时无法在控制台上直接进行在线调试,而需要使用我们配套提供的SDK来进行请求访问,各语言版本SDK可参考:服务调用SDK

为什么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用户授权

预付费专属资源组的机器实例如何删除?

预付费机器未到期前无法直接删除退订,如有特殊原因需删除,请联系您的商务经理来处理。

如何使用curl命令调用EAS在线服务?

EAS在线服务部署成功后,使用curl命令通过公网地址或VPC地址调用服务。具体操作步骤如下:

  1. 获取服务访问地址和Token。

    1. 模型在线服务(EAS)页面,单击目标服务进入服务详情页面。

    2. 基本信息区域中,单击查看调用信息

    3. 调用信息对话框的公网地址调用VPC地址调用页签,分别获取服务的访问地址和Token。

  2. 使用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:配置为服务请求数据。

  • 本页导读 (1)
文档反馈