Skip to content

Commit dd7736c

Browse files
authored
py: (#89)
* py: 1.deepxutil 模型转换 doc: 优化deepx介绍 * py: 1.deepxutil safetensor模型转换完成
1 parent 63c9581 commit dd7736c

File tree

7 files changed

+36
-26
lines changed

7 files changed

+36
-26
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
# deepx
22

3-
deepx提出了一种以IR计算图为核心的原生分布式自动并行的训推一体化的深度学习框架,以IR计算图为核心,经过多层级等价替换,实现从简单的数学形式的计算图,自适应等价替换为分布式、并行、自动反向的工程系统架构。
4-
53
## 一.deepx概述
4+
deepx一种以IR计算图为核心的原生分布式自动并行的训推一体化的深度学习框架,以IR计算图为核心,经过多层级等价替换,实现从简单的数学形式的计算图,自适应等价替换为分布式、并行、自动反向的工程系统架构。
65

7-
deepx的分为前端表达侧,编译替换层,执行器层
6+
deepx的分前中后端,分别是为前端表达侧,编译替换层,执行器层,遵守严格的进程间与代码组件的隔离,以保证分工明确,架构长久稳定。
87

9-
+ 前端表达侧,交由算法工程师、用接近数学的表达方式,设计其数学计算过程。只表示为单线程的简洁数学表达过程,不涉及复杂的device类型、分布式等。
10-
+ 编译替换层:注册了多轮不同类型的IR编译器,实现等价替换,可以以插件的形式增加自定义能力如定制kvcache,实现对计算图进行局部替换,获得新的能力。
11-
+ 执行器层:实现真正的tensor运算,大规模并行化。
8+
+ 前端/模型表达侧,交由算法工程师、用接近数学的表达方式,设计其数学计算过程。只表示为单线程的简洁数学表达过程,不涉及复杂的device类型、分布式等。
9+
+ 中端:编译替换与分布式调度层:注册了多轮不同类型的IR编译器,实现等价替换,可以以插件的形式增加自定义能力如定制kvcache,实现对计算图进行局部替换,获得新的能力。
10+
+ 执行器层:绑定具体的加速硬件,实现真正的tensor的储存、计算、网络通信,大规模并行化。
1211

1312

1413
### 前端
@@ -26,13 +25,14 @@ python sdk提供接近pytorch的API
2625
| 组件耦合度 | 紧耦合(Python绑定C++)| 松耦合|
2726
| tensor生命周期管理 | 由python侧控制 | 由deltensor这个IR指令,显示管理tensor|
2827

29-
### 编译替换层
28+
### 中端:编译替换与分布式调度层
3029

3130
+ 注册中心:收集当前已就绪的执行器的算子列表,收集算子时耗和空间占用信息
3231
+ 计算图编译器优化器:fusion算子,计算图节点消除,自动生成tensor拆分并行的计算子图并替代原节点
3332
+ 执行调度器:数据并行,流水线并行(前向反向并行),模型并行。
3433
+ front生成基础IR,编译器负责进行fusion成excuter注册的高级算子。
3534

35+
3636
### 执行层
3737

3838
执行层包括op和mem两种执行器,但实际实现时,当前只设计了一个程序同时负责op和mem的管理。

doc/language.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ excuter所执行的内容,就是deepxir的序列或deepxir计算图
3737

3838
https://github.com/array2d/deepx/blob/main/doc/excuter/op-mem-cuda/list.md
3939

40-
deepxir分为3类
40+
deepxir分为4类
4141

4242
计算:tensor这些系列elementwise、changeshape、tensorlife、io、reduce、init
43+
4344
指令结构:
4445
queue[deepxIR],串行指令,有前后执行顺序
4546
parallel[deepxIR],可并行的指令,无顺序依赖,可并行

front/py/deepxutil/numpy/io.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from deepx.tensor import Shape
22
from numpy import ascontiguousarray,ndarray
33

4-
def save_numpy(t,tensorpath:str):
4+
def save_numpy(t,tensorpath:str,realdtype:str=None):
55
r'''
66
保存numpy.ndarray为deepx.tensor格式
77
t:numpy.ndarray
@@ -11,6 +11,8 @@ def save_numpy(t,tensorpath:str):
1111
assert isinstance(t,ndarray)
1212
shape=Shape(t.shape)
1313
shape._dtype=str(t.dtype)
14+
if realdtype is not None:
15+
shape._realdtype=realdtype
1416
shape.save(tensorpath+".shape")
1517

1618
array = ascontiguousarray(t)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class TensorInfo:
2+
def __init__(self, dtype, ndim, shape, size, strides=None):
3+
self.dtype = dtype # 数据精度类型,如"float32"
4+
self.ndim = ndim # 维度数
5+
self.shape = shape # 形状元组
6+
self.size = size # 总元素数量
7+
self.strides = strides # 步长数组(可选)
8+
9+
10+
class Tensor:
11+
def __init__(self, data, tensorinfo: TensorInfo):
12+
assert isinstance(tensorinfo, TensorInfo),"tensorinfo必须是TensorInfo实例"
13+
self.data = data
14+
self.tensorinfo = tensorinfo

front/py/deepxutil/safetensors/todeepx.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,6 @@
66
import glob
77
import re
88

9-
class TensorInfo:
10-
def __init__(self, dtype, ndim, shape, size, strides=None):
11-
self.dtype = dtype # 数据精度类型,如"float32"
12-
self.ndim = ndim # 维度数
13-
self.shape = shape # 形状元组
14-
self.size = size # 总元素数量
15-
self.strides = strides # 步长数组(可选)
16-
17-
18-
class Tensor:
19-
def __init__(self, data, tensorinfo: TensorInfo):
20-
assert isinstance(tensorinfo, TensorInfo),"tensorinfo必须是TensorInfo实例"
21-
self.data = data
22-
self.tensorinfo = tensorinfo
239

2410
class SafeTensorExporter:
2511
def __init__(self, model_dir, output_dir):

front/py/deepxutil/torch/io.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1+
import torch
12
from torch import Tensor as torch_Tensor
23

34
def save_torch(t,path:str):
45
r'''
56
保存torch.Tensor为deepx.tensor格式
67
'''
78
assert isinstance(t,torch_Tensor)
8-
t=t.detach().cpu().numpy()
9+
t=t.detach().cpu().contiguous()
10+
realdtype=t.dtype
11+
if t.dtype is torch.bfloat16:
12+
t=t.view(torch.uint16)
13+
elif t.dtype is torch.float8_e4m3fn:
14+
t=t.view(torch.uint8)
15+
t = t.numpy()
916
from deepxutil.numpy.io import save_numpy
10-
save_numpy(t,path)
17+
save_numpy(t,path,str(realdtype)[6:])
1118

scheduler/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# scheduler
22

3-
执行调度器
3+
计算图替换与调度器
44

55
执行调度器作为deepx的训推的执行计算图,负责执行计算图的分布式调度
66

0 commit comments

Comments
 (0)