AI Studio在线部署及预测说明

个人博客导航页(点击右侧链接即可打开个人博客):互联网老兵带你入门技术栈 

目录

  1. 功能说明
  2. 通过训练任务生成模型文件
  3. 创建一个在线服务
    3.1 第一步 选择模型文件
    3.2 第二步 确认输入输出
    3.3 第三步 制作参数转换器
    3.4 第四步 沙盒部署
  4. 测试沙盒服务
    4.1 第一步 点击【测试】打开测试页面
    4.2 第二步 填写json格式请求参数
    4.3 第三步 点击【发送】检验返回结果
  5. 部署在线服务
  6. 调用在线服务
    6.1 请求方式
    6.2 调用示例

功能说明

在线部署与预测为开发者提供训练模型向应用化API转换的功能. 开发者在AI Studio平台通过NoteBook项目完成模型训练后, 在Notebook详情页通过创建一个在线服务, 应用模型生成在线API, 使用该API可以直接检验模型效果或实际应用到开发者的私有项目中.目前, 该功能暂时仅对Notebook项目开放。

AI Studio在线部署及预测说明_第1张图片

通过训练任务生成模型文件

  • 在训练任务过程中, 通过调用paddle.fluid.io.save_inference_model`实现模型的保存,保存后的目录需要可以被在线服务使用. 我们以房价预测的线性回归任务为例, 具体代码如下
import paddle
import paddle.fluid as fluid
import numpy
import math
import sys
from __future__ import print_function
BATCH_SIZE = 20
train_reader = paddle.batch(
    paddle.reader.shuffle(
        paddle.dataset.uci_housing.train(), buf_size=500),
        batch_size=BATCH_SIZE)
test_reader = paddle.batch(
    paddle.reader.shuffle(
        paddle.dataset.uci_housing.test(), buf_size=500),
        batch_size=BATCH_SIZE)
params_dirname = "model2"
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
main_program = fluid.default_main_program()
startup_program = fluid.default_startup_program()
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_loss = fluid.layers.mean(cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_loss)
#clone a test_program
test_program = main_program.clone(for_test=True)
use_cuda = False
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
exe = fluid.Executor(place)
num_epochs = 100
# For training test cost
def train_test(executor, program, reader, feeder, fetch_list):
    accumulated = 1 * [0]
    count = 0
    for data_test in reader():
        outs = executor.run(program=program,
                            feed=feeder.feed(data_test),
                            fetch_list=fetch_list)
        accumulated = [x_c[0] + x_c[1][0] for x_c in zip(accumulated, outs)]
        count += 1
    return [x_d / count for x_d in accumulated]
params_dirname = "fit_a_line.inference.model"
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
naive_exe = fluid.Executor(place)
naive_exe.run(startup_program)
step = 0
exe_test = fluid.Executor(place)
# main train loop.
for pass_id in range(num_epochs):
    for data_train in train_reader():
        avg_loss_value, = exe.run(main_program,
                                  feed=feeder.feed(data_train),
                                  fetch_list=[avg_loss])
        if step % 10 == 0:  # record a train cost every 10 batches
            print (step, avg_loss_value[0])
        if step % 100 == 0:  # record a test cost every 100 batches
            test_metics = train_test(executor=exe_test,
                                     program=test_program,
                                     reader=test_reader,
                                     fetch_list=[avg_loss.name],
                                     feeder=feeder)
            print (step, test_metics[0])
            # If the accuracy is good enough, we can stop the training.
            if test_metics[0] < 10.0:
                break
        step += 1
        if math.isnan(float(avg_loss_value[0])):
            sys.exit("got NaN loss, training failed.")
    if params_dirname is not None:
        # We can save the trained parameters for the inferences later
        fluid.io.save_inference_model(params_dirname, ['x'],
                                      [y_predict], exe)
  • 使用已有模型, 可以通过!wget在Notebook中传输模型文件到环境目录。以房价预测的线性回归模型为例, 通过!wget https://ai.baidu.com/file/4E1D1FCC670E4A5E8441634201658107 -O fit_a_line.inference.model传输文件, 解压后直接被在线服务使用.

AI Studio在线部署及预测说明_第2张图片

创建一个在线服务

完成模型训练后, 在Notebook项目页面点击【创建预测服务】

AI Studio在线部署及预测说明_第3张图片

第一步 选择模型文件

  • 勾选模型文件

AI Studio在线部署及预测说明_第4张图片

AI Studio在线部署及预测说明_第5张图片

  • 设置主程序, 主程序为paddle.fluid.io.save_inference_model中参数main_program配置的程序, 在房价预测的示例中,我们使用默认参数调用save_inference_model, 因此将__model__文件设置为主程序.

AI Studio在线部署及预测说明_第6张图片

AI Studio在线部署及预测说明_第7张图片

第二步 确认输入输出

填写模型的输入输出参数. 以房价预测的线性回归模型为例(参数参考), 添加参数如下图所示.

AI Studio在线部署及预测说明_第8张图片

AI Studio在线部署及预测说明_第9张图片

第三步 制作参数转换器

参数转换器帮助用户转化合法输入并完成数据预处理.

  • 方式一:自定义转换器(Python2.7)(推荐).

输入参数转换器方法

def reader_infer(data_args):
  	"""
  	reader_infer 输入参数转换器方法
  	:param data_args: 接口传入的数据,以k-v形式
  	:return [[]], feeder
  	"""
  	#构造内容
  	pass

输出参数转换器方法

def output(results, data_args):
  	"""
  	output 输出参数转换器方法
  	:param results 模型预测结果
  	:param data_args: 接口传入的数据,以k-v形式
 	 	:return array 需要能被json_encode的数据格式
 	 	"""
  	#构造内容
  	pass

AI Studio在线部署及预测说明_第10张图片

转换器代码示例, 以房价预测为例.

输入参数转换器:

import os
import sys
sys.path.append("..")
from PIL import Image
import numpy as np
import paddle.fluid as fluid
from home.utility import base64_to_image
def reader_infer(data_args):
   """
   reader_infer 输入参数转换器方法
   :param data_args: 接口传入的数据,以k-v形式
   :return [[]], feeder
   """
   def reader():
       """
       reader
       :return:
       """
       x = fluid.layers.data(name='x', shape=[13], dtype='float32')
       # y = fluid.layers.data(name='y', shape=[1], dtype='float32')
       feeder = fluid.DataFeeder(place=fluid.CPUPlace(), feed_list=[x])
       CRIM = float(data_args["CRIM"])
       ZN = float(data_args["ZN"])
       INDUS =  float(data_args["INDUS"])
       CHAS = float(data_args["CHAS"])
       NOX = float(data_args["NOX"])
       RM = float(data_args["RM"])
       AGE = float(data_args["AGE"])
       DIS = float(data_args["DIS"])
       RAD =  float(data_args["RAD"])
       TAX = float(data_args["TAX"])
       PTRATIO = float(data_args["PTRATIO"])
       B =  float(data_args["B"])
       LSTAT = float(data_args["LSTAT"])
       return [[[CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO, B, LSTAT]]], feeder
   return reader

输出参数转换器:

def output(results, data_args):
	 """
    output 输出参数转换器方法
    :param results 模型预测结果
    :param data_args: 接口传入的数据,以k-v形式
	 :return array 需要能被json_encode的数据格式
	 """
   lines = []
   for dt in results:
       y = dt.tolist()
       lines.append({"predict": y})
   return lines
  • 方式二: 默认参数, 不设置转换器.

    用户的API参数直接传递给模型.

AI Studio在线部署及预测说明_第11张图片

第四步 沙盒部署

用户可以同时部署至多五个沙盒服务, 用来对比模型优化结果.

录入名称点击【生成沙盒】或者点击【暂存】将沙盒保存到草稿箱.

AI Studio在线部署及预测说明_第12张图片

测试沙盒服务

对沙盒列表中的沙盒服务进行测试,验证是否配置正确。

第一步 点击【测试】打开测试页面

AI Studio在线部署及预测说明_第13张图片

第二步 填写json格式请求参数

AI Studio在线部署及预测说明_第14张图片

第三步 点击【发送】检验返回结果

AI Studio在线部署及预测说明_第15张图片

部署在线服务

点击【正式部署】部署线上API.

  • 一个项目可以创建至多五个沙盒服务, 并选择其中一个沙盒服务部署为线上服务.
  • 沙盒服务如果连续超过24小时无调用将自动调整为暂停状态.
  • 线上服务如果连续超过14天无调用将自动调整为暂停状态.

AI Studio在线部署及预测说明_第16张图片

调用在线服务

依据API key、服务地址和用户自定义参数, 实现对服务的调用.

请求方式

  • HTTP请求URL: [服务地址] [?] [apiKey=xxx]
  • HTTP请求方法: POST
  • HTTP Body: 用户自定义参数

AI Studio在线部署及预测说明_第17张图片

调用示例

以房价预测项目为例.

  • CURL
curl -H "Content-Type: application/json" -X POST -d '{"CRIM":0.01887747, "ZN":-0.11363636, "INDUS":0.25525005, "CHAS":-0.06916996,  "NOX":0.29898136, "RM": -0.04476612, "AGE": 0.14340987, "DIS":-0.14797285,  "RAD":0.62828665, "TAX":0.49191383, "PTRATIO":0.18558153, "B":0.05473289, "LSTAT":0.16851371}' "https://aistudio.baidu.com/serving/online/xxx?apiKey=xxxxxxxxxx"

  • Python
import json
import traceback
import urllib
import urllib2

formdata = {
    "CRIM":0.01887747, 
    "ZN":-0.11363636, 
    "INDUS":0.25525005, 
    "CHAS":-0.06916996,  
    "NOX":0.29898136, 
    "RM": -0.04476612, 
    "AGE": 0.14340987, 
    "DIS":-0.14797285,  
    "RAD":0.62828665, 
    "TAX":0.49191383, 
    "PTRATIO":0.18558153, 
    "B":0.05473289, 
    "LSTAT":0.16851371
}
header = {"Content-Type": "application/json; charset=utf-8"}
url = "https://aistudio.baidu.com/serving/online/xxx?apiKey=a280cf48-6d0c-4baf-bd39xxxxxxcxxxxx"
data = json.dumps(formdata)
try:
    request = urllib2.Request(url, data, header)
    response = urllib2.urlopen(request)
    response_str = response.read()
    response.close()
    print(response_str)
except urllib2.HTTPError as e:
    print("The server couldn't fulfill the request")
    print(e.code)
    print(e.read())
except urllib2.URLError as e:
    print("Failed to reach the server")
    print(e.reason)
except:
    traceback.print_exc()

AI Studio在线部署及预测说明_第18张图片

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

你可能感兴趣的:(AI Studio在线部署及预测说明)