PAI-EAS支持通过Python官方SDK、Java官方SDK或自行实现调用逻辑的方式对服务进行公网地址调用。

PAI-EAS服务支持以下公网(普通公共网络,区别于VPC网络)调用方式:
  • 通用公网调用
    • 官方SDK调用(Python)
    • 官方SDK调用(Java)
    • 自行实现调用逻辑
  • 通过API网关的公网调用
如果没有特殊要求,则使用通用公网调用即可。如果您通过阿里云API网关创建API并生成公网调用地址,则可以使用API网关公网调用。
说明 通过API网关的公网调用可能产生API网关费用,详情请参见API网关定价

通用公网调用

在PAI-EAS部署模型服务后,系统会自动生成一个公网调用的服务地址。您可以在PAI EAS模型在线服务页面,单击待调用服务服务方式列下的调用信息,查看公网访问地址Token。通过该调用信息可以进行调用测试,示例如下。
$ curl http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online -H 'Authorization: ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRm****' -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}]'
调用测试成功后,即可调用服务。为方便用户调用服务,PAI-EAS封装了调用逻辑并提供了Python和Java官方SDK。推荐使用官方SDK调用服务,从而有效减少编写调用逻辑的时间并提高调用稳定性。如果您需要使用其他语言或自己编写实现调用逻辑,下文也在“自行实现调用逻辑”部分提供了调用Demo供您参考。此外,自行实现调用逻辑需要根据不同框架构建服务请求,详情请参见构建通用Processor服务请求。通过不同方式调用服务的具体方法如下:
  • 使用官方SDK调用(Python):
    1. 安装。
      pip install -U eas-prediction --user
      该Python DSK的调用详情请参见GitHub官网
    2. 编写调用程序。
      以字符串作为输入输出的程序为例,其他格式(TensorFlow或PyTorch等)的输入输出程序示例请参见GitHub官网
      #!/usr/bin/env python
      from eas_prediction import PredictClient
      from eas_prediction import StringRequest
      if __name__ == '__main__':
          #下面的client = PredictClient()入参源于公网调用的访问地址。
          client = PredictClient('http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com','heart_predict_online')
          #Token可以在公网地址调用信息中获取,详情请参见通用公网调用部分。
          client.set_token('ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRm****')    
          client.init()
          #输入请求需要根据模型进行构造,此处仅以字符串作为输入输出的程序为例。
          request = StringRequest('[{"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}]')    
          for x in range(0, 1):
              resp = client.predict(request)
              print(resp)
      其中client = PredictClient()的函数入参源于公网调用的访问地址。例如公网调用的访问地址为http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online,则 PredictClient()函数的调用格式为client = PredictClient('http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com','heart_predict_online')
    3. 执行调用程序。
      $ python heart_predict.py
      其中heart_predict.py为Python程序的文件名,需要根据实际情况修改。获得的预测结果如下。
      IT-C02YJ0V8JHD2:Desktop wowei$ python heart_predict.py
      [{"p_0":0.9941226679708888,"p_1":0.005877332029111252}]
  • 使用官方SDK调用(Java):
    1. 添加依赖包。
      因为编写Java客户端代码需要使用Maven管理项目,所以需要在pom.xml文件中添加客户端依赖包eas-sdk。最新Release版本为2.0.1,代码示例如下。
      <dependency>
        <groupId>com.aliyun.openservices.eas</groupId>
        <artifactId>eas-sdk</artifactId>
        <version>2.0.1</version>
      </dependency>
      该Java SDK调用详情请参见GitHub官网
    2. 编写调用程序。
      以字符串作为输入输出的程序为例,其他格式(TensorFlow或PyTorch等)的输入输出程序示例请参见GitHub官网
      import com.aliyun.openservices.eas.predict.http.PredictClient;
      import com.aliyun.openservices.eas.predict.http.HttpConfig;
      public class Test_String {
          public static void main(String[] args) throws Exception{
              //启动并初始化客户端。        
              PredictClient client = new PredictClient(new HttpConfig());
              //Token可以在公网地址调用信息中获取,详情请参见通用公网调用部分。    
              client.setToken("ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRm****");
              //下面的Endpoint信息源于公网调用的访问地址。
              client.setEndpoint("http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com");
              //配置服务名称。
              client.setModelName("heart_predict_online"); 
              //定义输入字符串。输入请求需要根据模型进行构造,此处仅以字符串作为输入输出的程序为例。
              String request = "[{\"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}]";
              System.out.println(request);  
              //通过PAI-EAS返回字符串。      
              try {
                  String response = client.predict(request);
                  System.out.println(response);
              } catch(Exception e) {
                  e.printStackTrace();
              }
              //关闭客户端。
              client.shutdown();
              return;
          }
      }
      其中 client.setEndpoint()client.setModelName()的函数入参源于公网调用的访问地址。例如公网调用的访问地址为http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online,则 client.setEndpoint()函数的调用格式为client.setEndpoint("http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com")client.setModelName()函数的调用格式为client.setModelName("heart_predict_online")
    3. 执行调用程序。
      执行调用逻辑程序可以获得如下结果。
      [{"p_0":0.9941226679708888,"p_1":0.005877332029111252}]
  • 自行实现调用逻辑。
    PAI-EAS支持使用Python、Java或其他语言自行实现调用逻辑,您需要根据不同框架构建服务请求,详情请参见构建通用Processor服务请求。编写调用逻辑的示例如下。
    import requests
    #URL信息可以在公网地址调用信息中获取,详情请参见通用公网调用部分。
    url = 'http://166408185518****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online'
    #header信息(Token)可以在公网地址调用信息中获取,详情请参见通用公网调用部分。
    headers = {"Authorization": 'ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRm****'}
    #根据具体模型要求的数据格式构造服务请求,此处仅以字符串作为输入输出的程序为例。
    data = '[{"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}]'
    resp = requests.post(url, data=data, headers=headers)
    print resp
    print resp.content

通过API网关的公网调用

  • 调用准备。

    通过API网关的公网调用需要先开通阿里云API网关,费用详情请参见API网关定价

  • 调用方式:
    1. 登录PAI控制台
    2. 在PAI控制台首页,选择模型部署 > EAS-模型在线服务
    3. PAI EAS模型在线服务页面,单击待调用服务服务方式列下的调用信息
    4. 调用信息对话框的公网地址调用页签,单击自动创建
      自动创建API网关PAI-EAS会自动为该服务创建API,并生成一个API网关层的公网地址,您可以直接使用该地址(如下图所示)调用服务。API调用地址至此,已经完成了托管在API网关的API创建工作,下面即可进行调用。您可以自行实现调用代码,或参考下述指引:
      • 登录API网关控制台-API列表(需要切换至您服务所在的地域),查找对应的API,并查看其所在分组。
      • 登录API网关-SDK/文档自动生成(需要切换至您服务所在的地域),查找对应的分组,并下载对应语言的SDK,从而帮助您进行对应语言调用程序的开发。
      更多关于调用的问题,请参见调用API示例
  • 调用示例。

    调用在线预测服务的示例代码(Java)详情请参见在线预测服务调用示例代码(JAVA)

  • API的高级功能(基于API网关):
    • 查看API信息。
      您可以按照如下步骤查看API相关信息:
      1. 登录API网关控制台
      2. 在左侧导航栏,单击开发API > API列表
      3. API列表页面,单击待查看API操作列下的管理,即可查看该API的详细信息。
    • API授权。

      只有授权成功的用户才可以访问您的API,这样的用户身份称为App,详情请参见应用(App)。PAI-EAS在自动创建API时,已经自动为您创建了App身份并完成了授权,如果需要创建其他App,需要手动为其授权,详情请参见4 创建应用和API授权

    • API分组与域名绑定。

      创建的每个API都隶属于某个API分组,可以通过该分组对这组API进行统一管理。API分组默认分配的是二级域名,此二级域名仅供调试使用,如果直接访问该域名,则每天访问次数不能超过1000次。如果有更大的访问需求,可以对该API所在分组进行域名绑定,详情请参见1. 绑定域名步骤