百图生科(BioMap)由百度创始人李彦宏先生联合创立,专注于生命科学领域的人工智能技术。公司推出了全球最大的生命科学 AI 基础模型 xTrimo V3,拥有 2100 亿参数,覆盖蛋白质、DNA、RNA 等多个生命科学领域。

随着生命科学领域数据量的爆发式增长,存储成本日益增加。为了降本增效,百图生科对 Lustre、Alluxio、JuiceFS 等多个存储方案进行评估。综合考虑成本、性能和运维等因素后,最终选择了JuiceFS。

目前,JuiceFS 已成功应用于 finetune 和 inference 场景,存储了数十亿的小文件,读写性能可满足需求。且与原有架构相比,整体存储成本降低了 90%。

01 生命科学领域的存储模式与痛点

大模型时代为生命科学注入了新动力。以药物发现为例,传统研发依赖大量实验筛选,投入高、周期长。而如今,借助大模型加速筛选候选分子,大幅提升了效率与成功率。比如,百图生科推出的 xTrimo 系列模型,参数规模高达 2100 亿,覆盖蛋白质、DNA、RNA 和细胞等领域。

然而,大模型的发展离不开算力、算法和数据三大支柱,其中存储作为底层基础,对性能发挥至关重要。随着生命科学领域数据量的爆发式增长,海量数据的存储与管理成为新的挑战。

  • 备份可靠性问题:当数据量达到 TB 甚至 PB 级别(包含约 10 亿个小文件)时,备份过程经常失败。即使备份成功,也需要长达一个月的时间,且一旦发生文件丢失,几乎无法恢复使用。
  • 存储成本高:现有系统缺乏智能的冷热数据分离机制,导致所有数据(包括极少访问的冷数据)都存储在昂贵的文件系统中,而非成本更低的对象存储,造成资源浪费。采用传统云存储方案时,企业每年需要承担高达千万级别的存储费用,这给处于快速发展阶段的公司带来了财务负担。

02 存储选型:Lustre vs Alluxio vs JuiceFS

首要目标是实现降本增效,在满足业务对吞吐和延时要求的前提下,有效降低存储成本。其次,需兼顾数据安全与读写性能,确保业务数据的完整性和可用性。此外,考虑到公司运维团队规模较小,存储系统的部署与维护应尽可能简单易行,避免复杂的系统优化工作给运维团队带来过大压力。

基于上述需求,对 Lustre、Alluxio 和 JuiceFS 三款存储系统进行了分析:

Lustre 采用计算资源本地盘(如 SSD)搭建集群,通过多个节点组合实现大容量存储。然而,这种架构后端并非对象存储,无法充分利用对象存储在成本和扩展性方面的优势,因此不符合需求。

Alluxio 主要作为缓存层存在,可将不同文件系统的数据进行集中缓存,实现统一访问。但Alluxio 并不能从根本上解决存储成本高、冷热数据管理困难等问题,因此也未将其作为首选方案。

最终,我们选择了 JuiceFS。其社区活跃度高,能够及时获得技术支持和功能更新,为系统的长期稳定运行提供保障。同时,JuiceFS 原生支持对象存储,充分利用了对象存储的低成本和高扩展性,显著降低了整体存储成本。此外,JuiceFS 部署简单、维护便捷,进一步减轻了运维负担。

为确保实际应用中的表现,我们进行了测试。功能上,JuiceFS 不仅支持 CSI 与公司使用的 Kubernetes平台无缝集成;而且稳定性良好,易于维护和部署。性能如下图所示,小文件(1K)访问性能:百度 CFS 明显更优;中大文件(10MB+)顺序读写性能:JuiceFS 略胜,尤其在高并发下更具扩展性。测试中使用的元数据引擎为 MySQL,文件规模约为千万级。在下文中,我们将介绍在针对小文件访问性能优化后,JuiceFS 的整体表现已基本达到与百度 CFS 持平的水平。

基于此,决定将数据从 BOS 对象存储向 JuiceFS 进行迁移。尽管这一迁移工作涉及海量数据,任务艰巨,但考虑到 JuiceFS 在降本增效、性能、稳定性等方面的综合优势,我们认为这一投入是值得的。

03 基于 JuiceFS 的存储新架构,成本下降90%

在基于 Kubernetes 构建的平台最初使用基于 SSD 盘组的 NFS 文件系统作为底层存储,整体使用成本相当于对象存储的近 10 倍。引入 JuiceFS 后,数据可直接持久化到如 S3、OSS 等公有云对象存储中,JuiceFS 集群本身开销极小,几乎可忽略。通过这一架构转型,平台成功用对象存储替代原有 SSD 方案,实现了超 90% 的存储成本下降。

JuiceFS 采用数据与元数据分离存储的架构。文件数据本身会被切分保存在对象存储,而元数据则可以保存在 Redis、MySQL、TiKV、SQLite 等多种数据库中,用户可以根据场景与性能要求进行选择。

在选择元数据引擎时,最初我们使用了 MySQL,但当文件数量超过 1 亿时,MySQL 的性能会显著下降。最终选择了 TiKV 作为元数据引擎。然而,TiKV 目前只有社区版,没有商业版支持,团队在遇到问题时主要依靠与社区交流和查阅文档来排查问题,这对系统的维护和优化带来了一定的挑战。我们目前平台使用的存储量级达到 PB 级别,文件数量达几十亿个。

上文提到,早期我们曾遇到备份可靠性不足的问题,目前我们通过 JuiceFS 提供的元数据备份机制实现了稳定的元数据备份。同时,为防止误删除数据,还结合 JuiceFS 的回收站功能,进一步提升了数据安全性与可恢复性。

04 JuiceFS 使用实践

数据迁移工具

在迁移过程中,团队最初尝试自行使用 Python 编写多进程多线程代码来提高数据同步速度,但遇到了诸多问题。后来,团队发现了 JuiceFS 提供的 juicefs sync 命令,该命令有效解决了数据同步问题,提高了迁移效率。

存储接入方式优化

编者注:

关于 JuiceFS CSI 的使用,我们推荐使用动态配置,并通过设置同一个 StorageClass 共享 Mount Pod,这样既能兼顾功能性,也便于管理。不建议采用下文中提到的配置相同 volumeHandle 的方式实现共享,该方式可能导致 CSI 的多项高级功能(如平滑升级)无法正常使用。

此外,JuiceFS CSI 的平滑升级功能,能够在无需重启业务 Pod 的情况下完成 Mount Pod 升级,进一步提升系统的可用性和维护效率。

团队最初考虑使用 JuiceFS CSI 将数据接入 k8s 平台。CSI 方式具有与云环境兼容性好、便于维护、支持监控 Dashboard 等优点,通过简单的 yaml 部署即可实现存储的快速接入和管理。

然而,在实际应用中,我们遇到了一些问题:

  • 共享 mountpod 配置问题:由于平台中每台节点上的 pod 数量有限,团队希望所有用户共享一个 mountpod。虽然通过参数 volumehandle 可以实现同一节点上不同用户生成的 PVC 携带相同的 volumehandle,但这种配置方式增加了系统的复杂性和管理难度。
  • mountpod 预铺与更新问题:使用 CSI 默认方式时,在资源不足的情况下,mountpod 无法正常启动,进而导致业务 pod 出现问题。因此,团队需要提前预铺 mountpod,并设置参数 juicefs-delete-delay: 525600h,以保证业务 pod 结束后 mountpod 不被释放。但在更新 mountpod 资源时,需要各业务配合清理业务 pod、删除旧 mountpod 并启动新 mountpod,操作流程繁琐,且容易出错。
  • 稳定性问题:由于本地缓存过大,并且伴随着 PageCache 占用过高,mountpod 经常出现内存溢出(OOM)问题。这导致业务 pod 内部的读写操作受到影响,进而影响了业务的正常运行。

鉴于 CSI 方式存在的问题,团队决定切换至传统的 HostPath 挂载方式,该方式通过将 JuiceFS 挂载到各个节点上,业务 Pod 通过 HostPath 直接使用挂载后的文件系统,相比 CSI 方式更加稳定。然而,这种方式也存在部署相对繁琐、不易于管理和升级等缺点。为了克服这些问题,团队借助自动化工具进行批量部署和管理,提高了操作效率。

文件复制性能优化

在 JuiceFS 使用过程中,业务反馈 pod 启动速度变慢。经过运维侧和业务侧共同排查,发现耗时主要集中在业务代码的文件复制(cp)操作上。运维团队测试发现,在相同文件数的情况下,JuiceFS 的 cp 性能比 CFS 慢 3 倍以上。由于 cp 操作是单线程的,团队通过使用 juicefs sync 命令增加并发度,有效加快了 cp 过程,并将线上业务涉及 cp 的操作全部替换为 juicefs sync。

包导入与文件读写性能优化

业务在测试过程中还发现,使用 JuiceFS 时包导入速度较慢,小文件读写速度比 CFS 慢 8 倍,大文件读速度比 CFS 慢 4 倍。团队通过增加客户端缓存的方式解决了这一问题,利用 GPU 机器上自带的 NVMe 盘作为客户端读缓存介质。优化后,小文件和大文件的读写性能与 CFS 基本持平,显著提升了业务性能。

05 小结

百图生科通过选用 JuiceFS 并构建基于对象存储的新架构,将整体存储成本降低了 90%。在数据迁移、Kubernetes 接入、性能优化与高并发场景应对等方面,团队积累了丰富经验。此次系统重构不仅显著提升了平台的稳定性、性能与弹性,也为未来规模化发展打下了坚实基础。希望本次实践经验能为更多生命科学与 AI 企业提供参考。

希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

百图生科:基于 JuiceFS 构建生命科学大模型存储平台,成本降 90%的更多相关文章

  1. 乾象投资:基于JuiceFS 构建云上量化投研平台

    背景 乾象投资 Metabit Trading 成立于2018年,是一家以人工智能为核心的科技型量化投资公司.核心成员毕业于 Stanford.CMU.清北等高校.目前,管理规模已突破 30 亿元人民 ...

  2. 基于Ambari构建自己的大数据平台产品

    目前市场上常见的企业级大数据平台型的产品主流的有两个,一个是Cloudera公司推出的CDH,一个是Hortonworks公司推出的一套HDP,其中HDP是以开源的Ambari作为一个管理监控工具,C ...

  3. AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践

    云知声是一家专注于语音及语言处理的技术公司.Atlas 超级计算平台是云知声的计算底层基础架构,为云知声在 AI 各个领域(如语音.自然语言处理.视觉等)的模型迭代提供训练加速等基础计算能力.Atla ...

  4. Apache Maven(二):构建生命周期

    Maven 约定的目录结构 我要遵循Maven已经约定好的目录结构,才能让maven在自动构建过程中找到对应的资源进行构建处理.以下是maven约定的目录结构: 项目名称 |-- pom.xml :M ...

  5. Maven的构建生命周期理解

    以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...

  6. 基于Kubernetes 构建.NET Core技术中台

    今天下午在腾讯云+社区社区分享了<基于Kubernetes 构建.NET Core技术中台>,下面是演讲内容的文字实录. 我们为什么需要中台 我们现在处于企业信息化的新时代.为什么这样说呢 ...

  7. 视频私有云实战:基于Docker构建点播私有云平台

    私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...

  8. SPC软控件提供商NWA的产品在各行业的应用(生命科学行业)

    在上一篇文章中,我们提到了NWA软件产品在各行业都有广泛的应用,并且就化工行业的应用展开了详细介绍.而在本文中,您将看到NWA产品在生命科学行业也扮演着不可替代的角色. Northwest Analy ...

  9. Maven构建生命周期

    以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...

  10. 基于Kebernetes 构建.NET Core技术中台

    原文:基于Kebernetes 构建.NET Core技术中台 我们为什么需要中台 我们现在处于企业信息化的新时代.为什么这样说呢? 过去企业信息化的主流重心是企业内部信息化.但现在以及未来的企业信息 ...

随机推荐

  1. PADS无模命令总结表

    无模命令总结表 1.C 补充格式,在内层负片设计时用来显示 Plane 层的焊盘及 Thermal.使用方法是,从键盘上输入 C 显示,再次输入 C 可去除显示. 2.D 打开/关闭当前层显示,使用方 ...

  2. 一文搞懂 MCP Servers

    一文搞懂 MCP Servers 什么是MCP MCP概念 MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 提出并于 2024 年 11 月开源的一种通 ...

  3. Opencv | 图形学 | Mingw64 | 如何正确地用MinGW64编译与配置vscode的Opencv环境

    如何正确地用MinGW64编译与配置vscode的Opencv环境 1.前情提要 最近有关于图形学的授课,教授开始布置的上机打码的代码实现作业了.虽说教授为了让我们省心,直接就整了个环境已经配置好的几 ...

  4. AI时代的灵魂拷问:我们真正的核心竞争力到底是什么?

    "当所有人都在谈论AI+的时候,今天我想聊一点不一样的..." 上周,朋友看着我用Cursor在30分钟内完成了他过去需要两天才能完成的工作. 那一刻,一种强烈的危机感涌上心头,他 ...

  5. 跨平台Windows和Linux(银河麒麟)操作系统OCR识别应用

    1 运行效果 代码下载链接: https://pan.baidu.com/s/1NUfLTjk6kzXJKsaH7yo4qA?pwd=rk5c 提取码: rk5c. 在银河麒麟桌面操作系统V10(SP ...

  6. 「一」vim简介

    什么是vim? 一个历史悠久的文本编辑器 vim采用了模式编辑的理念,提供了多种模式 底線命令模式 插入模式 命令模式 交互式教程 $: vimtutor :自带教程 $: vim -h : vim命 ...

  7. Windows 提权-PrintNightmare

    本文通过 Google 翻译 PrintNightmare – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充 ...

  8. 报错:ReferenceError: __dirname is not defined in ES module scope

    报错: __dirname is not defined in ES module scope 前言 新版 NodeJS 支持通过 ESM 方式导入模块,代码如: // CommonJS 规范(旧) ...

  9. Golang 入门 : 浮点数

    浮点数介绍 Go语言提供了两种精度的浮点数:float32 和 float64.它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持. 这些浮点数类型的范围可以从很微小 ...

  10. 出现TypeError: float() argument must be a string or a number, not _NoValueType(机器学习 Win11)

    博客地址:https://www.cnblogs.com/zylyehuo/ 如果出现以下报错 则说明是torch.numpy等库的版本不匹配 可以去以下网站寻找匹配的版本 https://mirro ...