1.3 为什么需要容器化
容器提供的隔离性使得机器学习中的阶段具有可移植性和可重现性。容器化的应用程序与机器的其他部分隔离开来,并且包含它们的所有需求(从操作系统开始)[1]。容器化意味着不再有“它在我的机器上工作”或“我们只忘记了一个额外的数据包”等对话。
容器建立在可组合的层之上,这允许你使用另一个容器作为基础。例如,如果你想添加一个新的自然语言处理(NLP)库,可以在现有的容器中进行添加,而不必每次都从头开始。可组合性允许你复用一个共同的基础。例如,我们使用的R容器和Python容器都共享一个基础的Debian容器镜像。
使用容器时,人们普遍担心的一个问题是开销。容器的开销取决于你的实现,但IBM[2]的一篇论文表明容器开销相当低,通常比虚拟化方式更快。使用Kubeflow时,如果你安装了可能不使用的Operator,可能会产生一些额外的开销,这种开销在生产集群上可以忽略不计,但在笔记本电脑上可能会很明显。
有Python经验的数据科学家可以把容器看作一个较重的虚拟环境。除了你在虚拟环境中习惯的内容之外,容器还包括操作系统、数据包以及所需的一切依赖。
[1] 关于容器的更多信息,请参见Google云资源(https://oreil.ly/wqetc)。在有GPU或TPU的情况下,隔离细节更加复杂。
[2] W. Felter等人,“An Updated Performance Comparison of Virtual Machines and Linux Containers,”2015 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS),March 29-31, 2015, doi: 10.1109/ISPASS.2015.7095802。