异数OS-织梦师-大禹(九)奔跑在GPU上的异数OS

前言

不知不觉异数OS已经发布5年了,5年来Linux依旧原地踏步,最近甚至爆出维护支持从6年降为2年,这是闭源商业逻辑的胜利和开源传销逻辑的破产体现,劣币驱良币终究要有人无以为继,承担传销恶果,而异数OS在闭源商业逻辑的愿景支撑下,已得到了更多的进步。

文章目录

    • 前言
    • 异数OS大禹开发背景:
    • 目标能力:
    • 为什么需要在GPU上跑异数OS:
    • GPU上的异数OS性能测试
      • TCPIP性能测试
      • 独立Pipeline性能测试

异数OS大禹开发背景:

最近有消息称8张nvidia a100在17B gpt大模型推理中战胜了一座知名的超算中心,这是令人振奋鼓舞的消息,这意味着一些重要的应用体验将不再是超算的专属玩具,随着大模型的广泛开发应用,热数据的分布式计算存储墙效率问题成为木桶短板效应中的最短板,已严重影响大模型的开发效率和经济成本效率,因此将异数OS基础理论移植到GPU环境将有希望缓解存储墙问题,提高分布式计算效率降低成本。

目标能力:

  1. 在GPU上直接实现TCPIP协议。
  2. 不依赖CPU调度在GPU上实现Pipeline的全流程调度,与OpenGL的以线程为单位的计算调度模型不同,异数OS以Pipeline为调度单位,因此相对OpenGL的线程调度计算模型,Pipeline上的计算任务不再需要关心复杂玄学的线程组同步,这将大大提高算法开发效率和GPU算力利用效率。
  3. 在OpenGL基础上实现,使得他在消费应用领域得到更广泛的支持,希望在未来的手机上也可以跑gpt的推理任务。

为什么需要在GPU上跑异数OS:

  1. 在分布式计算环境中,GPU非常依赖CPU操作系统调度网卡来做数据搬运,任务调度,如果GPU能实现TCPIP协议栈,那么在未来将有希望通过CXL或者GPU集成以太网卡的形式让GPU直接完成分布式环境下的数据搬运和任务调度,这将使得GPU有望不依赖CPU和通用操作系统IO来独立完成更加通用的分布式计算任务。

  2. 在大规模的分布式环境下,网络拥塞丢包是必然的物理定律天花板,TCPIP协议则是有效解决拥塞效率的基础保障,支持TCPIP的异数OS GPU线程在拥塞环境中相比没有TCP支持的线程,他更加有效率,更加茁壮,更加独立的完成计算任务。

  3. 相比IB RDMA技术,基于以太网的异数OS TCPIP线程在细粒度任务表现中拥有更高的通讯调度效率,他可以使用最小64字节的数据包,在同样带宽情况下,他的IOPS可以达到IB RDMA等技术的2个数量级,因此在算法设计中,他天然具备稀疏任务的设计计算能力,不需要精心的设计任务合批降低IO来换取效率,因此减少了工程优化成本,大大加速了算法迭代。

  4. 通过GPU上的异数OS任务调度,GPU有望不依赖CPU实现完整的Pipeline调度,在过去Pipeline设计中通常需要将Pipeline拆分成Map-Reduce的过程,但是在过去的体系架构中,GPU上没有操作系统,这使得GPU无法独立完成Map-Reduce的整个流程,它需要CPU在操作系统IO性能约束下协助GPU实现一个CS同步结构才能实现Map-Reduce的全流程,在通用操作系统中为了IO效率这需要CPU为Pipeline实现异步队列调度同步,这使得在复杂的异步队列调度模型中实现复杂的Pipeline将是一个巨大的n^2的易错工程问题,这样的工程问题周期通常以年为单位,当Pipeline迭代变化后,这一工程问题将不得不重新来过,因此借助异数OS在GPU上实现独立完整的Pipeline调度将有利于算法设计,减少复杂的工程优化问题。

  5. 在一些细粒度复杂reduce自适应稀疏任务场景中,CPU需要上一次任务的结果来规划下一阶段任务,这将使得异步队列的效能退化失效,从而造成IOPS效率降低1到2个数量级,使得GPU算力无法满载,使用异数OS 在GPU上独立完成Pipeline全流程可以减少了CPU NIC GPU 的DMA同步调度环节,因此可以表现出更加卓越的数量级差异的reduce任务性能效率。

GPU上的异数OS性能测试

硬件环境:RX580,使用该硬件环境是因为,RX580是未来10年移动环境下GPU的技术特性与性能的天花板。
测试内容:分为TCPIP性能测试和独立Pipeline性能测试。

TCPIP性能测试

  1. 本地回环测试,64组线程,每组64个本地线程。
  2. 本地线程TCPIP性能测试,64组线程,每组64个本地线程,本地线程通过TCPIP实现组环,在环上每个本地线程向下一个组内本地线程发射任务,并处理环上上一个本地线程通过TCP链接推送的任务。
  3. 组间线程TCPIP性能测试,64组线程,每组64个本地线程,每一个本地线程通过TCPIP链接到下一个组中的同本地号的本地线程,实现组间组环,在环上每个线程向下一个组中的本地线程发射任务,并处理环上上一个组中本地线程通过TCP链接推送的任务。
  4. 对比组引用异数OS在双路128核EPYC 7551上实现的Socket组间TCPIP通讯数据。
测试项 负载大小 链接数 消息性能 IOPS(PPS) 双向带宽
本地回环 64 4096 1.37G 1.37G*4 4.2Tbps
本地线程环 64 4096 1.1G 1.1G*4 3.3Tbps
组间线程环 64 4096 246M 246M*4 750Gbps
EPYC 7551 64 4096 70M 70M*4 210Gbps

5年前的上一次,异数OS被EPYC的强大性能惊到了,5年后的今天异数OS再次被5年前的RX580惊到了,他的TCPIP性能是128核EPYC性能的3倍,价格却只有128核EPYC的百分之一,只是RX580无法独立使用NIC,这是他的遗憾,如果未来异数OS的CPU端能实现RX580的CPU端驱动的话,将有希望为RX580带来网络通讯能力。

独立Pipeline性能测试

  1. 使用异数OS大禹中间件实现一个Pipeline,他实现一个多层同步的卷积计算任务,每一层需要需要发射并在本地共享内存完成若干个卷积任务,在所有子任务完成后进入下一层,可以多个Pipeline并发执行,最终完成的Pipeline将通知CPU任务完成。
  2. 对比组使用OpenGL的glDispatchCompute实现CS同步任务调度完成,因为OpenGL的glDispatchCompute是依赖通用操作系统IO性能,并单线程阻塞,因此只能实现一个Pipeline的同步调度。
方案 Pipeline数量 负载 每Pipeline层数 每层子任务数 每秒完成层数(帧率) 每秒发射完成子任务数 每秒系统IO 算力带宽
异数OS-大禹 1 16X4X4卷积 64K 64 42万 26.7M 0 26.7G
异数OS-大禹 1 16X4X4卷积 64K 2048 35.5万 711M 0 711G
异数OS-大禹 1 16X4X4卷积 64K 32768 7.1万 2.2G 0 2.2T
异数OS-大禹 4 16X4X4卷积 64K 64 21万 106.7M 0 106.7G
异数OS-大禹 4 16X4X4卷积 64K 2048 15.4万 1.23G 0 1.23T
异数OS-大禹 8 16X4X4卷积 64K 64 19.1万 95.7M 0 95.7G
异数OS-大禹 8 16X4X4卷积 64K 2048 11.8万 1.85G 0 1.85T
异数OS-大禹 64 16X4X4卷积 64K 64 16.8万 673M 0 673G
异数OS-大禹 64 16X4X4卷积 64K 2048 1.3万 1.6G 0 1.6T
OpenGL 1 16X4X4卷积 64K 64 14285 914K 14285 914M
OpenGL 1 16X4X4卷积 64K 2048 2367 4.8M 2367 4.8G

可以看出同样是1个Pipeline,基于GPU的异数OS Pipeline调度性能是OpenGL的30倍以上,同时在细粒度任务中使用更多并行的Pipeline的可以有效提升GPU使用效率,RTX580的最大理论算力带宽是6T*4=24T,每层64子任务的单Pipeline,OpenGL算力带宽利用率仅0.0038%,而使用异数OS在GPU上独立完成Pipeline中,算力带宽利用率提升到了0.1%,在更多的Pipeline以及子任务规模下,最大算力利用率可以提升到9%。

你可能感兴趣的:(算法,chatgpt,操作系统,分布式)