Angel的整体设计比较简约,层次鲜明,容易上手,没有过多复杂的设计,关注模型和机器学习相关特性,追求高维度模型下的最佳性能。它的架构设计,从整体可以分为3大模块:
-
Parameter Server层:提供通用的
参数服务器
服务,负责模型的分布存储,通讯同步和协调计算,并通过PSAgent提供PS Service
-
Worker层: 基于Angel自身模型设计的分布式运行节点,自动读取并划分数据,局部训练出模型增量,通过
PS Client
和PS Server
通信,完成模型训练和预测。一个Worker包含一个或者多个Task,Task是Angel计算单元,这样设计的原因是可以让Task共享Worker的许多公共资源。 -
Model层: 这是一层虚拟抽象层,并非真实存在的物理层。关于Model的Push和Pull,各种异步控制,模型分区路由,自定义函数……是连通Worker和PSServer的桥梁。
除了这3大模块,还有2个很重要的类,在图上没有显示,但是值得关注,它们是:
-
Client:Angel任务运行的发起者
- 启动和停止PSServer
- 启动和停止Angel的Worker
- 加载和存储模型
- 启动具体计算过程
- 获取任务运行状态
-
Master:Angel任务运行的守护者
- 原始计算数据以及参数矩阵的分片和分发
- 向Gaia申请Worker和ParameterServer所需的计算资源
- 协调,管理和监控Worker以及PSServer
通过如上的设计,Angel的整体架构,有着相对良好的可扩展性
- PSServer层: 通过PS-Service,提供灵活的多框架PS支持
- Model层: 提供PS必备的功能,并支持对性能进行针对性优化
- Worker层: 能基于Angel自主API,进行算法开发和创新的需求
因此,分布式计算工程师,可以对核心层进行各种优化;而算法工程师和数据科学家,则可以充分复用这些成果,致力于各种学术界算法技巧的实现,达到最佳的性能和最好的准确率。