选自GitHub

机器之心编译参与:一鸣、杜伟

还在为机器学习模型打包成 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 的文件中配置相关属性。

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

使用方法

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

定义模型的 API

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

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

配置部署

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

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

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

AWS 部署

$ cortex deploycreating classifier (http://***.amazonaws.com/sentiment/classifier)

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

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

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

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

$ cortex get classifier --watchstatus up-to-date available requested last update avg latencylive 1 1 1 8s 123msclass 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:

# handler.pyimport tensorflow as tfimport tensorflow_hub as hubfrom bert import tokenization, run_classifierlabels = ["negative", "positive"]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)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, [0, 1], 128, tokenizer) return {"input_ids": [input_feature.input_ids]}def post_inference(prediction, signature, metadata): return labels[prediction["labels"][0]]

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

# cortex.yaml- kind: deployment name: sentiment- 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 文件)。

然后进行部署即可:

$ cortex deploydeployment started

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

$ cortex get classifier --watchstatus up-to-date available requested last update avg latencylive 1 1 1 8s

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

$ cortex get classifierurl: http://***.amazonaws.com/sentiment/classifier$ curl http://***.amazonaws.com/sentiment/classifier  -X POST -H "Content-Type: application/json"  -d '{"review": "The movie was great!"}'"positive

vscode代码提示只显示一行_模型秒变API只需一行代码,支持TensorFlow等框架相关推荐

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

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心 参与:一鸣.杜伟 还在为机器学习模型打包成 API 发愁?这个工具能让你一行代码直接打包. 专注于机器学习应用的人们知道,从训练好的模 ...

  2. ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签

    ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签 目录 仅需两行代码实现切分训练集和测试集并分离特征与标签 输出结果 实习代码 仅需两行代码实现切分训练集和测试集并分离特征 ...

  3. c++ 线性回归_模型之母:简单线性回归的代码实现

    模型之母:简单线性回归的代码实现 关于作者:饼干同学,某人工智能公司交付开发工程师/建模科学家.专注于AI工程化及场景落地,希望和大家分享成长中的专业知识与思考感悟. 0x00 前言 在<模型之 ...

  4. html只显示一句话_您所说的话:如何最大化多显示器设置

    html只显示一句话 Earlier this week we asked you to share your multi-monitor workspace tips and tricks. Now ...

  5. 日历代码 谷歌无法显示当日_在Windows日历中显示您的Google日历

    日历代码 谷歌无法显示当日 Windows Vista includes a built-in calendar application that's pretty slick, but as an ...

  6. Flash Professional CS5的代码提示不显示的终极解决办法

    Flash CS5终于加入了对自定义类的代码提示,这是一个大好事,但是最近笔者被一个新问题所困扰,因为在项目中用到了papervision3d.stardust.等一堆的东东,杯具就此产生了~代码提示 ...

  7. qcalendarwidget只显示月_万家基金旗下26只产品规模迷你 万家精选重仓地产股年内收益排名靠后丨基金...

    存量基金迷你化问题值得注意,截至今年三季度末,万家基金旗下万家上证50ETF.万家量化同顺多策略A/C.万家人工智能.万家中证红利等26只基金规模不足2亿元 <投资时报>研究员 齐文健 临 ...

  8. qcalendarwidget只显示月_本周新股14只连发!明日3只新股可申购,分别是中信博、圣湘生物、瑞晟智能...

    截至目前数据,本周沪深股市的新股发行和申购数量共14只,环比减少4只. 14只新股中,包括8只沪市科创板新股.2只沪市主板新股.1只深市中小板新股.3只深市创业板新股.根据时间推算,这3只创业板注册制 ...

  9. 解决FLASHCS5代码提示无效的方法_…

    1. 关于代码提示的快捷键,默认是Ctrl+Spacebar,但是在大部分中文用户的机器上,这是切换输入法的快捷键,这会导致代码提示的快捷键不起作用,所以建议在Edit->Keyboard sh ...

最新文章

  1. android studio 通过界面快速查看md5
  2. 优化eclipse启动速度
  3. [SDOI2017]硬币游戏
  4. py之patsy:patsy的简介、安装、使用方法之详细攻略
  5. 一直以为Python没有自带四舍五入的函数
  6. ABB 机器人 通信指令(人机对话):
  7. 使用Spring Security在Spring Boot中进行缓存
  8. @bzoj - 2388@ 旅行规划
  9. 《计算机科学概论》—第3章3.3节文本表示法
  10. mysql innodb缓存策略之Buffer Pool
  11. watch gt3 鸿蒙,华为Watch3有什么功能-华为Watch3功能介绍
  12. 这个TsuNAME 新漏洞可对关键 DNS 服务器发动 DDoS 攻击
  13. Oracle中可以代替like进行模糊查询的方法instr(更高效)
  14. Java中的servlet是什么?
  15. 西南科技大学OJ题 折半查找的实现1010
  16. linux端更新pip
  17. PM Interview 60quiz
  18. IDEA/Android Studio中替换(replace)快捷键
  19. Windows取证一
  20. Excel如何将某个特定值变为空值

热门文章

  1. 百行征信大揭秘,字段中间找关系
  2. 小程序 后台返回的对象数组(每个数组添加一个新的属性值)
  3. windows10+ubuntu16.04双系统搭建
  4. jmeter 跨线程执行变量
  5. Codeforces 938.C Constructing Tests
  6. 【模板】ISAP最大流
  7. ScalaTour 2.函数
  8. 常用数据挖掘算法举例(下)
  9. laravel中文字模型的增删改查
  10. 强制推送代码到远程仓库