本篇文章意在为大家介绍部署分布式推理服务的完整流程复现操作。有很多实验由于缺少实验环境都无法实践,但是我们对于理论的探究是不能停止的。本文就是基于MindSpore Serving部署分布式的理论推理。
首先,我们一起看看分布式推理服务的架构,如图所示:
Main进程提供客户端访问的接口,管理Distributed Worker并进行任务管理与分发;Distributed Worker进程根据模型配置自动调度Agent完成分布式推理;每一个Agent进程包含一个分布式模型的切片,占用一个device,加载模型执行推理。
上图展示了rank_size为16,stage_size为2的场景,每个stage包含8个Agent,占用8个device。rank_size表示推理使用的device的个数,stage表示流水线的一段,stage_size表示流水线的段数。Distributed Worker向Agent发送推理请求并从Agent获取推理结果。Agent之间使用HCCL通信。
当前对分布式模型有以下限制:
- 第一个stage的模型接收相同的输入数据
- 其他的stage的模型不接收数据。
- 最后一个stage的所有模型都返回相同的数据。
- 仅支持Ascend 910推理。
下面以一个简单的分布式网络MatMul为例,演示部署流程。
导出分布式模型需要如下文件列表:
export_model
├── distributed_inference.py
├── export_model.sh
├── net.py
└── rank_table_8pcs.json
- py为MatMul网络定义。
- py配置分布式相关的参数。
- sh在当前机器上创建device目录并且导出每个device对应的模型文件。
- json为配置当前多卡环境的组网信息的json文件,