数据科学家需要多少Docker知识?角色、MLOps与开源洞察

Datanami

数据科学家到底需要多少Docker知识?这个问题常常会得到一个微妙的答案:视情况而定。随着数据工作领域的不断发展,理解容器化技术(如Docker)如何融入日常工作流程变得至关重要,特别是当Buildpacks等开源解决方案出现以简化这种集成时。

为了全面理解,区分数据学科中的各种角色至关重要。数据分析师通常侧重于探索和解释现有数据,通过数据清洗、可视化、统计分析和报告来提取洞察,常常利用SQL、Excel、商业智能平台,有时也使用Python或R进行脚本编写。相比之下,数据科学家使用先进的统计和机器学习技术构建复杂的模型和算法。他们的工作涵盖从数据收集和清洗到模型构建、评估,以及频繁的模型部署的整个生命周期,需要一个广泛的工具包,包括Python、R、各种机器学习框架(如TensorFlow、PyTorch和scikit-learn)、SQL,并日益熟悉云平台。数据工程师是一个较新的专业化角色,负责设计、构建和维护底层基础设施和系统,使数据科学家和分析师能够有效访问和利用数据。这涉及构建数据管道、管理数据库、处理分布式系统,并确保数据质量和可用性,这严重依赖于软件工程、数据库管理和分布式计算技能。

尽管数据工程师经常采用许多与DevOps相关的原则和工具,但将其简单地标记为“DevOps人员”是一种过度简化。数据工程师对数据结构、存储、检索和处理框架有着深刻的理解,这些理解超越了典型的IT操作。然而,向云基础设施的转变以及基础设施即代码(Infrastructure as Code)和持续集成/持续交付(CI/CD)等实践的采用,已使数据工程与DevOps所需的技能集显著融合。

这种融合在MLOps的兴起中表现得最为明显,MLOps是机器学习、DevOps和数据工程交叉领域的一个专业分支。MLOps将DevOps原则和实践应用于机器学习生命周期,旨在可靠、高效地在生产环境中部署、监控和维护机器学习模型。这包括将各种机器学习产物——从模型和管道到推理端点——投入运营。除了标准的DevOps工具,MLOps还引入了特定的需求和工具,如模型注册表、特征存储以及用于跟踪实验和模型版本的系统,这代表了更广泛的DevOps领域中针对管理ML模型独特挑战的独特专业化。

在过去的几年里,Kubernetes已成为大规模容器编排的事实标准,提供了一种健壮且可扩展的方式来管理容器化应用程序。这种采用,主要由工程和运营方面因其在可扩展性、弹性、和可移植性方面的优势所驱动,不可避免地影响了与已部署应用程序交互的其他角色。随着机器学习模型越来越多地作为微服务部署在由Kubernetes管理的容器化环境中,数据科学家发现自己需要了解模型在生产中如何运行的基础知识。这通常始于掌握容器的基本原理,其中Docker是最流行的容器化工具。学习Docker或Kubernetes这样的基础设施工具与掌握像电子表格程序这样的应用程序是截然不同的任务;它涉及理解与操作系统、网络、分布式系统和部署工作流相关的概念,代表着向基础设施和软件工程实践领域迈出的重要一步。

容器在ML管道的各个阶段都扮演着基础性角色。在数据准备阶段,数据收集、清洗和特征工程等步骤可以容器化,以确保环境和依赖项的一致性。模型训练作业可以在容器内运行,从而简化依赖项管理并在不同机器之间进行扩展。容器也是ML的CI/CD管道的核心,支持模型和相关代码的自动化构建、测试和部署。虽然模型注册表本身可能不会由数据科学家进行容器化,但推送和拉取模型产物的过程通常与容器化工作流集成。模型服务是一个主要用例,模型通常在容器内提供服务以实现可扩展性和隔离。最后,用于监控使用情况、模型漂移和安全性的可观测性工具经常与容器化应用程序集成,以提供对其性能和行为的洞察。

尽管容器化日益受到重视,但很大一部分数据科学工作仍在非容器化环境中进行。并非每个任务或工具都能立即从容器化中受益或需要容器化。例如,初步数据探索和临时分析通常在本地Jupyter Notebook或集成开发环境中进行,而无需容器化的开销。同样,使用基于桌面的统计软件、在传统共享集群上处理大型数据集,或运行简单的定时脚本进行数据提取或报告可能不需要容器化。较旧的遗留系统或工具也常常缺乏原生的容器支持。

这些非容器化选项的普及和便利性意味着数据科学家常常倾向于使用它们。容器可能会带来显著的认知负担——又一项需要学习和掌握的技术。然而,容器为数据科学团队提供了引人注目的优势,尤其是在消除环境不一致性和防止从本地开发到测试和生产等不同阶段之间的依赖冲突方面。它们还促进了可复现和可移植的构建以及模型服务,这些都是数据科学家非常需要的功能。并非所有数据团队都能负担得起大型、专业的运营团队来处理这些复杂性。

这就是Cloud Native Buildpacks提供简化解决方案的地方。数据科学家经常处理涉及Python或R等语言以及众多库的各种工具链,导致复杂的依赖管理。将这些产物投入运营通常需要手动拼接和维护复杂的Dockerfile。Buildpacks通过自动化必要的构建和运行时依赖项的组装,并在没有明确Dockerfile指令的情况下创建OCI兼容镜像,从根本上改变了这一过程。这种自动化显著减轻了数据科学家的操作负担,使他们摆脱了基础设施的担忧,从而能够专注于其核心分析任务。作为CNCF孵化项目,Cloud Native Buildpacks是一个由多个组织社区维护的开源工具,在MLOps领域具有重要的实用价值。