目前,我们利用机器学习算法来预测结果,最终目的还是为了生产服务。由于生产环境和要求复杂多样,将机器学习模型部署至生产环境,往往需要特定的平台工具。Cortex就是这类平台工具中的一种。
近日,Cortex发布了版本更新,提供了大量新特性,提升了使用体验,能够更方便快捷地将机器学习模型预测作为网络服务部署到生产流程中。
一起来看看本次更新的内容吧。
主要功能和特性
自动扩展:Cortex能够自动扩展API,已处理生产环境下的工作负载。
多框架支持:Cortex广泛支持TensorFlow,Keras, PyTorch, Scikit-learn, XGBoost的多个机器学习框架。
CPU/GPU支持:Cortex可在CPU或GPU基础设施上运行推理任务。
滚动更新:直接将更新应用在API上,无需花费专门的时间下载。
日志传输:Cortex可将运行日志从部署模型传输到用户的CLI上。
预测监测:可检测网络量度,并追踪预测结果。
最小化的声明式配置:部署配置仅由一个cortex.yaml文件定义。
下面举例说明如何利用Cortex将OpenAI的GPT-2模型作为AWS的服务进行部署。需要注意的是,开始之前需要先在AWS账号中安装Cortex。
1、部署配置
定义部署和API资源。“部署”是指一起部署的一组指定的API资源。API可以让模型作为网络服务使用,提供实时的预测结果。下面的设置将从S3 bucket下载示例模型。生成模型的代码下载地址:
https://colab.research.google.com/github/cortexlabs/cortex/blob/0.9/examples/text-generator/gpt-2.ipynb
# cortex.yaml
- kind: deployment
name: text
- kind: api
name: generator
model: s3://cortex-examples/text-generator/gpt-2/124M
request_handler: handler.py
2、添加请求处理
该模型需要编码数据进行推理,但是API应该接受自然语言的字符串作为输入,还应该对推理输出进行解码。这可以使用pre_inference和post_inference函数在请求处理程序文件中实现:
# handler.py
from encoder import get_encoder
encoder = get_encoder()
def pre_inference(sample, metadata):
context = encoder.encode(sample["text"])
return {"context": [context]}
def post_inference(prediction, metadata):
response = prediction["sample"]
return encoder.decode(response)
3、部署到AWS
部署到AWS和从CLI上运行cortex deploy一样简单,后者使用cortex.yaml文件中的声明式设置,并在集群上进行创建操作。Cortex会将模型容器化,令模型可以使用TensorFlow服务,使用负载平衡器公开端点,并在Kubernetes上协调工作负载。
$ cortex deploy
deployment started
可以使用跟踪部署状态。以下输出表明请求了该API的一个副本,并且可用于预测。如果负载增加,Cortex将自动启动更多副本,而如果有未使用的空闲容量,则会自动关闭副本。
$ cortex get generator --watch
status up-to-date available requested last update avg latency
live 1 1 1 8s 123ms
url: http://***.amazonaws.com/text/generator
4、提供实时预测
获取端点后,就可以发送请求了。
$ curl http://***.amazonaws.com/text/generator \
-X POST -H "Content-Type: application/json" \
-d '{"text": "machine learning"}'
Machine learning, with more than one thousand researchers around the world today, are looking to create computer-driven machine learning algorithms that can also be applied to human and social problems, such as education, health care, employment, medicine, politics, or the environment...