当前位置: 首页 > 科技观察

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

时间:2023-03-17 10:19:47 科技观察

还在为机器学习模型打包成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的文件中配置相关属性即可。这个项目如何运作?具体来说,每当用户运行cortexdeploy时,命令行都会将配置属性和代码发送到服务器集群。每个模型都加载到Docker容器中,包括关联的Python包和处理请求的代码。模型通过ElasticLoadBalancing(ELB)、Flask、TensorFlowServing和ONNXRuntime等Web服务向用户公开API。容器通过ElasticKubernetesService(EKS)进行控制,而日志文件和指标的记录和打印则由CloudWatch完成。使用方法使用过程主要分为以下三个步骤:定义模型的API#predictor.pymodel=download_my_model()defpredict(sample,metadata):returnmodel.predict(sample["text"])如上图,用户需要做的是定义代表此API的函数,使其能够根据输入数据返回输出。配置部署$curlhttp://***.amazonaws.com/sentiment/classifier\-XPOST-H"Content-Type:application/json"\-d'{"text":"themoviewasgreat!"}'positivesecond第一步,用户需要新建一个yaml文件,用于配置相关属性。具体来说,用户可以定义部署模型的名称,在本例中为classifierpredictor。然后你还需要定义API的名称,比如classifierpredictor和路径,模型类型和使用的GPU数量等AWS部署$cortexdeploycreatingclassifier(http://***.amazonaws.com/sentiment/classifier)以AWS为例。完成以上工作后,用户就可以创建这个API,使其与AWS协同工作。当然用户也可以实时保存推理结果,如下:$curlhttp://***.amazonaws.com/sentiment/classifier\-XPOST-H"Content-Type:application/json"\-d'{"text":"themoviewasgreat!"}'positive此外,用户还可以监控运行结果。$cortexgetclassifier--watchstatusup-to-dateavailablerequestedlastupdateavglatencylive1118s123msclasscountpositive8negative4教程为了让用户更好的使用这个工具,项目作者也提供了一些用例。包括:基于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-generatorbasedonXGBoost/ONNX进行鸢尾花分类:https://github.com/cortexlabs/cortex/tree/0.10/examples/xgboost/iris-classifier以BERT做情感分析为例:首先用户需要在模型上定义API接口函数这样他们就可以通过函数输入数据,返回模型的推理结果。这个py文件定义为handler.py:#handler.pyimporttensorflowastfimporttensorflow_hubashubfrombertimporttokenization,run_classifierlabels=["negative","positive"]withtf.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)withtf.Session()assess: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)defpre_inference(sample,signature,metadata):input_example=run_classifier.InputExample(guid="",text_a=sample["评论"],label=0)input_feature=run_classifier.convert_single_example(0,input_example,[0,1],128,tokenizer)return{"input_ids":[input_feature.input_ids]}defpost_inference(预测,签名,元数据):返回标签[prediction["labels"][0]]接下来,用户需要指定定义配置yaml文件,并在文件中指定相关属性。这里注意文件名必须定义为cortex.yaml:#cortex.yaml-kind:deploymentname:sentiment-kind:apiname:classifiertensorflow:model:s3://cortex-examples/tensorflow/sentiment-analysis/bertrequest_handler:handler.pytracker:model_type:classification可以看到,需要指定yaml文件中使用的model,以及作为API接口的py文件(即第一步定义的py文件),然后deployit:$cortexdeploydeploymentstarted如果需要获取监控信息,需要输入cortexget命令:$cortexgetclassifier--watchstatusup-to-dateavailablerequestedlastupdateavglatencylive1118s也可以使用命令行获取实时预测:$cortexgetclassifierurl:http://***.amazonaws.com/sentiment/classifier$curlhttp://***.amazonaws.com/sentiment/classifier\-XPOST-H"Content-Type:application/json"\-d'{"review":"Themoviewasgreat!"}'"正面