![]()
编辑推荐 深度学习模型必须构建到软件系统中才能实际使用。作为一名软件工程师,你需要对深度学习有深刻的理解才能设计出这样的系统。本书将为你提供这种深刻的理解。 本书会教你设计和实现一个生产级的深度学习平台所需的一切知识。首先,它从开发者的角度出发,呈现了深度学习系统的全貌,包括其主要组件及连接方式。然后,它会一步步指导你如何使用工程方法构建一个可维护、高效且可扩展的深度学习平台。 本书涵盖: ?深度学习开发周期 ?TensorFlow和PyTorch自动化训练 ?数据集管理、模型服务和超参数调优 ?深度学习实践实验室 书中提供了Java和Python代码示例,适合软件开发人员和以工程为导向的数据科学家。 内容推荐 本书主要从软件开发者的角度探讨如何构建和设计深度学习系统。作者首先描述一个典型的深度学习系统的整体,包括其主要组件以及它们之间的连接方式,然后在各个单独的章节中深入探讨这些主要组件。对于具体介绍的章节,会在开始时讨论需求,接着介绍设计原则和示例服务/代码,并评估开源解决方案。通过阅读本书,读者将能够了解深度学习系统的工作原理,以及如何开发每个组件。本书的主要读者对象是想要从事深度学习平台工作或将一些人工智能功能集成到产品中的软件工程师。 目录 目 录<br />译者序<br />序<br />前言<br />深度学习系统架构参考<br />第1章 深度学习系统介绍 1<br />1.1 深度学习开发周期 3<br />1.1.1 深度学习产品开发周期的<br />阶段 4<br />1.1.2 开发周期中的角色 7<br />1.1.3 深度学习开发周期实例<br />演练 9<br />1.1.4 项目开发的规模化 10<br />1.2 深度学习系统设计概述 10<br />1.2.1 参考系统架构 11<br />1.2.2 关键组件 12<br />1.2.3 关键用户场景 16<br />1.2.4 定制你自己的设计 17<br />1.2.5 在Kubernetes上构建<br />组件 19<br />1.3 构建深度学习系统与开发模型之间<br />的区别 20<br />总结 21<br />第2章 数据集管理服务 22<br />2.1 理解数据集管理服务 23<br />2.1.1 为什么深度学习系统需要<br />数据集管理 23<br />2.1.2 数据集管理设计原则 26<br />2.1.3 数据集的悖论特性 28<br />2.2 浏览一个示例数据集管理服务 29<br />2.2.1 与示例服务互动 29<br />2.2.2 用户、用户场景和整体<br />架构 35<br />2.2.3 数据摄取API 36<br />2.2.4 训练数据集获取API 40<br />2.2.5 内部数据集存储 45<br />2.2.6 数据模式 48<br />2.2.7 添加新的数据集类型(IMAGE_CLASS) 50<br />2.2.8 服务设计回顾 51<br />2.3 开源方法 52<br />2.3.1 Delta Lake和Apache Spark<br />家族的Petastorm 52<br />2.3.2 基于云对象存储的<br />Pachyderm 58<br />总结 61<br />第3章 模型训练服务 63<br />3.1 模型训练服务:设计概述 64<br />3.1.1 为什么要使用模型训练<br />服务 64<br />3.1.2 训练服务设计原则 66<br />3.2 深度学习训练代码模式 67<br />3.2.1 模型训练工作流 67<br />3.2.2 将模型训练代码Docker<br />化为黑盒 68<br />3.3 一个示例模型训练服务 69<br />3.3.1 与服务进行交互 69<br />3.3.2 服务设计概述 70<br />3.3.3 训练服务API 72<br />3.3.4 启动新的训练作业 73<br />3.3.5 更新和获取作业状态 75<br />3.3.6 意图分类模型训练代码 78<br />3.3.7 训练作业管理 79<br />3.3.8 故障排除指标 80<br />3.3.9 支持新的算法或新版本 81<br />3.4 Kubeflow训练算子:开源方法 81<br />3.4.1 Kubeflow训练算子 82<br />3.4.2 Kubernetes算子/控制器<br />模式 82<br />3.4.3 Kubeflow训练算子设计 83<br />3.4.4 如何使用Kubeflow训练<br />算子 84<br />3.4.5 如何将这些算子集成到现有系统中 86<br />3.5 何时使用公有云 87<br />3.5.1 何时使用公有云解决<br />方案 87<br />3.5.2 何时构建自己的训练<br />服务 87<br />总结 89<br />第4章 分布式训练 90<br />4.1 分布式训练方法的类型 90<br />4.2 数据并行 91<br />4.2.1 理解数据并行 91<br />4.2.2 多工作节点训练挑战 93<br />4.2.3 不同训练框架的分布式训练(数据并行)代码编写 94<br />4.2.4 数据并行–分布式训练中的工程化努力 98<br />4.3 支持数据并行–分布式训练的示例<br />服务 100<br />4.3.1 服务概述 100<br />4.3.2 与服务进行交互 101<br />4.3.3 启动训练作业 103<br />4.3.4 更新和获取作业状态 106<br />4.3.5 将训练代码转换为分布式<br />运行 107<br />4.3.6 进一步改进 108<br />4.4 训练无法在单个GPU上加载的<br />大模型 108<br />4.4.1 传统方法:节省内存 108<br />4.4.2 流水线模型并行 110<br />4.4.3 软件工程师如何支持流水线并行训练 115<br />总结 115<br />第5章 超参数优化服务 117<br />5.1 理解超参数 118<br />5.1.1 什么是超参数 118<br />5.1.2 超参数为什么重要 118<br />5.2 理解超参数优化 119<br />5.2.1 什么是HPO 119<br />5.2.2 热门的HPO算法 121<br />5.2.3 常见的自动HPO方法 125<br />5.3 设计一个HPO服务 126<br />5.3.1 HPO设计原则 127<br />5.3.2 通用HPO服务设计 128<br />5.4 开源HPO库 129<br />5.4.1 Hyperopt 130<br />5.4.2 Optuna 131<br />5.4.3 Ray Tune 133<br />5.4.4 后续步骤 136<br />总结 136<br />第6章 模型服务设计 137<br />6.1 模型服务的解释 138<br />6.1.1 什么是机器学习模型 138<br />6.1.2 模型预测和推理 139<br />6.1.3 什么是模型服务 139<br />6.1.4 模型服务的挑战 140<br />6.1.5 模型服务术语 141<br />6.2 常见的模型服务策略 142<br />6.2.1 直接模型嵌入 142<br />6.2.2 模型服务 143<br />6.2.3 模型服务器 143<br />6.3 设计预测服务 144<br />6.3.1 单一模型应用 144<br />6.3.2 多租户应用 147<br />6.3.3 在一个系统中支持多个<br />应用程序 148<br />6.3.4 常见的预测服务需求 151<br />总结 151<br />第7章 模型服务实践 152<br />7.1 模型服务示例 152<br />7.1.1 运行示例服务 153<br />7.1.2 服务设计 154<br />7.1.3 前端服务 155<br />7.1.4 意图分类预测器 159<br />7.1.5 模型驱逐 165<br />7.2 TorchServe模型服务器示例 165<br />7.2.1 与服务进行交互 165<br />7.2.2 服务设计 166<br />7.2.3 前端服务 167<br />7.2.4 TorchServe后端 167<br />7.2.5 TorchServe API 168<br />7.2.6 TorchServe模型文件 170<br />7.2.7 在Kubernetes中进行<br />扩展 173<br />7.3 模型服务器与模型服务 175<br />7.4 开源模型服务工具导览 176<br />7.4.1 TensorFlow Serving 176<br />7.4.2 TorchServe 178<br />7.4.3 Triton推理服务器 181<br />7.4.4 KServe和其他工具 185<br />7.4.5 将模型服务工具集成到现有服务系统中 186<br />7.5 发布模型 187<br />7.5.1 注册模型 188<br />7.5.2 在实时预测服务中加载任意版本的模型 189<br />7.5.3 通过更新默认模型版本发布模型 190<br />7.6 模型的后期监控 192<br />7.6.1 指标收集和质量门控 192<br />7.6.2 需要收集的指标 192<br />总结 193<br />第8章 元数据和工件存储 195<br />8.1 工件介绍 195<br />8.2 深度学习环境中的元数据 196<br />8.2.1 常见的元数据类别 197<br />8.2.2 为什么要管理元数据 198<br />8.3 设计元数据和工件存储 200<br />8.3.1 设计原则 200<br />8.3.2 通用元数据和工件存储设计方案 201<br />8.4 开源解决方案 204<br />8.4.1 MLMD 204<br />8.4.2 MLflow 207<br />8.4.3 MLflow与MLMD 209<br />总结 210<br />第9章 工作流编排 211<br />9.1 工作流编排介绍 212<br />9.1.1 什么是工作流 212<br />9.1.2 什么是工作流编排 213<br />9.1.3 在深度学习中使用工作流<br />编排的挑战 214<br />9.2 设计工作流编排系统 215<br />9.2.1 用户场景 216<br />9.2.2 通用编排系统设计 217<br />9.2.3 工作流编排设计原则 219<br />9.3 浏览开源工作流编排系统 220<br />9.3.1 Airflow 220<br />9.3.2 Argo Work flows 223<br />9.3.3 Meta flow 227<br />9.3.4 何时使用 230<br />总结 231<br />第10章 生产部署路径 232<br />10.1 准备产品化阶段 234<br />10.1.1 研究阶段 235<br />10.1.2 原型设计 235<br />10.1.3 要点总结 236<br />10.2 模型产品化 236<br />10.2.1 代码组件化 237<br />10.2.2 代码打包 238<br />10.2.3 代码注册 239<br />10.2.4 训练工作流设置 239<br />10.2.5 模型推理 240<br />10.2.6 产品集成 241<br />10.3 模型部署策略 241<br />10.3.1 金丝雀部署 242<br />10.3.2 蓝绿部署 242<br />10.3.3 多臂老虎机部署 242<br />总结 243<br />附录A 一个“Hello World”深度<br />学习系统 244<br />附录B 现有解决方案调查 253<br />附录C 使用Kubeflow Katib创建<br />HPO服务 262 |