Gear 存储持久化说明
OpenBayes 提供多种计算环境方案,本文主要介绍传统容器模式下的数据持久化机制。在这种模式下,容器在重启后,部分存储内容会保留,而部分会丢失。本文详细说明了哪些数据会保留,哪些会丢失,以及如何有效管理容器中的数据。
OpenBayes 正在不断发展,除了本文介绍的传统容器模式外,平台还在积极开发「有状态容器」和「虚拟机」等新技术方案,这些方案将提供更灵活的数据持久化选项。本文内容主要适用于目前广泛使用的传统容器模式。
基本原理
为什么数据会丢失?
传统容器被设计为"无状态"和"可重复"的环境,这意味着:
- 隔离性:每次启动容器时,它都是全新的、干净的环境,不受之前操作的影响
- 一致性:每个人启动相同配置的容器时,得到的是完全相同的初始环境
- 安全性:每次重启都会清除潜在的错误、冲突或安全问题
这种设计使得传统容器特别适合科学计算和机器学习工作,因为它确保了实验的可重复性和环境的一致性。
为什么要这样设 计?
这种设计有几个重要优势:
- 可靠性:避免「只能在我的环境运行」的问题
- 可扩展性:容器可以在任何支持相同容器技术的机器上运行
- 资源效率:多个容器可以共享底层资源,但彼此隔离
- 快速部署:可以迅速创建新环境而不影响其他工作
OpenBayes 的技术方案演进
随着用户需求的多样化,OpenBayes 正在拓展多种计算环境方案:
- 传统容器模式(本文重点):提供隔离、一致的环境,特定目录持久化
- 有状态容器(即将推出):提供更完整的状态保存,安装的软件和配置可以持久化
- 虚拟机方案(开发中):提供完全隔离的环境和全磁盘持久化,类似于物理机体验
不同方案各有优势,用户可以根据自己的需求选择最合适的方案:
- 对实验可重复性要求高的场景,传统容器是理想选择
- 需要保留复杂环境配置的场景,有状态容器会更加方便
- 需要完全控制和自定义系统的场景,虚拟机方案更为适合
丰富的预置镜像库
为了减少 用户自定义安装复杂依赖的需求,OpenBayes 提供了大量精心准备的预置镜像:
- 多版本深度学习框架:包括 PyTorch、PaddlePaddle 等主流框架的多个版本
- 专业领域镜像:针对计算机视觉、自然语言处理、强化学习等特定领域优化的环境
- 常用工具集成:预装了数据科学常用的库和工具,如 NumPy、Pandas、Scikit-learn 等
- GPU 加速支持:多种 CUDA 版本和相应的深度学习框架
这些预置镜像经过专业团队精心配置和测试,确保各组件之间的兼容性和稳定性,大大降低了用户环境配置的复杂度。用户可以直接选择最接近自己需求的镜像,而无需从头开始安装和配置复杂的依赖。
在创建容器时,建议仔细查看可用镜像列表及其详细说明,选择最符合项目需求的预置环境。这样可以最大限度减少额外安装依赖的需求,提高工作效率。
持久化存储的解决方案
在传统容器模式下,OpenBayes 提供了专门的持久化目录(/openbayes/home
)和数据仓库功能。这就像是在一次性工作室中提供了一个特殊的保险柜,您放在保险柜里的东西不会随工作室的重置而消失。
这种设计平衡了环境隔离的优势和数据持久化的需求,让您既能享受容器的便利,又不必担心重要数据的丢失。
会丢失的存储内容
-
系统盘(根目录
/
下的内容)- 容器关闭后,系统盘上的所有数据都会被清除
- 这包括根目录及其下的所有子目录(除了特定的持久化目录)
- 通过
apt
安装的系统依赖会在容器重启后丢失 - 默认情况下,通过
pip
安装的 Python 依赖也会丢失(除非使用--user
参数)
-
环境设置和配置
- 每次容器的「执行」环境都是隔离的
- 所有手动安装的软件、依赖包在容器关闭后无法找回
- 即使通过「继续执行」运行容器,也是一次全新的环境
-
临时 文件和缓存
- 容器内产生的临时文件、日志文件(非工作目录下)
- 内存中的数据(如运行中的变量、模型状态等)
不会丢失的存储内容
-
工作目录(
/openbayes/home
)- 所有保存在此目录下的数据会在容器关闭后自动保存
- 这些数据会被同步到用户的全局存储空间并占用相应的存储配额
- 下次启动容器时,可以通过数据绑定继续使用这些数据
-
特定的 pip 依赖
- 如果使用
pip install --user xxx
命令安装依赖,这些依赖会被保存在/openbayes/home/.pylibs
目录下 - 这些依赖在容器重启后依然可用
- 如果使用
-
自定义 Conda 环境
- 如果在
/openbayes/home
目录下创建自定义的 Conda 环境,这些环境在容器重启后仍然可用
- 如果在
-
数据仓库中的数据
- 通过数据仓库(数据集、模型)绑定到容器的数据不会丢失
- 绑定到
/openbayes/input/input0-4
目录的数据可以在不同容器间共享使用 - 关于如何绑定数据仓库中的数据,请参考数据绑定指南
最佳实践建议
-
所有需要持久保存的数据务必存放在
/openbayes/home
目录下 -
对于不需要修改但需要经常使用的大型数据集,建议创建为数据仓库并绑定到
/openbayes/input/input0-4
目录(了解如何绑定数据) -
对于经常使用的依赖包,可以:
- 使用
pip install --user xxx
安装到用户目录 - 在
/openbayes/home
下创建自定义 Conda 环境(详细教程) - 在代码仓库中包含
requirements.txt
/conda-packages.txt
文件
- 使用
-
将系统依赖的安装命令保存在
dependencies.sh
脚本中,以便每次容器启动时自动安装 -
定期清理不必要的数据,避免存储空间不足
-
对于需要长期保存或在多个容器间共享的大型数据集,建议上传到数据仓库并通过数据绑定使用
如果您发现自己频繁需要安装相同的系统依赖,或者需要复杂的环境配置,可以考虑使用OpenBayes即将推出的「有状态容器」或「虚拟机」方案,这些方案提供更持久的环境保存能力。
通过合理利用这些持久化机制,可以有效管理容器重启后的数据存储,减少重复工作,提高开发效率。