设计目标
可扩展性、从开发到生产快速构建、灵活支撑多种工具库是ML平台的设计目标。
整体架构
Merlin的架构整体设计如上图,整体看分为Pano特征商店、数据集和模型仓库、工作流编排模块、Jupyter Notebook编码模块、Merlin API和Merlin Core。
Pano特征商店
特征商店是模型和数据之间的接口,旨在解决在构建和运行可操作的机器学习应用程序时遇到的所有数据管理问题,具体包括生产新特征、自动化特征计算、回填和日志记录、共享和重用特征管道、跟踪特征版本和元数据、特征生命周期管理、特征健康状况监控等,Pano是Shopify的特征商店,市面上也有不少相关产品,模型商店不是本文的关注点,具体不多做介绍,感兴趣的可阅读What Is a Feature Store?。Merlin Core中的任务可获取Pano中的特征。
数据集和模型仓库
用来存储数据集和模型,Merlin Core可从该仓库中获取数据和模型。
Merlin API
Merlin API屏蔽了底层实现,用户只需要提交几个业务参数(如CPU、GPU等)即可申请到对应资源。下面两个图是训练和推理过程两个情景使用Ray的例子,用户可以对每个任务分别设定Workspace,设置资源情况,在训练情景中,用户申请了GPU和CPU,但是在推理阶段,用户可以选择不使用GPU。
训练阶段
推理阶段
工作流编排模块
Merlin集成了工作流管理工具Oozie和Airflow,Oozie适合那些主要使用Hadoop生态系统工具的用户,而Airflow用Python脚本进行任务调度,不限制使用范围。一个最简单的Airflow编排例子如下,首先创建workspace,然后进行模型训练(通过调用Merlin API进行计算资源的申请),最后将workspace删除。
Jupyter Notebook编码模块
程序员可以从Jupyter Notebook中编码,并且通过调用Merlin API直接申请Merlin Core中的资源。
Merlin Core
Merlin Core是整个ML平台的关键模块,构建在Kubernetes和Ray之上,进行模型的训练和推理。Kubernetes提供了资源隔离的能力,Merlin中的workspace是通过Kubernetes中的namespace实现的,实现对Ray Pod的隔离。
再看文章开头的整体架构图中Merlin Core部分,图中有4个Workspace,分别对应4个Ray集群,每个集群的工具和功能都不相同,第一个中用PyTorch进行训练和批量推理,第二个用XGBoost进行训练和批量推理,第三个用TensorFlow进行训练和批量推理,第四个则用Sklearn进行训练和批量推理。其中每个Ray集群之间是彼此隔离的,只属于当前任务。
资源隔离-Workspace
最后再介绍一下Merlin中的Workspace。上图是一个Ray集群的示意图,每个Ray集群包括两个Ingress,一个Http Ingress,一个gRPC Ingress,用两种方式均可管理Ray集群。
参考
Isaac Vidas: "The Magic of Merlin: Shopify's New Machine Learning Platform", Ray Summit 2022
Willem Pienaar and Mike Del Balso: "What is a Feature Store?", Tecton
写在最后
本文介绍了Shopify机器学习平台的实现路径,具体的技术细节会在后面的文章中进行详细介绍。如果大家关注MLOps相关的技术,欢迎大家点赞关注👏👏👏