V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nakroy
V2EX  ›  程序员

AI 大模型的分布式存储方案

  •  
  •   nakroy · 37 天前 · 1768 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的大模型动辄几十 G 几百 G ,如果只是在 GPU 节点本地部署和训练,那么磁盘 I/O 是不需要考虑太多的,但是如果是在集群中部署,一般集群会有专门的计算节点( GPU)和专门的存储节点,计算节点只负责运行 AI 程序,不会有大容量存储本地的模型文件,而交给专门的存储节点存储。

    问题来了,如果是以前的 web 微服务,那么瞬时读写数据量不会那么大(对单个程序来说),但是大模型加载需要从磁盘读取,如果要求必须在几秒内或几十秒内读取完毕并加载到计算节点的 GPU 上,那么对存储节点的读写性能和网络性能要求就很高了,

    想问一下针对大模型的分布式存储解决方案一般是怎么样的?现在有针对大模型读写 I/O 场景的存储系统优化吗?

    25 条回复    2024-10-26 13:48:53 +08:00
    zhlxsh
        1
    zhlxsh  
       37 天前 via iPhone
    买好网卡,上 ib 。
    nakroy
        2
    nakroy  
    OP
       37 天前
    @zhlxsh 存储系统读写性能大概要多高才行呢?
    fcten
        3
    fcten  
       37 天前
    计算节点也都是有存储的,没必要省那点钱。计算节点又不会经常换,只有第一次部署的时候需要从分布式存储加载一下,几分钟的事,并没有很大压力。不存在必须要几秒内加载完成的情况。
    即使是训练,也是到了一个 checkpoint 才保存一次。存储一般不会成为瓶颈。
    paopjian
        4
    paopjian  
       37 天前
    如果才几百 G,不考虑专门留个大内存服务器吗,内存当硬盘用,用光纤连接,估计瓶颈就在 CPU 和 IO 上了
    sampeng
        5
    sampeng  
       37 天前
    你这个故事有点像:我就 1G 内存,怎么读 100G 文件一个故事
    nakroy
        6
    nakroy  
    OP
       37 天前
    @fcten 考虑到同步的问题,例如同时用多个 GPU 节点做微调和训练,从集中的存储系统读取和存储而非每个节点都存储 checkpoint 副本,如果数据集很大,也不会考虑每个节点都存这个数据集
    nakroy
        7
    nakroy  
    OP
       37 天前
    @paopjian 也就是直接把模型加载到存储节点的内存,然后让其他节点通过光纤直接读存储节点内存的数据?
    paopjian
        8
    paopjian  
       37 天前
    @nakroy 还是个成本问题,专门的存储节点是为了节省维护费用,相当于专门的维护管理,不用管每个机器的硬盘了, 但是大模型这种应该是每个机器都分配好了加载的模型吧, 不存在频繁的读取保存需求
    nakroy
        9
    nakroy  
    OP
       37 天前
    @paopjian 因为很多情况下,机器可能需要加载多个模型而不只是一个模型,或者如果单个模型非常大,假设你要使用多个机器去加载,占用的存储空间还是很大的,每个节点都为每个模型备份一次,就显得比较繁琐。当然我这里还没讨论到千卡万卡规模的集群,我认为这种级别的集群也是使用分布式存储的,只是因为是商业方案不会公开这些架构细节
    nakroy
        10
    nakroy  
    OP
       37 天前
    @sampeng 就是传统的分布式存储无法满足大模型场景的读写性能,应该有专门针对大模型场景 I/O 优化的硬件软件方案
    TonyG
        11
    TonyG  
       37 天前
    别说实际使用,我们之前演示用的模型都不会每次都从硬盘读的,而是多个进程同时加载到内存备用,一旦请求过来就通过队列调用。
    mightybruce
        12
    mightybruce  
       37 天前
    兄弟你就别自我意淫吧,没搞过就别想什么了。 大模型训练是不可能每次从磁盘上读取的, 另外大模型非常大,神经网络都是多块 gpu 每个计算一部分,通过高速网络和缓存并尽量减少 cpu 和 操作系统的占用。
    传统的 PCIE 都嫌慢,你还跟我说用磁盘,哈哈,我都笑死了。
    了解 RDMA 是什么技术,
    IB, 以太网 RoCE 都可以支持 RDMA.
    mightybruce
        13
    mightybruce  
       37 天前
    存储使用 PCIE 接口的带宽都不适合 70B 大模型 以上的多卡训练和推理的大模型, 你去云计算厂商和 AI 大模型公司那里多了解了解吧。
    nakroy
        14
    nakroy  
    OP
       37 天前
    @mightybruce IB 和 RDMA 技术有过了解,英伟达就有专门的配套用 IB 交换机的网络方案,但是一般的客户根本玩不起,而且我这里根本没说每次加载都从磁盘加载,而是考虑到 GPU 节点首次需要使用存储的模型权重或者数据集时可能的读写性能瓶颈,如果你一次全部把所有模型所有数据全加载到内存上一直用,也不用导出到磁盘作存储,那你无敌了
    mightybruce
        15
    mightybruce  
       37 天前
    模型的参数 就是在各个服务器的内存以及 GPU 大模型的 专门的显存里面的。
    我语气有一点冲,不过你的确是在自我想象

    RDMA 现在已经有支持以太网的方案,并非一定要 IB
    mhycy
        16
    mhycy  
       37 天前
    在这里面集中存储没有任何意义
    对于推理服务器来说一个机器一份都没问题
    对于训练服务器,本地训练一个分片再提交到集群不管从经济还是性能都是最优选择
    没必要为了集群而集群,集群的存储可是很烂的,这并不是需要集中存储高可用的场合
    mhycy
        17
    mhycy  
       37 天前
    至于高性能的分布式存储现在的性能顶峰可以看看这家:
    https://www.graidtech.com/
    nakroy
        18
    nakroy  
    OP
       37 天前
    @mightybruce 所以实际模型权重一直保留在内存里,需要的时候直接加载到 GPU 上?这里的内存是指存储节点的内存,而不是计算节点的内存,例如 GPU 节点能直接读取存储节点内存上的模型参数加载到 GPU 上,而不是先加载到 GPU 节点的内存上,然后再从 GPU 节点的内存上再加载到 GPU 节点的 GPU 上?
    nakroy
        19
    nakroy  
    OP
       37 天前
    @mhycy 好的,了解了。那看来对于集群场景,使用专门的存储节点确实不是必须的
    mightybruce
        20
    mightybruce  
       36 天前
    模型权重分担在各个计算节点上内存和 GPU 显存,每一次推理不是一张显卡,是好几张显卡同时计算。
    你只要买英伟达的专门用来大模型训练的高端显卡比如 A100, H100 或国内华为相应的显卡昇腾 910B 训练机器, 人家自然会告诉你存储、网络,cpu, 交换机的选择。
    mightybruce
        21
    mightybruce  
       36 天前
    https://arthurchiao.art/blog/gpu-advanced-notes-1-zh/
    可以看看这个人写的一些科普吧。
    nakroy
        22
    nakroy  
    OP
       36 天前
    @mightybruce 我现在有 4 台 910B 的机器做测试,不纠结分布式存储那直接用本地为每一个模型分片存储确实成本最低。因为训练场景不多,主要还是推理场景。但是华为的人推的方案就有提到搭配他们的存储产品,所以不知道和传统的分布式存储有啥区别
    nakroy
        23
    nakroy  
    OP
       36 天前
    @mightybruce 好的兄弟,我去看看
    infinet
        24
    infinet  
       36 天前 via Android
    传统分布式储存指什么?至少 Lustre beegfs 之类已经是分布式储存的天花板了,单个超大文件分散到多个储存节点,如果觉得吞吐量不够就加节点。它两个之外还有 IBM 的 gpfs ,据说口碑不错就是用的人比较少。听朋友说某国产储存也是分布式,但它计算节点的储存客户端非常耗资源。
    tap91624
        25
    tap91624  
       36 天前
    存储不是啥瓶颈的,内存到显存通信才是大头
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2594 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:29 · PVG 14:29 · LAX 22:29 · JFK 01:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.