Skip to content
/ deepx Public
forked from array2d/deepx

Large-scale Auto-Distributed Training/Inference Unified Framework | Memory-Compute-Control Decoupled Architecture | Multi-language SDK & Heterogeneous Hardware Support

License

Notifications You must be signed in to change notification settings

miaobyte/deepx

 
 

Repository files navigation

deepx

一.deepx概述

deepx一种以统一存算面为底座的深度学习计算框架,模型函数可以通过简单的数学形式进行表达为计算图,计算图可以写入到统一存算面的存储空间,被统一存算面的调度执行器自动执行,你也可以按照统一存算面的协议,实现自己的执行器,例如dataloader的数据处理执行器是训练用户必须自己实现的。

二.前端与统一存算面

deepx可以划分为前端与统一存算面(中端与后端),分别是为

  • 前端
    • 模型表达api
    • 统一存算面sdk
  • 统一存算面 中端:编译替换调度层。对数学表达式进行等价编译替换,以匹配最优的后端kernel。 后端:执行器层:遵守严格的进程间与代码组件的隔离,以保证分工明确,架构长久稳定。

前端-模型表达侧

面向算法工程师、用接近数学的表达方式,设计其数学计算过程。只表示为单线程的简洁数学表达过程。不容许涉及复杂的device类型、分布式概念等。 tensor相关的函数表达式,和pytorch/numpy的api风格接近 deepx前端会输出计算图的IR序列,传递给统一存算面

前端-统一存算面sdk

面向算法和infra工程师,可以通过deepx存算协议标准,实现自己的调度器、执行器。 dataloader程序负责向存算面注册新的input tensor序列,因此依赖deepx sdk

统一存算面:通过统一的kv寻址空间,组织分散的gpu算力与tensor。

统一存算面可以被看作一个原生的分布式tensor计算解释器。 统一存算面把分布式的gpu集群,抽象为统一的计算与存储平面,具体而言,就是存储了tensor元信息、计算图。但存算面本身,目前只利用了redis的kv功能。tensor的真正存储依然在gpu显存、内存、磁盘上,真正的计算,也是由执行器进程通过gpu/cpu去进行计算。但统一存算面的作用在于,抽象了tensor相关的计算图与存储表示,为tensor编程,开辟了新的上层表达语言,从而可以完全和复杂的底层工程代码隔离。

  • 统一寻址空间

    • 当前采用redis存储tensor元信息,配合heapmem进程,负责管理堆tensor的生命周期。
  • 调度层:编译替换与分布式调度层:注册了多轮不同类型的IR编译器,实现等价替换,可以以插件的形式增加自定义能力如定制kvcache,实现对计算图进行局部替换,获得新的能力。

    • 算子注册: 收集当前已就绪的执行器的算子列表,收集算子时耗和存储占用信息。计算图编译器优化器:fusion算子,计算图节点消除,自动生成tensor拆分并行的计算子图并替代原节点
    • 反向传播推导引擎:深度学习模型,如pytorch框架,通常只需要定义模型前向过程,反向的计算图是通过pytorch自动实现的。deepx同理。
    • 执行调度器:负责数据并行,流水线并行(前向反向并行),模型并行
  • 执行器层:绑定具体的加速硬件,实现真正的tensor的储存、计算、网络通信,大规模并行化。

    • heapmem-cuda:实现了nv平台的tensor生命周期管理,是统一寻址空间中的tensor的具体实现。 当我们在统一寻址空间删除一个key对应的tensor,实际的tensor会通过heapmem-cuda进程进行删除,创建同理。 heapmem管理的tensor,通常是持久的权重,可能被很多个不同进程访问,。 相对应的,随着函数执行完毕自动回收的中间变量tensor,可以被称之为stacktensor,这些tensor交给op进程自行管理。
    • op-cuda:实现了nv平台的常用基础算子。cuda

三.deepx T程序与cpu程序

为了把gpu上的tensor计算过程,区别于传统cpu上的程序,我们为tensor的分布式计算,定义一个新概念————T程序

概念比较

cpu程序 T程序
数据区、代码区 kv存储管理
上层程序设:func和struct deepxIR和tensor
cpu执行底层机器码/字节码 deepx执行器执行deepxIR
存储-堆 kv存储tensor元信息,heapmem管理gpu、内存上的tensordata
线程栈 计算进程自行管理

官方文档

https://deepx.array2d.com

商业支持:lipeng@mirrorsoft.cn

开源协议

本项目采用Apache License 2.0协议

  • 允许商用和修改分发
  • 需保留版权声明
  • 修改文件需在头注释说明变更
  • 不提供任何明示担保

完整协议见:LICENSE

About

Large-scale Auto-Distributed Training/Inference Unified Framework | Memory-Compute-Control Decoupled Architecture | Multi-language SDK & Heterogeneous Hardware Support

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 63.7%
  • Python 17.2%
  • Cuda 14.5%
  • Go 3.2%
  • CMake 1.0%
  • Metal 0.2%
  • Other 0.2%