全部产品
云市场

VPC地址调用

更新时间:2020-04-29 15:41:07

一、 优点

  • 避免公网调用中的网络性能开销,提升调用连接速度
  • 内网传输避免流量费用

二、调用前提

  • 需要调用服务器与部署的模型服务位于同一个region,例如服务部署在上海region,需要从上海region内的ECS(云服务器ECS)机器上发起请求。
  • PAI-DSW中的关于ODPS的服务,无法使用此VPC地址调用方式

三、调用方法

在您的EAS在线服务部署完成后,系统会自动帮您生成一个可供公网访问调用的服务地址。

您即可通过上述调用信息进行调用测试:

  1. $ curl http://http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online -H 'Authorization: ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRmNw==' -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}]'

测试链路通畅后,即可开始编写代码调用程序了。

这里EAS为了方便用户的调用,将该调用逻辑进行了封装,并提供了应用较广的Python及Java的官方SDK。

  • 我们推荐您使用官方SDK方式进行调用,可有效节约您的服务调用逻辑编写的时间并提升调用稳定性。

  • 若您需要使用其他语言或希望自己编写实现调用逻辑,我们也在2.3节提供了调用Demo示例,供您参考。此外,自行实现调用逻辑需要根据不同的框架进行服务请求构造,具体请参见《通用processor服务请求数据构造》章节。

2.1 官方SDK调用(Python)

Python SDK使用指南

(1)、安装

  1. pip install -U eas-prediction --user

该Python SDK调用接口详细说明请参见GitHub链接

(2)、编写调用程序

示例(此处以字符串为输入输出的程序为例,更多格式的输入输出的程序Demo(TF、PyTorch等)请参见GitHub链接):

  1. #!/usr/bin/env python
  2. from eas_prediction import PredictClient
  3. from eas_prediction import StringRequest
  4. if __name__ == '__main__':
  5. client = PredictClient('http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com','heart_predict_online')
  6. # 注意上面的client = PredictClient()内填入的信息,是通过对调用信息窗口(下图)中获取的访问地址的拆分
  7. client.set_token('ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRmNw==')
  8. # Token信息在“EAS控制台—服务列表—服务—调用信息—公网地址调用—Token”中获取
  9. client.init()
  10. 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}]')
  11. # 输入请求请根据模型进行构造,此处仅以字符串为输入输出的程序示例
  12. for x in range(0, 1):
  13. resp = client.predict(request)
  14. print(resp)

注意上面的client = PredictClient()内填入的信息,是通过对调用信息窗口(下图)中获取的访问地址的拆分,例:

调用链接:

http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online

转PredictClient:

client = PredictClient('http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com','heart_predict_online')

(3)、调用程序执行

编写完程序后,即可执行,如该python程序文件名为:heart_predict.py

运行:

  1. $ python heart_predict.py

即可得到预测结果:

  1. IT-C02YJ0V8JHD2:Desktop wowei$ python heart_predict.py
  2. [{"p_0":0.9941226679708888,"p_1":0.005877332029111252}]

2.2 官方SDK调用(Java)

Java SDK使用指南

(1)、添加依赖包

编写Java客户端代码使用Maven管理项目,用户需在pom.xml文件中添加客户端所需的依赖包,名为eas-sdk,目前最新release版本为2.0.1,具体代码如下:

  1. <dependency>
  2. <groupId>com.aliyun.openservices.eas</groupId>
  3. <artifactId>eas-sdk</artifactId>
  4. <version>2.0.1</version>
  5. </dependency>

该Java SDK调用接口详细说明请参见GitHub链接

(2)、编写调用程序

示例(此处以字符串为输入输出的程序为例,更多格式的输入输出的程序Demo(TF、PyTorch等)请参见GitHub链接):

  1. import com.aliyun.openservices.eas.predict.http.PredictClient;
  2. import com.aliyun.openservices.eas.predict.http.HttpConfig;
  3. public class Test_String {
  4. public static void main(String[] args) throws Exception{
  5. //启动并初始化客户端
  6. PredictClient client = new PredictClient(new HttpConfig());
  7. client.setToken("ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRmNw==");
  8. // Token信息在“EAS控制台—服务列表—服务—调用信息—公网地址调用—Token”中获取
  9. client.setEndpoint("http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com");
  10. // 注意上面endpoint信息,是通过对调用信息窗口(下图)中获取的访问地址的拆分
  11. client.setModelName("heart_predict_online");
  12. // 填入服务名称
  13. //输入字符串定义
  14. 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}]";
  15. // 输入请求请根据模型进行构造,此处仅以字符串为输入输出的程序示例
  16. System.out.println(request);
  17. //通过eas返回字符串
  18. try {
  19. String response = client.predict(request);
  20. System.out.println(response);
  21. } catch(Exception e) {
  22. e.printStackTrace();
  23. }
  24. //关闭客户端
  25. client.shutdown();
  26. return;
  27. }
  28. }

注意上面的client.setEndpoint()、client.setModelName()内填入的信息,是通过对调用信息窗口(下图)中获取的访问地址的拆分,例:

调用链接:

http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online

拆分转换:

client.setEndpoint("http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com")

client.setModelName("heart_predict_online")

(3)、调用程序执行

编写完程序后,即可执行,得到结果:

  1. [{"p_0":0.9941226679708888,"p_1":0.005877332029111252}]

2.3 自行实现调用

如您希望自己编写实现调用逻辑,可参考以下调用Demo示例进行编写,采用HTTP接口调用:

  1. import requests
  2. url = 'http://1664081855183111.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/heart_predict_online'
  3. # URL信息在“EAS控制台—服务列表—服务—调用信息—公网地址调用—调用地址”中获取
  4. headers = {"Authorization": 'ZGI1YWYxNmQwYjMzMDM1YTNlMmFmNmEzYjIzZTVlZGQ0NDJhYTRmNw=='}
  5. # header信息在“EAS控制台—服务列表—服务—调用信息—公网地址调用—token”中获取
  6. 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}]'
  7. # 这里请按照具体的模型要求的数据格式进行构造,此处仅为字符串为输入输出的程序示例,具体请参考《通用processor服务请求数据构造》文档
  8. resp = requests.post(url, data=data, headers=headers)
  9. print resp
  10. print resp.content

注意,上述代码中的请求数据需按照具体的模型要求的数据格式进行构造,此处仅为字符串为输入输出的程序示例,具体请参考《通用processor服务请求数据构造》文档