
1.2.4 定制你自己的设计
既然我们已经介绍了参考系统架构的所有方面,现在让我们讨论一些自定义系统设计的指导原则。
1.收集目标和需求
设计任何成功的系统的第一步是确定清晰的目标和需求。这些目标和需求在理想情况下应该来自你的系统用户,你可以直接从用户处获取,也可以通过产品管理团队或工程管理团队间接获取。一份简短的目标和需求列表将帮助你形成对系统预期形式的愿景。同时这个愿景也应该成为贯穿整个系统的设计和开发阶段的指导原则。
注意 有时工程师会被要求开发一个支持已经存在的一个或多个深度学习应用程序的系统。在这种情况下,你可以先确定这些应用程序之间的共同需求,再设计一个使你的系统可以快速为这些应用程序带来创新的方法。
为了收集系统的目标和需求,你需要确定系统中的不同类型用户和利益相关者,或者说人物角色(这是一个通用的概念,适用于大多数系统设计问题)。用户将帮助你明确系统的目标和需求。
如果你不确定从哪里开始比较好,我们建议从用例或应用程序需求开始。以下是一些示例问题,你可以向用户询问这些问题:
● 对于数据工程师和产品经理——系统是否允许应用程序收集用于训练的数据?系统是否需要处理流式输入数据?收集了多少数据?
● 对于数据科学家和工程师——我们如何处理和标注数据?系统是否需要为外部供应商提供标注工具?我们如何评估模型?如何处理测试数据集?是否需要交互式notebook用户界面来支持数据科学工作?
● 对于研究人员和数据科学家——训练模型需要多大规模的数据?模型训练运行的平均时间是多少?研究和数据科学需要多少计算和数据容量?系统需要支持哪些实验?需要收集什么样的元数据和指标来评估不同的实验?
● 对于产品经理和软件工程师——模型服务是在远程服务器上进行还是在客户端上进行?是实时模型推理还是离线批量预测?是否有延迟要求?
● 对于产品经理——我们在组织中试图解决什么问题?我们的商业模式是什么?我们将如何衡量实施效果?
● 对于安全团队——你的系统需要多高级别的安全性?数据访问是否完全开放,或严格受限/隔离?是否有审计要求?系统是否需要达到某种合规性或认证水平(例如,通用数据保护条例、系统和组织控制等)?
2.自定义参考架构
一旦设计要求和范围明确,就可以开始自定义图1.3中的参考架构。首先,我们可以决定是否需要添加或删除任何组件。例如,如果需求仅是在远程服务器群中管理模型训练,那么可以移除工作流管理组件。如果数据科学家希望有效地评估使用生产数据的模型性能,还可以添加实验管理组件。该组件允许数据科学家使用系统中已经存在的全量数据进行训练和验证,并使用之前未见过的数据对生产流量进行在线A/B测试。
第二步是根据你的特定需求设计和实现每个关键组件套件。根据需求,你可以从数据集管理服务中排除数据流API,并在考虑训练速度时,添加分布式训练支持。你可以从头开始构建每个关键组件,也可以使用开源软件。在本书的其余部分,我们将逐个讲述每个关键组件的这两种选项。
提示 保持系统设计简单和用户友好。创建如此庞大的深度学习系统的目的是提高深度学习开发的效率,请在设计时牢记这一点。我们希望数据科学家能够轻松构建高质量的模型,而无须了解底层系统的运行情况。