Skip to content

Commit

Permalink
script level tests for relu & conv2d
Browse files Browse the repository at this point in the history
tests are failing atm
  • Loading branch information
corepointer committed Aug 2, 2024
1 parent 9c7ca98 commit a3050b0
Show file tree
Hide file tree
Showing 90 changed files with 1,614 additions and 35 deletions.
2 changes: 1 addition & 1 deletion UserConfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"use_mlir_codegen": false,
"vectorized_single_queue": false,
"debug_llvm": false,
"explain_kernels": true,
"explain_kernels": false,
"explain_llvm": false,
"explain_parsing": false,
"explain_parsing_simplified": false,
Expand Down
37 changes: 22 additions & 15 deletions scripts/examples/mnist_lenet-train.daph
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,16 @@ import "nn/networks/lenet-train.daph" as "lenet";
#fmt = ifdef($fmt, "csv")
#train = read($train, format=fmt)
#test = read($test, format=fmt)
#train_X = readMatrix("./data/mnist20_features.csv");
#train_Y = readMatrix("./data/mnist20_labels.csv");
train_X = readMatrix("./data/mnist20_features.csv");
train_Y = readMatrix("./data/mnist20_labels.csv");
#test_X = readMatrix("./data/mnist20_features.csv");
#test_Y = readMatrix("./data/mnist20_labels.csv");
#C = $C
#Hin = $Hin
#Win = $Win

train_X = readMatrix("./data/mnist/mnist_features.csv");
train_Y = readMatrix("./data/mnist/mnist_labels.csv");
#train_X = readMatrix("./data/mnist/mnist_features.csv");
#train_Y = readMatrix("./data/mnist/mnist_labels.csv");
#test_X = readMatrix("./data/mnist/mnist_features.csv");
#test_Y = readMatrix("./data/mnist/mnist_labels.csv");

Expand All @@ -103,10 +103,14 @@ out_dir = ".";
#X_test = test[,1:ncol(test)];
#Y_test = test[,1];

images = train_X[0:5000,];
labels = train_Y[0:5000,];
X_test = train_X[5001:6000,];
Y_test = train_Y[5001:6000,];
#images = train_X[0:5000,];
#labels = train_Y[0:5000,];
#X_test = train_X[5001:6000,];
#Y_test = train_Y[5001:6000,];
images = train_X[0:15,];
labels = train_Y[0:15,];
X_test = train_X[16:20,];
Y_test = train_Y[16:20,];

# Scale images to [-1,1], and one-hot encode the labels
n = nrow(images);
Expand All @@ -124,18 +128,21 @@ X_test = (X_test / 255.0) * 2 - 1;
#Y = labels[5001:nrow(images),];
#Y_val = labels[1:5000,];
#X = images[1001:nrow(images) - 3000,];
X = images[1001:nrow(images) - 3000,];
X_val = images[0:1000,];
Y = labels[11:nrow(images),];
Y_val = labels[0:1000,];

#X = images[1001:nrow(images) - 3000,];
#X_val = images[0:1000,];
#Y = labels[11:nrow(images),];
#Y_val = labels[0:1000,];
X = images[0:nrow(images) - 3,];
X_val = images[nrow(images) - 3:nrow(images),];
Y = labels[0:nrow(images)-3,];
Y_val = labels[nrow(images) - 3:nrow(images),];


# Train
W1, b1 = lenet.train(X, Y, X_val, Y_val, C, Hin, Win, epochs);

#print(sum(as.matrix<f64>(W1)));
#print(sum(b1));
print(sum(as.matrix<f64>(W1)));
print(sum(b1));
# Write model out
#mat_W1 = as.matrix<f64>(W1);
write(W1, out_dir + "/W1.csv");
Expand Down
File renamed without changes.
13 changes: 8 additions & 5 deletions test/api/cli/nn/NNOperationsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,27 @@ const std::string expected_output = "diff: 0\n";
* 3...kernel forward
* 4...kernel backward
*/

// const std::string expected_result = std::string("expected=\"") + dirPath + base_name + std::string(".csv\"");
// const std::string args = "input=\"test/data/mnist20/mnist20_features.csv\",eps=1e-9f," + expected_result;
#define MAKE_TEST_CASE(name, count) \
TEST_CASE(name, TAG_DNN) { \
for(unsigned i = 1; i <= count; i++) { \
DYNAMIC_SECTION(name "_" << i << ".daph") { \
const std::string base_name = name + std::string("_") + std::to_string(i); \
const std::string script_name = base_name + std::string(".daph"); \
const std::string expected_result = std::string("expected=\"") + dirPath + base_name + std::string(".csv\""); \
const std::string args = "input=\"test/data/mnist20/mnist20_features.csv\",eps=1e-9f," + expected_result; \
compareDaphneToStr(expected_output, dirPath + script_name, "--config", "UserConfig.json", "--args", args.c_str()); \
compareDaphneToStr(expected_output, dirPath + script_name, "--config", "test/api/cli/nn/UserConfig.json"); \
} \
} \
}

MAKE_TEST_CASE("activation_relu_dsl", 1)
MAKE_TEST_CASE("activation_relu_dsl", 2)
MAKE_TEST_CASE("conv2d_dsl", 2)
MAKE_TEST_CASE("conv2d_kernel", 2)

/*
MAKE_TEST_CASE("affine_dsl", 1)
MAKE_TEST_CASE("batchnorm2d_dsl", 1)
MAKE_TEST_CASE("conv2d_dsl", 1)
MAKE_TEST_CASE("dropout_dsl", 1)
MAKE_TEST_CASE("loss_dsl", 1)
MAKE_TEST_CASE("pooling", 1)
Expand Down
81 changes: 81 additions & 0 deletions test/api/cli/nn/UserConfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"matmul_vec_size_bits": 0,
"matmul_tile": false,
"matmul_use_fixed_tile_sizes": true,
"matmul_fixed_tile_sizes": [4, 4, 4, 4, 4],
"matmul_unroll_factor": 1,
"matmul_unroll_jam_factor": 4,
"matmul_num_vec_registers": 16,
"use_cuda": false,
"use_vectorized_exec": false,
"use_obj_ref_mgnt": true,
"cuda_fuse_any": false,
"use_mlir_codegen": false,
"vectorized_single_queue": false,
"debug_llvm": false,
"explain_kernels": false,
"explain_llvm": false,
"explain_parsing": false,
"explain_parsing_simplified": false,
"explain_property_inference": false,
"explain_sql": false,
"explain_select_matrix_repr": false,
"explain_type_adaptation": false,
"explain_vectorized": false,
"explain_obj_ref_mgnt": false,
"explain_mlir_codegen": false,
"taskPartitioningScheme": "STATIC",
"numberOfThreads": -1,
"minimumTaskSize": 1,
"libdir": "{exedir}/../lib",
"daphnedsl_import_paths": {
"default_dirs": ["scripts/algorithms", "scripts"]
},
"force_cuda": true,
"logging": [
{ "log-level-limit": "WARN" },
{
"comment": "This configuration controls logging in the GPU compiler pass only",
"name": "compiler::cuda",
"level": "INFO",
"filename": "compiler-trace-cuda.txt",
"format": "%^[%L %n]:%$ %v"
},
{
"comment": "general runtime CUDA debug log",
"name": "runtime::cuda",
"level": "DEBUG",
"filename": "compiler-debug-cuda.txt",
"format": "%^[%L %n]:%$ %v"
},
{
"comment": "DAPHNE runtime logs",
"name": "runtime",
"level": "DEBUG",
"filename": "",
"format": "%^[%n %L]:%$ %v"
},
{
"comment": "DAPHNE compiler logs",
"name": "compiler",
"level": "INFO",
"filename": "",
"format": "%^[%n %L]:%$ %v"
},
{
"comment": "DAPHNE default",
"name": "default",
"level": "DEBUG",
"filename": "",
"format": "%^[%n %L]:%$ %v"
},
{
"comment": "DAPHNE default",
"name": "parser",
"level": "DEBUG",
"filename": "",
"format": "%^[%n %L]:%$ %v"
}
],
"sparsity_threshold": 0.25
}
19 changes: 5 additions & 14 deletions test/api/cli/nn/activation_relu_dsl_1.daph
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
def compare_matrices(A:matrix, B:matrix, eps) -> si64 {

#diff = A - B;
#print(diff);
diff1 = sum(abs(A - B) > eps);
return diff1;
}

import "nn/layers/relu_dsl.daph" as "relu";
import "./test_utils.daph" as "util";

input = readMatrix($input);

expected = readMatrix($expected);
X = readMatrix("test/data/nn_validation/X.csv");
expected = readMatrix("test/data/nn_validation/outR.csv");

result = relu.forward(input);
#writeMatrix(result, "relu_fwd.csv");
diff = compare_matrices(result, expected, $eps);
result = relu.forward(X);

diff = util.compare_matrices(result, expected);
print("diff: ", 0); print(diff);
#print(result);
14 changes: 14 additions & 0 deletions test/api/cli/nn/activation_relu_dsl_2.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

import "nn/layers/relu_dsl.daph" as "relu";
import "./test_utils.daph" as "util";

eps=1e-9f;

X = readMatrix("test/data/nn_validation/X.csv");
outR = readMatrix("test/data/nn_validation/outR.csv");
expected = readMatrix("test/data/nn_validation/doutR.csv");

result = relu.backward(outR, X);

diff = util.compare_matrices(result, expected);
print("diff: ", 0); print(diff);
33 changes: 33 additions & 0 deletions test/api/cli/nn/conv2d_dsl_1.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

import "nn/layers/conv2d_dsl.daph" as "conv2d";
import "./test_utils.daph" as "util";

# number of "images"
N=13;

#image size
Hin=13;
Win=13;
F=7;
C=3;
Hf=5;
Wf=5;
stride = 1;
pad = 2;

X = readMatrix("test/data/nn_validation/X.csv");
W = readMatrix("test/data/nn_validation/WC.csv");
b = readMatrix("test/data/nn_validation/bC.csv");
expected = readMatrix("test/data/nn_validation/outC.csv");

Hexp = sqrt(ncol(expected) / F);
result, Hout, Wout = conv2d.forward(X, W, b, C, Hin, Win, Hf, Wf, stride, stride, pad, pad);

if(Hexp != Hout) {
//print("ncol exp / F: ",0);print(ncol(expected) / F);
print("Hexp: ",0); print(Hexp,0);
print("Hout: ",0); print(Hout,0);
}

diff = util.compare_matrices(result, expected);
print("diff: ", 0); print(diff);
32 changes: 32 additions & 0 deletions test/api/cli/nn/conv2d_dsl_2.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

import "nn/layers/conv2d_dsl.daph" as "conv2d";
import "./test_utils.daph" as "util";

# number of "images"
N=13;

#image size
Hin=13;
Win=13;
F=7;
C=3;
Hf=5;
Wf=5;
stride = 1;
pad = 2;

X = readMatrix("test/data/nn_validation/X.csv");
W = readMatrix("test/data/nn_validation/WC.csv");
b = readMatrix("test/data/nn_validation/bC.csv");
outC = readMatrix("test/data/nn_validation/outC.csv");
Hout = sqrt(ncol(outC) / F);
Wout = Hout;

exp_dX = readMatrix("test/data/nn_validation/doutC.csv");
exp_dW = readMatrix("test/data/nn_validation/dWC.csv");
exp_db = readMatrix("test/data/nn_validation/dbC.csv");

dX, dW, dB = conv2d.backward(outC, Hout, Wout, X, W, b, C, Hin, Win, Hf, Wf, stride, stride, pad, pad);

diff = util.compare_matrices(dX, exp_dX) + util.compare_matrices(W, exp_dW) + util.compare_matrices(b, exp_db);
print("diff: ", 0); print(diff);
32 changes: 32 additions & 0 deletions test/api/cli/nn/conv2d_kernel_1.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

import "nn/layers/conv2d_kernel.daph" as "conv2d";
import "./test_utils.daph" as "util";

# number of "images"
N=13;

#image size
Hin=13;
Win=13;
F=7;
C=3;
Hf=5;
Wf=5;
stride = 1;
pad = 2;

X = readMatrix("test/data/nn_validation/X.csv");
W = readMatrix("test/data/nn_validation/WC.csv");
b = readMatrix("test/data/nn_validation/bC.csv");
expected = readMatrix("test/data/nn_validation/outC.csv");

Hexp = sqrt(ncol(expected) / F);
result, Hout, Wout = conv2d.forward(X, W, b, C, Hin, Win, Hf, Wf, stride, stride, pad, pad);

if(Hexp != Hout) {
print("Hexp: ",0); print(Hexp,0);
print("Hout: ",0); print(Hout,0);
}

diff = util.compare_matrices(result, expected);
print("diff: ", 0); print(diff);
32 changes: 32 additions & 0 deletions test/api/cli/nn/conv2d_kernel_2.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

import "nn/layers/conv2d_kernel.daph" as "conv2d";
import "./test_utils.daph" as "util";

# number of "images"
N=13;

#image size
Hin=13;
Win=13;
F=7;
C=3;
Hf=5;
Wf=5;
stride = 1;
pad = 2;

X = readMatrix("test/data/nn_validation/X.csv");
W = readMatrix("test/data/nn_validation/WC.csv");
b = readMatrix("test/data/nn_validation/bC.csv");
outC = readMatrix("test/data/nn_validation/outC.csv");
Hout = sqrt(ncol(outC) / F);
Wout = Hout;

exp_dX = readMatrix("test/data/nn_validation/doutC.csv");
exp_dW = readMatrix("test/data/nn_validation/dWC.csv");
exp_db = readMatrix("test/data/nn_validation/dbC.csv");

dX, dW, dB = conv2d.backward(outC, Hout, Wout, X, W, b, C, Hin, Win, Hf, Wf, stride, stride, pad, pad);

diff = util.compare_matrices(dX, exp_dX) + util.compare_matrices(W, exp_dW) + util.compare_matrices(b, exp_db);
print("diff: ", 0); print(diff);
8 changes: 8 additions & 0 deletions test/api/cli/nn/test_utils.daph
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

def compare_matrices(A:matrix, B:matrix) -> si64 {
eps = 1e-9f;
diff1 = abs(A - B);
diff2 = diff1 > eps;
#print(diff1);
return sum(diff2);
}
Loading

0 comments on commit a3050b0

Please sign in to comment.