模型秒变API只需一行代码,支持TensorFlow等框架

作者: 一鸣、杜伟 2019-11-26 09:47:50

还在为机器学习模型打包成 API 发愁?这个工具能让你一行代码直接打包。

专注于机器学习应用的人们知道,从训练好的模型到实际的工业生产工具还有一定的距离。其中工作量很大的地方在于将模型打包,预留 API 接口,并和现有的生产系统相结合。近日,GitHub 上有了这样一个项目,能够让用户一行代码将任意模型打包为 API。这一工具无疑能够帮助开发者在实际的生产应用中快速部署模型。

项目地址:https://github.com/cortexlabs/cortex

项目特点和原理

该项目名为 Cortex,是一个命令行工具。作者表示,该项目具有以下优点:

  • 自动定义:Cortex 可以自动定义需要负责生产工作的 API;
  • 多框架支持:Cortex 支持多种机器学习框架,包括 TensorFlow、PyTorch、scikit-learn、XGBoost 等;
  • CPU/GPU 支持:Cortex 能够在 CPU 或者 GPU 上进行推理工作;
  • 回滚式更新:Cortex 可以对部署的 API 直接更新;
  • 日志流:Cortex 会保留部署模型的日志流,并在 CLI 上显示;
  • 预测监控:Cortex 能够监控网络的评价指标,并追踪预测结果;
  • 最小配置:部署时,用户只需要在一个名为 cortex.yaml 的文件中配置相关属性。
模型秒变API只需一行代码,支持TensorFlow等框架

这一项目是怎样工作的?具体而言,每当用户运行 cortex deploy 时,命令行将配置属性和代码发送到服务器集群上。每个模型都载入到一个 Docker 容器中,包括相关的 Python 包和处理请求的代码。模型通过网络服务,如 Elastic Load Balancing (ELB)、Flask、TensorFlow Serving 和 ONNX Runtime 公开 API 给用户使用。容器通过 Elastic Kubernetes Service (EKS) 进行控制,而日志文件和评价指标的记录和打印工作由 CloudWatch 完成。

使用方法

使用过程主要分为以下三个步骤:

定义模型的 API

  1. # predictor.py 
  2. model = download_my_model()def predict(sample, metadata): return model.predict(sample["text"]) 

如上所示,用户需要做的是定义代表这个 API 的函数,使其能够根据输入数据返回输出。

配置部署

  1. $ curl http://***.amazonaws.com/sentiment/classifier \-X POST -H "Content-Type: application/json" \-d '{"text": "the movie was great!"}' 
  2. positive 

第二个步骤中,用户需要创建一个新的 yaml 文件,这个文件用于配置相关属性。

具体而言,用户可以定义部署模型的名称,本例中名为 classifierpredictor。然后还需要定义 API 的名称,如 classifierpredictor 以及路径、模型的类型和使用的 GPU 数量等。

AWS 部署

  1. $ cortex deploy 
  2. creating classifier (http://***.amazonaws.com/sentiment/classifier) 

以 AWS 为例,以上工作完成后,用户可以创建这个 API,使其利用 AWS 进行工作。

当然,用户还可以实时保存推断结果,如下所示:

  1. $ curl http://***.amazonaws.com/sentiment/classifier \-X POST -H "Content-Type: application/json" \-d '{"text": "the movie was great!"}' 
  2. positive 

此外,用户还可以监控运行结果。

  1. $ cortex get classifier --watch 
  2. status up-to-date available requested last update avg latencylive 1 1 1 8s 123ms 
  3. class countpositive 8negative 4 

使用教程

为了让用户更好地使用这一工具,项目作者同时还提供了一些使用案例。包括:

  • 基于 TensorFlow 和 BERT 进行情感分析:https://github.com/cortexlabs/cortex/tree/0.10/examples/tensorflow/sentiment-analysis
  • 基于 TensorFlow 和 Inception 模型进行图像分类:https://github.com/cortexlabs/cortex/tree/0.10/examples/tensorflow/image-classifier
  • 基于 PyTorch 和 DistilGPT2 进行文本生成:https://github.com/cortexlabs/cortex/tree/0.10/examples/pytorch/text-generator
  • 基于 XGBoost / ONNX 进行虹膜分类:https://github.com/cortexlabs/cortex/tree/0.10/examples/xgboost/iris-classifier

以使用 BERT 进行情感分析为例:

首先用户需要在模型上定义 API 接口函数,使其可以通过函数输入数据,并返回模型的推理结果。这一 py 文件被定义为 handler.py:

  1. # handler.py 
  2. import tensorflow as tfimport tensorflow_hub as hubfrom bert import tokenization, run_classifier 
  3. labels = ["negative""positive"
  4. with tf.Graph().as_default(): bert_module = hub.Module("https://tfhub.dev/google/bert_uncased_L-12_H-768_A-12/1") info = bert_module(signature="tokenization_info", as_dict=True)with tf.Session() as sess: vocab_file, do_lower_case = sess.run([info["vocab_file"], info["do_lower_case"]]) tokenizer = tokenization.FullTokenizer(vocab_file=vocab_file, do_lower_case=do_lower_case) 
  5.  
  6. def pre_inference(sample, signature, metadata): input_example = run_classifier.InputExample(guid="", text_a=sample["review"], label=0) input_feature = run_classifier.convert_single_example(0, input_example, [01], 128, tokenizer) return {"input_ids": [input_feature.input_ids]} 
  7.  
  8. def post_inference(prediction, signature, metadata): return labels[prediction["labels"][0]] 

接着,用户需要定义配置 yaml 文件,在文件中指定相关属性,这里需要注意,文件名必须定义为 cortex.yaml:

  1. # cortex.yaml 
  2. - kind: deployment name: sentiment 
  3. - kind: api name: classifier tensorflow: model: s3://cortex-examples/tensorflow/sentiment-analysis/bert request_handler: handler.py tracker: model_type: classification 

从中可以看到,yaml 文件中需要指定出使用的模型,以及作为 API 接口的 py 文件(即第一步中定义了的 py 文件)。

然后进行部署即可:

  1. $ cortex deploy 
  2. deployment started 

如果需要获得监控信息,则需要输入 cortex get 命令:

  1. $ cortex get classifier --watch 
  2. status up-to-date available requested last update avg latencylive 1 1 1 8s 

还可以用命令行获得实时预测:

  1. $ cortex get classifier 
  2. url: http://***.amazonaws.com/sentiment/classifier 
  3. $ curl http://***.amazonaws.com/sentiment/classifier \ -X POST -H "Content-Type: application/json" \ -d '{"review": "The movie was great!"}'"positive 
代码 开发 工具
上一篇:人脸识别门禁系统来了 谁来保护我们的隐私? 下一篇:直击痛点-微昂开评标视频智能归档系统
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

机器学习所需的工程量未来会大大减少 精选

未来,构建 ML 产品将更加有趣,并且这些系统会工作得更好。随着 ML 自动化工具的不断改进,数据科学家和 ML 工程师将把更多的时间花在构建优秀的模型上,而花在与生产级 ML 系统相关的繁琐但必要的任务上的时间会更少。

David LiCause ·  3天前
Excel狂魔?单元格做计算机视觉:人脸检测、OCR都不在话下

计算机视觉是什么?过于专业,一步劝退?在普通人看来,计算机视觉是软件开发者才能涉足的领域,需要用到很多专业的框架,普通人只能围观。但 GitHub 上的一个项目似乎颠覆了我们的认知。

佚名 ·  2020-02-19 14:55:20
独家下载!阿里如何用 AI 写代码?

作为今年阿里经济体前端委员会的四大技术方向之一,前端智能化方向一被提及,就不免有人好奇:前端结合 AI 能做些什么,怎么做,未来会不会对前端产生很大的冲击等等。本篇文章将围绕这些问题,以「设计稿自动生成代码」场景为例,从背景分析、竞品分析、问题拆解、技术方案等几个角度切入,细述相关思考及过程实践。

妙净、波本 ·  2020-02-19 13:11:52
2020年,比较适合AI的5种编程语言

AI系统的开发必须有计算机代码,而计算机程序的开发有不同类型的编程语言可以选择。本文分析哪些编程语言最适合你的人工智能或机器学习用例开发。

CSDN App ·  2020-02-13 16:18:50
代码开源!超好用的《机器学习实用指南》第二版终于来了

早在去年的这个时候,红色石头就发文给大家推荐过一本非常棒的机器学习实用指南书籍《Hands-On Machine Learning with Scikit-Learn & TensorFlow》

Author 红色石头 ·  2020-02-11 10:30:32
从工具选择到团队沟通,看ML工程师一步步打造生产级机器学习

为了让机器学习为用户带来真正的价值,我们需要将其部署到生产系统中。人工智能销售软件开发公司 Toucan AI 的 ML 工程师 Marifel 介绍了他们在打造生成级机器学习时所考虑的一些问题,希望这些经验能为你的工作带来帮助。

机器之心 ·  2020-02-06 16:55:02
需要关注的2020年8个人工智能趋势

O'Reilly公司副总裁Roger Magoulas介绍了自动化、硬件、工具、模型开发等方面的新发展,这些趋势将在2020年塑造(或加速)人工智能的发展。

Harris ·  2020-01-23 20:35:05
我花了两年,从不懂Python变成了AI工程师

有一位小哥,从不知道Python到找到AI工程的工作,用时两年。他的文章在网上获得了5000多条点赞。

赖可 ·  2020-01-23 15:26:40
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载