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