容器作为可复现模型的简介
数据科学中用于可复现模型的容器技术简介
容器的需求
在部署数据科学模型时,重要的是能够复现训练和服务阶段所使用的相同环境。在《第章:模型作为 Web 端点》中,我们使用了同一台机器来运行两个环境;而在《第3章:模型作为无服务器函数》中,我们通过 requirements.txt 文件确保模型服务所用的无服务器环境与开发环境一致。像 Docker 这样的容器系统提供了一种构建可复现环境的工具,并且相比虚拟机等替代方案更加轻量。
隔离的环境
容器的核心思想是创建一个隔离的环境,在其中可以配置完成特定任务所需的各种依赖。容器框架的目标是以极小的资源开销实现不同实例之间的隔离。使用容器框架时,你只需声明代码所需的依赖,框架会自动处理不同执行环境的管理工作。
- 一些常见的容器化任务包括:
- 执行 ETL 工作
- 部署机器学习模型
- 搭建 API 服务
- 托管交互式 Web 应用

Docker
弹性容器服务
弹性容器环境(如 AWS 的 Elastic Container Service,ECS)提供的功能类似于无服务器函数,其目标是将数据科学模型的托管从服务器管理中抽象出来。
- 无服务器环境通常仅支持特定运行时,内存受限,难以运行深度学习框架,且往往绑定特定云厂商。
- 使用 ECS 时,你需要自行配置用于服务模型的实例类型。

使用 ECS 可以自由选择模型服务所需的语言,并可根据需要分配更多内存。尽管 ECS 本身是 AWS 的专有工具,但更新的选项如 EKS 基于开源且可移植的 Kubernetes 构建,避免了这一局限性。
容器在数据科学中的应用
以下是我在数据科学领域中观察到的一些容器使用场景:
- 可复现的分析:容器为打包分析流程提供了理想方式,使得团队成员可以在数月甚至数年后重新运行你的工作。
- Web 应用程序:在《第章:使用 Dash 构建交互式 Web 服务》中,我们使用 Dash 构建了一个交互式 Web 应用。容器能有效屏蔽部署过程中的托管复杂性。
- 模型部署:若要将模型暴露为服务端点,容器可很好地将模型应用代码与模型服务基础设施解耦。
本章学习目标
本章的重点是上述最后一个应用场景。我们将从《第章:模型作为 Web 端点》中的 Web 服务出发,将其封装进一个 Docker 容器中。首先会在本地 EC2 实例上运行该容器,然后探索使用 ECS 实现可扩展、负载均衡且容错的模型部署。最后,我们将展示如何在 GCP 上借助 Kubernetes 实现类似的效果。
云成本提醒随着我们开始使用可扩展的计算环境,在使用 ECS 和 GKE 时需密切关注云资源成本。对于 AWS,应注意正在运行的 EC2 实例数量;而在 GCP 上,计费工具可有效追踪支出。后续关于编排的内容主要针对 AWS,所采用的方法不具备跨云平台的可移植性。如果你的模型部署不需要使用 AWS,可直接跳转至 Kubernetes 相关课程。
