Skip to content

Commit f9fb34d

Browse files
authored
save,load:优化 (#31)
* front/py deepxutil * save,load,loadtensordata,loadshape * save,load,仔细验证 * save,load,loadtensordata,loadshape * reduce:系列函数突然出问题,待解决 * reduce:系列函数的问题是由于dim从shape文件读取时,dim本身是错的。原因是reshape后,dim未修改。 现在已经擅长了dim这个成员,改为实时计算shape.size() * reduce:系列函数的问题是由于dim从shape文件读取时,dim本身是错的。原因是reshape后,dim未修改。 现在已经擅长了dim这个成员,改为实时计算shape.size()
1 parent c8b66e9 commit f9fb34d

File tree

95 files changed

+1644
-1172
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+1644
-1172
lines changed

doc/design.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# deepx默认原则
2+
3+
## 一.DeepxIR
4+
5+
### 1.deepIR结构
6+
```
7+
deepIR{
8+
Meta{
9+
int id
10+
string author
11+
} meta
12+
string name
13+
[]Param args
14+
[]Param returns
15+
}
16+
```
17+
18+
excuter执行deepxIR的规则
19+
20+
+ excuter执行deepxIR时,不得修改args中的tensor
21+
+ 但deepIR不限制args和returns中的Param同名,这样可以实现类似inplace的操作

doc/excuter/op-mem-cuda/list.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,43 @@
66

77
| Operation | Author | Func Def | Math Formula | IR Instruction |
88
|-----------|--------|------------|--------------|----------------|
9-
| vecset | none | vecset(vector<any> value)->(vector<any> name) | shape = [3 4 5] | vecset(vector<any> value)->(vector<any> name) |
10-
| argset | none | argset(var<any> value)->(var<any> name) | var argname = argvalue | argset(var<any> value)->(var<any> name) |
9+
| vecset | none | vecset(vector<any> value)->(vector<any> name) | [3 4 5]->shape | vecset(vector<any> value)->(vector<any> name) |
10+
| argset | none | argset(var<any> value)->(var<any> name) | argvalue->argname | argset(var<any> value)->(var<any> name) |
1111

1212
### tensorlife
1313

1414
| Operation | Author | Func Def | Math Formula | IR Instruction |
1515
|-----------|--------|------------|--------------|----------------|
16-
| renametensor | none | renametensor(tensor<any> t, var<string> new_name)->() | rename T1 to T2 | renametensor(tensor<any> t, var<string> new_name)->() |
16+
| renametensor | none | renametensor(var<string> new_name)->(tensor<any> t) | rename(newname)->T1 | renametensor(var<string> new_name)->(tensor<any> t) |
1717
| newtensor | none | newtensor(vector<int32> shape)->(tensor<any> tensor1) | T1 = zeros(shape) | newtensor(vector<int32> shape)->(tensor<any> tensor1) |
1818
| newtensor | none | newtensor(var<string> shape)->(tensor<any> tensor1) | T1 = zeros(shape) | newtensor(var<string> shape)->(tensor<any> tensor1) |
19-
| deltensor | none | deltensor(tensor<any> t)->() | del T1 | deltensor(tensor<any> t)->() |
20-
| copytensor | none | copytensor(tensor<any> src, tensor<any> dst)->() | T2.data = T1.data | copytensor(tensor<any> src, tensor<any> dst)->() |
19+
| deltensor | none | deltensor()->(tensor<any> t) | del->T1 | deltensor()->(tensor<any> t) |
20+
| copytensor | none | copytensor(tensor<any> src)->(tensor<any> dst) | T2.data = T1.data | copytensor(tensor<any> src)->(tensor<any> dst) |
2121

2222
### io
2323

2424
| Operation | Author | Func Def | Math Formula | IR Instruction |
2525
|-----------|--------|------------|--------------|----------------|
26+
| loadtensordata | none | loadtensordata(var<string> path)->(tensor<any> t) | loadtensordata(path)->tensor | loadtensordata(var<string> path)->(tensor<any> t) |
2627
| save | none | save(tensor<any> t, var<string> path)->() | save(T1,path) | save(tensor<any> t, var<string> path)->() |
2728
| print | miaobyte | print(tensor<any> t)->() | print(T1) | print(tensor<any> t)->() |
2829
| print | miaobyte | print(tensor<any> t, var<string> format)->() | print(T1) | print(tensor<any> t, var<string> format)->() |
2930
| load | none | load(var<string> path)->() | load(path) | load(var<string> path)->() |
3031

32+
### matmul
33+
34+
| Operation | Author | Func Def | Math Formula | IR Instruction |
35+
|-----------|--------|------------|--------------|----------------|
36+
| matmul | cublas | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1 @ T2 | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
37+
3138
### init
3239

3340
| Operation | Author | Func Def | Math Formula | IR Instruction |
3441
|-----------|--------|------------|--------------|----------------|
35-
| normal | miaobyte | normal(tensor<any> t, var<any> mean, var<any> stddev, var<int32> seed)->() | normal(T1,mean,stddev,seed) | normal(tensor<any> t, var<any> mean, var<any> stddev, var<int32> seed)->() |
36-
| uniform | miaobyte | uniform(tensor<any> t, var<any> low, var<any> high, var<int32> seed)->() | uniform(T1,low,high,seed) | uniform(tensor<any> t, var<any> low, var<any> high, var<int32> seed)->() |
37-
| arange | miaobyte | arange(tensor<any> t, var<any> start, var<any> step)->() | arange(T1,start,step) | arange(tensor<any> t, var<any> start, var<any> step)->() |
38-
| constant | miaobyte | constant(tensor<any> t, var<any> value)->() | constant(T1) | constant(tensor<any> t, var<any> value)->() |
42+
| normal | miaobyte | normal(var<any> mean, var<any> stddev, var<int32> seed)->(tensor<any> t) | normal(mean,stddev,seed)->T1 | normal(var<any> mean, var<any> stddev, var<int32> seed)->(tensor<any> t) |
43+
| uniform | miaobyte | uniform(var<any> low, var<any> high, var<int32> seed)->(tensor<any> t) | uniform(low,high,seed)->T1 | uniform(var<any> low, var<any> high, var<int32> seed)->(tensor<any> t) |
44+
| arange | miaobyte | arange(var<any> start, var<any> step)->(tensor<any> t) | arange(start,step)->T1 | arange(var<any> start, var<any> step)->(tensor<any> t) |
45+
| constant | miaobyte | constant(var<any> value)->(tensor<any> t) | constant(value)->T1 | constant(var<any> value)->(tensor<any> t) |
3946

4047
### elementwise
4148

@@ -64,20 +71,14 @@
6471
| sub | miaobyte | sub(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1-T2 | sub(tensor<any> A, tensor<any> B)->(tensor<any> C) |
6572
| sqrt | miaobyte | sqrt(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) | T3=sqrt(T1) | sqrt(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) |
6673
| subscalar | miaobyte | subscalar(tensor<any> A, var<any> b)->(tensor<any> C) | T3=T1-scalar | subscalar(tensor<any> A, var<any> b)->(tensor<any> C) |
74+
| exp | miaobyte | exp(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) | T3=exp(T1) | exp(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) |
75+
| mul | miaobyte | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1*T2 | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
6776
| equal | miaobyte | equal(tensor<any> A, tensor<any> B, var<float64> epsilon)->(tensor<bool> mask) | mask=compare(T1, T2) | equal(tensor<any> A, tensor<any> B, var<float64> epsilon)->(tensor<bool> mask) |
6877
| mulscalar | miaobyte | mulscalar(tensor<any> A, var<any> b)->(tensor<any> C) | T3=T1*scalar | mulscalar(tensor<any> A, var<any> b)->(tensor<any> C) |
6978
| div | miaobyte | div(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1/T2 | div(tensor<any> A, tensor<any> B)->(tensor<any> C) |
7079
| invert | miaobyte | invert(tensor<int64|int32|int16|int8> A)->(tensor<int64|int32|int16|int8> C) | T3=~T1 | invert(tensor<int64|int32|int16|int8> A)->(tensor<int64|int32|int16|int8> C) |
7180
| max | miaobyte | max(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=max(T1, T2) | max(tensor<any> A, tensor<any> B)->(tensor<any> C) |
7281
| pow | miaobyte | pow(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) | T3=pow(T1, T2) | pow(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) |
73-
| mul | miaobyte | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1*T2 | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
74-
| exp | miaobyte | exp(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) | T3=exp(T1) | exp(tensor<float64|float32|float16|bfloat16> A)->(tensor<float64|float32|float16|bfloat16> C) |
75-
76-
### matmul
77-
78-
| Operation | Author | Func Def | Math Formula | IR Instruction |
79-
|-----------|--------|------------|--------------|----------------|
80-
| matmul | cublas | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1 @ T2 | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
8182

8283
### reduce
8384

doc/excuter/op-mem-ompsimd/list.md

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,44 @@
66

77
| Operation | Author | Func Def | Math Formula | IR Instruction |
88
|-----------|--------|------------|--------------|----------------|
9-
| vecset | none | vecset(vector<any> value)->(vector<any> name) | shape = [3 4 5] | vecset(vector<any> value)->(vector<any> name) |
10-
| argset | none | argset(var<any> value)->(var<any> name) | var argname = argvalue | argset(var<any> value)->(var<any> name) |
9+
| vecset | none | vecset(vector<any> value)->(vector<any> name) | [3 4 5]->shape | vecset(vector<any> value)->(vector<any> name) |
10+
| argset | none | argset(var<any> value)->(var<any> name) | argvalue->argname | argset(var<any> value)->(var<any> name) |
1111

1212
### tensorlife
1313

1414
| Operation | Author | Func Def | Math Formula | IR Instruction |
1515
|-----------|--------|------------|--------------|----------------|
16-
| renametensor | none | renametensor(tensor<any> t, var<string> new_name)->() | rename T1 to T2 | renametensor(tensor<any> t, var<string> new_name)->() |
17-
| newtensor | none | newtensor(vector<int32> shape)->(tensor<any> tensor1) | T1 =Tensor(shape=[...]) | newtensor(vector<int32> shape)->(tensor<any> tensor1) |
16+
| renametensor | none | renametensor(var<string> new_name)->(tensor<any> t) | rename(newname)->T1 | renametensor(var<string> new_name)->(tensor<any> t) |
17+
| newtensor | none | newtensor(vector<int32> shape)->(tensor<any> t) | T1 =Tensor(shape=[...]) | newtensor(vector<int32> shape)->(tensor<any> t) |
1818
| newtensor | none | newtensor(var<string> shape)->(tensor<any> t) | T1 =Tensor(shape=[...]) | newtensor(var<string> shape)->(tensor<any> t) |
19-
| deltensor | none | deltensor(tensor<any> t)->() | del T1 | deltensor(tensor<any> t)->() |
20-
| copytensor | none | copytensor(tensor<any> src, tensor<any> dst)->() | T2.data = T1.data | copytensor(tensor<any> src, tensor<any> dst)->() |
19+
| deltensor | none | deltensor()->(tensor<any> t) | del->T1 | deltensor()->(tensor<any> t) |
20+
| copytensor | none | copytensor(tensor<any> src)->(tensor<any> dst) | T1.data->T2.data | copytensor(tensor<any> src)->(tensor<any> dst) |
2121

2222
### io
2323

2424
| Operation | Author | Func Def | Math Formula | IR Instruction |
2525
|-----------|--------|------------|--------------|----------------|
26+
| loadtensordata | none | loadtensordata(var<string> path)->(tensor<any> t) | loadtensordata(path)->tensor.data | loadtensordata(var<string> path)->(tensor<any> t) |
2627
| save | none | save(tensor<any> t, var<string> path)->() | save(T1,path) | save(tensor<any> t, var<string> path)->() |
2728
| print | miaobyte | print(tensor<any> t)->() | print(T1) | print(tensor<any> t)->() |
2829
| print | miaobyte | print(tensor<any> t, var<string> format)->() | print(T1) | print(tensor<any> t, var<string> format)->() |
2930
| load | none | load(var<string> path)->() | mem.load(path) | load(var<string> path)->() |
3031

32+
### matmul
33+
34+
| Operation | Author | Func Def | Math Formula | IR Instruction |
35+
|-----------|--------|------------|--------------|----------------|
36+
| matmul | cblas | matmul(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) | T3=T1 @ T2 | matmul(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) |
37+
| matmul | miaobyte | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1 @ T2 | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
38+
3139
### init
3240

3341
| Operation | Author | Func Def | Math Formula | IR Instruction |
3442
|-----------|--------|------------|--------------|----------------|
35-
| normal | miaobyte | normal(tensor<any> t, var<any> mean, var<any> std, var<int32> seed)->() | normal(T1,mean,stddev,seed) | normal(tensor<any> t, var<any> mean, var<any> std, var<int32> seed)->() |
36-
| uniform | miaobyte | uniform(tensor<any> t, var<any> low, var<any> high, var<int32> seed)->() | uniform(T1,low,high,seed) | uniform(tensor<any> t, var<any> low, var<any> high, var<int32> seed)->() |
37-
| arange | miaobyte | arange(tensor<any> t, var<any> start, var<any> step)->() | arange(T1,start,step) | arange(tensor<any> t, var<any> start, var<any> step)->() |
38-
| constant | miaobyte | constant(tensor<any> t, var<any> value)->() | constant(T1,value) | constant(tensor<any> t, var<any> value)->() |
43+
| normal | miaobyte | normal(var<any> mean, var<any> std, var<int32> seed)->(tensor<any> t) | normal(mean,stddev,seed)->T1 | normal(var<any> mean, var<any> std, var<int32> seed)->(tensor<any> t) |
44+
| uniform | miaobyte | uniform(var<any> low, var<any> high, var<int32> seed)->(tensor<any> t) | uniform(low,high,seed)->T1 | uniform(var<any> low, var<any> high, var<int32> seed)->(tensor<any> t) |
45+
| arange | miaobyte | arange(var<any> start, var<any> step)->(tensor<any> t) | arange(start,step)->T1 | arange(var<any> start, var<any> step)->(tensor<any> t) |
46+
| constant | miaobyte | constant(var<any> value)->(tensor<any> t) | constant(value)->T1 | constant(var<any> value)->(tensor<any> t) |
3947

4048
### elementwise
4149

@@ -61,21 +69,14 @@
6169
| sub | miaobyte | sub(tensor<any> a, tensor<any> b)->(tensor<any> c) | T3=T1-T2 | sub(tensor<any> a, tensor<any> b)->(tensor<any> c) |
6270
| sqrt | miaobyte | sqrt(tensor<any> A)->(tensor<any> C) | T3=sqrt(T1) | sqrt(tensor<any> A)->(tensor<any> C) |
6371
| subscalar | miaobyte | subscalar(tensor<any> a, var<any> scalar)->(tensor<any> c) | T3=T1-scalar | subscalar(tensor<any> a, var<any> scalar)->(tensor<any> c) |
72+
| exp | miaobyte | exp(tensor<any> A)->(tensor<any> C) | T3=exp(T1) | exp(tensor<any> A)->(tensor<any> C) |
73+
| mul | miaobyte | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1*T2 | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
6474
| equal | miaobyte | equal(tensor<any> A, tensor<any> B)->(tensor<bool> mask) | mask=equal(T1,T2) | equal(tensor<any> A, tensor<any> B)->(tensor<bool> mask) |
6575
| mulscalar | miaobyte | mulscalar(tensor<any> A, var<any> b)->(tensor<any> C) | T3=T1*scalar | mulscalar(tensor<any> A, var<any> b)->(tensor<any> C) |
6676
| div | miaobyte | div(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1/T2 | div(tensor<any> A, tensor<any> B)->(tensor<any> C) |
6777
| invert | miaobyte | invert(tensor<int64|int32|int16|int8> A)->(tensor<int64|int32|int16|int8> C) | T3=~T1 | invert(tensor<int64|int32|int16|int8> A)->(tensor<int64|int32|int16|int8> C) |
6878
| max | miaobyte | max(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=max(T1,T2) | max(tensor<any> A, tensor<any> B)->(tensor<any> C) |
6979
| pow | miaobyte | pow(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1^T2 | pow(tensor<any> A, tensor<any> B)->(tensor<any> C) |
70-
| mul | miaobyte | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1*T2 | mul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
71-
| exp | miaobyte | exp(tensor<any> A)->(tensor<any> C) | T3=exp(T1) | exp(tensor<any> A)->(tensor<any> C) |
72-
73-
### matmul
74-
75-
| Operation | Author | Func Def | Math Formula | IR Instruction |
76-
|-----------|--------|------------|--------------|----------------|
77-
| matmul | cblas | matmul(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) | T3=T1 @ T2 | matmul(tensor<float64|float32> A, tensor<float64|float32> B)->(tensor<float64|float32> C) |
78-
| matmul | miaobyte | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) | T3=T1 @ T2 | matmul(tensor<any> A, tensor<any> B)->(tensor<any> C) |
7980

8081
### reduce
8182

excuter/cpp-common/src/deepx/shape.cpp

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,19 @@
88
#include "deepx/dtype.hpp"
99
namespace deepx
1010
{
11-
1211
Shape::Shape(const int *shape, int dim)
1312
{
1413
setshape(shape, dim);
1514
}
15+
int Shape::dim() const{
16+
return shape.size();
17+
}
1618
int64_t Shape::bytes() const{
1719
return size * (precision_bits(dtype) / 8);
1820
}
1921
void Shape::setshape(const int *shape, int dim)
2022
{
2123
this->shape.resize(dim);
22-
this->dim = dim;
2324
std::copy(shape, shape + dim, this->shape.begin());
2425
strides.resize(dim);
2526
strides[dim - 1] = 1;
@@ -57,10 +58,10 @@ namespace deepx
5758
void Shape::print() const
5859
{
5960
std::cout << "shape:[";
60-
for (int i = 0; i < dim; ++i)
61+
for (int i = 0; i < dim(); ++i)
6162
{
6263
std::cout << shape[i];
63-
if (i < dim - 1)
64+
if (i < dim() - 1)
6465
std::cout << ", ";
6566
}
6667
std::cout << "]" << std::endl;
@@ -73,8 +74,8 @@ namespace deepx
7374
return idx;
7475
}
7576
std::vector<int> Shape::linearto(int idx_linear) const{
76-
std::vector<int> indices(dim,0);
77-
for(int i=0;i<dim;i++){
77+
std::vector<int> indices(dim(),0);
78+
for(int i=0;i<dim();i++){
7879
indices[i]=idx_linear/strides[i];
7980
idx_linear%=strides[i];
8081
}
@@ -84,7 +85,7 @@ namespace deepx
8485
std::string Shape::toYaml() const{
8586
YAML::Node node;
8687
node["dtype"] = precision_str(dtype);
87-
node["dim"] = dim;
88+
node["dim"] = dim();
8889
node["shape"] = shape;
8990
node["stride"] = strides;
9091
node["size"] = size;
@@ -93,9 +94,43 @@ namespace deepx
9394
void Shape::fromYaml(const std::string &yaml){
9495
YAML::Node node = YAML::Load(yaml);
9596
dtype = precision(node["dtype"].as<std::string>());
96-
dim = node["dim"].as<int>();
9797
shape = node["shape"].as<std::vector<int>>();
9898
strides=node["stride"].as<std::vector<int>>();
9999
size=node["size"].as<int>();
100+
101+
//check
102+
Shape checkedshape(shape);
103+
if(checkedshape.shape!=shape){
104+
throw std::runtime_error("Shape::fromYaml: shape mismatch");
105+
}
106+
if(checkedshape.strides!=strides){
107+
throw std::runtime_error("Shape::fromYaml: strides mismatch");
108+
}
109+
if(checkedshape.size!=size){
110+
throw std::runtime_error("Shape::fromYaml: size mismatch");
111+
}
100112
}
113+
114+
void Shape::saveShape( const std::string &tensorPath) const{
115+
std::string shapedata = toYaml();
116+
std::ofstream shape_fs(tensorPath + ".shape", std::ios::binary);
117+
shape_fs.write(shapedata.c_str(), shapedata.size());
118+
shape_fs.close();
119+
}
120+
121+
pair<std::string,Shape> Shape::loadShape(const std::string &path)
122+
{
123+
std::string shapepath = path + ".shape";
124+
std::ifstream shape_fs(shapepath, std::ios::binary);
125+
if (!shape_fs.is_open())
126+
{
127+
throw std::runtime_error("Failed to open shape file: " + shapepath);
128+
}
129+
std::string shapedata((std::istreambuf_iterator<char>(shape_fs)), std::istreambuf_iterator<char>());
130+
Shape shape;
131+
shape.fromYaml(shapedata);
132+
std::string filename = stdutil::filename(path);
133+
std::string tensor_name = filename.substr(0, filename.find_last_of('.'));
134+
return std::make_pair(tensor_name, shape);
135+
}
101136
}

0 commit comments

Comments
 (0)