跳到主要内容

Gear 存储持久化说明

OpenBayes 提供多种计算环境方案,本文主要介绍传统容器模式下的数据持久化机制。在这种模式下,容器在重启后,部分存储内容会保留,而部分会丢失。本文详细说明了哪些数据会保留,哪些会丢失,以及如何有效管理容器中的数据。

平台技术演进

OpenBayes 正在不断发展,除了本文介绍的传统容器模式外,平台还在积极开发「有状态容器」和「虚拟机」等新技术方案,这些方案将提供更灵活的数据持久化选项。本文内容主要适用于目前广泛使用的传统容器模式。

基本原理

为什么数据会丢失?

传统容器被设计为"无状态"和"可重复"的环境,这意味着:

  1. 隔离性:每次启动容器时,它都是全新的、干净的环境,不受之前操作的影响
  2. 一致性:每个人启动相同配置的容器时,得到的是完全相同的初始环境
  3. 安全性:每次重启都会清除潜在的错误、冲突或安全问题

这种设计使得传统容器特别适合科学计算和机器学习工作,因为它确保了实验的可重复性和环境的一致性。

为什么要这样设计?

这种设计有几个重要优势:

  1. 可靠性:避免「只能在我的环境运行」的问题
  2. 可扩展性:容器可以在任何支持相同容器技术的机器上运行
  3. 资源效率:多个容器可以共享底层资源,但彼此隔离
  4. 快速部署:可以迅速创建新环境而不影响其他工作

OpenBayes 的技术方案演进

随着用户需求的多样化,OpenBayes 正在拓展多种计算环境方案:

  1. 传统容器模式(本文重点):提供隔离、一致的环境,特定目录持久化
  2. 有状态容器(即将推出):提供更完整的状态保存,安装的软件和配置可以持久化
  3. 虚拟机方案(开发中):提供完全隔离的环境和全磁盘持久化,类似于物理机体验

不同方案各有优势,用户可以根据自己的需求选择最合适的方案:

  • 对实验可重复性要求高的场景,传统容器是理想选择
  • 需要保留复杂环境配置的场景,有状态容器会更加方便
  • 需要完全控制和自定义系统的场景,虚拟机方案更为适合

丰富的预置镜像库

为了减少用户自定义安装复杂依赖的需求,OpenBayes 提供了大量精心准备的预置镜像:

  • 多版本深度学习框架:包括 PyTorch、PaddlePaddle 等主流框架的多个版本
  • 专业领域镜像:针对计算机视觉、自然语言处理、强化学习等特定领域优化的环境
  • 常用工具集成:预装了数据科学常用的库和工具,如 NumPy、Pandas、Scikit-learn 等
  • GPU 加速支持:多种 CUDA 版本和相应的深度学习框架

这些预置镜像经过专业团队精心配置和测试,确保各组件之间的兼容性和稳定性,大大降低了用户环境配置的复杂度。用户可以直接选择最接近自己需求的镜像,而无需从头开始安装和配置复杂的依赖。

选择合适的镜像

在创建容器时,建议仔细查看可用镜像列表及其详细说明,选择最符合项目需求的预置环境。这样可以最大限度减少额外安装依赖的需求,提高工作效率。

持久化存储的解决方案

在传统容器模式下,OpenBayes 提供了专门的持久化目录(/openbayes/home)和数据仓库功能。这就像是在一次性工作室中提供了一个特殊的保险柜,您放在保险柜里的东西不会随工作室的重置而消失。

这种设计平衡了环境隔离的优势和数据持久化的需求,让您既能享受容器的便利,又不必担心重要数据的丢失。

数据管理相关资源

会丢失的存储内容

  1. 系统盘(根目录 / 下的内容)

    • 容器关闭后,系统盘上的所有数据都会被清除
    • 这包括根目录及其下的所有子目录(除了特定的持久化目录)
    • 通过 apt 安装的系统依赖会在容器重启后丢失
    • 默认情况下,通过 pip 安装的 Python 依赖也会丢失(除非使用 --user 参数)
  2. 环境设置和配置

    • 每次容器的「执行」环境都是隔离的
    • 所有手动安装的软件、依赖包在容器关闭后无法找回
    • 即使通过「继续执行」运行容器,也是一次全新的环境
  3. 临时文件和缓存

    • 容器内产生的临时文件、日志文件(非工作目录下)
    • 内存中的数据(如运行中的变量、模型状态等)

不会丢失的存储内容

  1. 工作目录(/openbayes/home

    • 所有保存在此目录下的数据会在容器关闭后自动保存
    • 这些数据会被同步到用户的全局存储空间并占用相应的存储配额
    • 下次启动容器时,可以通过数据绑定继续使用这些数据
  2. 特定的 pip 依赖

    • 如果使用 pip install --user xxx 命令安装依赖,这些依赖会被保存在 /openbayes/home/.pylibs 目录下
    • 这些依赖在容器重启后依然可用
  3. 自定义 Conda 环境

    • 如果在 /openbayes/home 目录下创建自定义的 Conda 环境,这些环境在容器重启后仍然可用
  4. 数据仓库中的数据

    • 通过数据仓库(数据集、模型)绑定到容器的数据不会丢失
    • 绑定到 /openbayes/input/input0-4 目录的数据可以在不同容器间共享使用
    • 关于如何绑定数据仓库中的数据,请参考数据绑定指南

最佳实践建议

  1. 所有需要持久保存的数据务必存放在 /openbayes/home 目录下

  2. 对于不需要修改但需要经常使用的大型数据集,建议创建为数据仓库并绑定到 /openbayes/input/input0-4 目录(了解如何绑定数据

  3. 对于经常使用的依赖包,可以:

    • 使用 pip install --user xxx 安装到用户目录
    • /openbayes/home 下创建自定义 Conda 环境(详细教程
    • 在代码仓库中包含 requirements.txt/conda-packages.txt 文件
  4. 将系统依赖的安装命令保存在 dependencies.sh 脚本中,以便每次容器启动时自动安装

  5. 定期清理不必要的数据,避免存储空间不足

  6. 对于需要长期保存或在多个容器间共享的大型数据集,建议上传到数据仓库并通过数据绑定使用

选择合适的技术方案

如果您发现自己频繁需要安装相同的系统依赖,或者需要复杂的环境配置,可以考虑使用OpenBayes即将推出的「有状态容器」或「虚拟机」方案,这些方案提供更持久的环境保存能力。

通过合理利用这些持久化机制,可以有效管理容器重启后的数据存储,减少重复工作,提高开发效率。