详细内容或原文请订阅后点击阅览
简化数据科学可重复性的 6 个 Docker 技巧
阅读这 7 个技巧,将 Docker 容器视为可重现的工件,而不是一次性包装器。
来源:KDnuggets简介
再现性以无聊的方式失败。一个针对“错误”glibc 编译的轮子、一个在你脚下移动的基本映像,或者一个可以工作的笔记本,因为你的笔记本电脑安装了六个月前的杂散系统库。
Docker 可以阻止所有这些,但前提是您将容器视为可重现的工件,而不是一次性包装器。
下面的技巧重点关注真正困扰数据科学团队的故障点:依赖漂移、非确定性构建、不匹配的中央处理单元 (CPU) 和图形处理单元 (GPU)、图像中的隐藏状态以及“在我的机器上运行”运行无人能重建的命令。
1. 在字节级别锁定基础镜像
基础图像感觉很稳定,直到它们悄然不稳定。标签移动,上游图像被重建以安装安全补丁,分发点在没有警告的情况下释放土地。即使每个应用程序依赖项都已固定,几周后重建相同的 Dockerfile 也可能会生成不同的文件系统。这足以改变数值行为、破坏编译轮子或使先前的结果无效。
修复方法既简单又残酷:通过摘要锁定基础镜像。摘要固定确切的图像字节,而不是移动标签。重建在操作系统 (OS) 层变得确定性,这是大多数“没有任何改变,但一切都损坏了”故事实际开始的地方。
来自 python:slim@sha256:REPLACE_WITH_REAL_DIGEST
人类可读的标签在探索过程中仍然有用,但是一旦环境经过验证,请将其解析为摘要并冻结它。当结果稍后受到质疑时,你不再为一个模糊的及时快照辩护。您指向的是一个可以毫无歧义地重建、检查和重新运行的确切根文件系统。
2. 使操作系统包具有确定性并将它们保留在一层中
在一个 RUN 步骤中显式安装操作系统软件包,并在同一步骤中清理 apt 元数据。这减少了漂移,使差异变得明显,并防止图像携带隐藏的缓存状态。
