From 70cbd45ae717198ae9fca829e34e091970f43299 Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Wed, 5 Jun 2024 21:04:09 -0300 Subject: [PATCH] fix memory usage --- build/cuda.cu.o | Bin 220624 -> 220624 bytes build/tensor.o | Bin 48712 -> 48896 bytes norch/__pycache__/tensor.cpython-38.pyc | Bin 20982 -> 21251 bytes norch/csrc/tensor.cpp | 62 ++++++++-------- norch/csrc/tensor.h | 2 + norch/libtensor.so | Bin 397264 -> 397336 bytes norch/tensor.py | 23 +++++- train_singlegpu.py | 95 ++++++++++++++++++++++++ 8 files changed, 148 insertions(+), 34 deletions(-) create mode 100644 train_singlegpu.py diff --git a/build/cuda.cu.o b/build/cuda.cu.o index 21f4bd171ff68a8ace583f98a279203f8124ba21..b698d9494cfb68f798a31d9df4c47fa4895b196b 100644 GIT binary patch delta 23 fcmcbxoA<(Q-i8*&ElhtdvKXbAC2zaLbfFsngl-Dc delta 23 fcmcbxoA<(Q-i8*&ElhtdvKXc$n{B(qbfFsngn|mt diff --git a/build/tensor.o b/build/tensor.o index d3962d93c4303a2a34caaf30903a53755186a69e..53855b438a9dcb5cf9555285ec4710c997c47ed9 100644 GIT binary patch literal 48896 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 literal 48712 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 Z?cGng@f%GQUfWl0cemhkcr14O|1X;%6!ZW9 diff --git a/norch/__pycache__/tensor.cpython-38.pyc b/norch/__pycache__/tensor.cpython-38.pyc index c7cc0449c24824929c0ab1ffb039c3f3f20a4113..c48a006205be2a2f37379cb370196b0c789b1d8f 100644 GIT binary patch delta 601 zcmZ9HUr1AN6vyxPw`Kc#wKZ$XhFPt}q!~JvDT)iynx&|VLX6vRv)aVPyp#_ng+2K+ zcZN`iZU|8jtT-gJm(f#EK|vJsA`$cuJxCArqC$6K5uJx~IG^vA^XJzxX6{2iXSJFn zE$*&g8eLm>A{Pyg>yRW>nv$ZJ5vlBy6h~A_7*kpLYzR}Q(JPOyYS2`MX{1sbKHhFs z3{gql5wD0_6=S*PtYuFgkW`V=sro!FV@sF+I^}JrOv2ct4L*iSnlwi1hRo5}SWJy6 z(TExuvTQdKS0dM950Uax-nKiqQ&BXoD1+MR6aMl8!Y*tuLH;LK2@C#be{|YodWK1Q zXUbrjN6bCIZ7x{afD9EZb;~AMV1><9-M}&r?n(e}xMZ6JzEj8^#wT8~*8*!?tkw&x zQ)zDoH8kM30Vlt5B!PY0T6(QWI->EJQ6K}@~&!{^_@o>eesQ;gS#3(=n!OQa}l^j zy#Y6G`1^q@_Xg$#9`M(eMc_T(Y26fJL(oN!la|`w;u|MBrh#TkhZ?x1b3vesS571a zQhexSL12+Tc8>wCxAgJT^}s5pLl=M_8acq0Gew9BJ-_7`^AaLi5f$Q#aeq9O7k_ifxg(N>E0S;UCkC9(=e;%X0oqmyi!Dh*1wh zX!{^RVnkvPC=nk$G>bwX^16p3mM z8ztsG%ZgqZvaAbs$@S8mW^${=(BPsS-cOp!rt>AP@@Hon!!laX3XIAty#c(WSIiwK zB+QGqs2NC0Z}A|oBx@y;zy@FPbYoQ(JO_a<@~$+G@PpU9X*k$2ZonxYjW|#!&1FG? zk0;9Cpqx+n#u1W5U%yIW@O0xLIbIn6&PbnWAG#xB{=Y=?dy~6I4Im?rs&c@09`o1B zdd)wg9C-cM0*>(Qz%Z)$XW%kwZT85u;9C_zsjABYaqbEECBMECNJ&rV0bxddoz4Ku za=#%**y5?iZG4hs(=DKqBP}&@IQ)=sQdZ8!34L)H*{0B*ml0*Oi diff --git a/norch/csrc/tensor.cpp b/norch/csrc/tensor.cpp index 9443a6f..1b9ed56 100644 --- a/norch/csrc/tensor.cpp +++ b/norch/csrc/tensor.cpp @@ -49,37 +49,30 @@ extern "C" { void delete_tensor(Tensor* tensor) { if (tensor != NULL) { - - if (tensor->shape != NULL) { - free(tensor->shape); - tensor->shape = NULL; - } - - if (tensor->data != NULL) { - if (strcmp(tensor->device, "cpu") == 0) { - free(tensor->data); - } else { - free_cuda(tensor->data); - } - tensor->data = NULL; - } - - if (tensor->device != NULL) { - free(tensor->device); - tensor->device = NULL; - } - - if (tensor->strides != NULL) { - free(tensor->strides); - tensor->strides = NULL; - } - free(tensor); + tensor = NULL; + } + } + + void delete_shape(Tensor* tensor) { + if (tensor->shape != NULL) { + free(tensor->shape); + tensor->shape = NULL; + } + } + + void delete_data(Tensor* tensor) { + if (tensor->data != NULL) { + if (strcmp(tensor->device, "cpu") == 0) { + free(tensor->data); + } else { + free_cuda(tensor->data); + } + tensor->data = NULL; } } void delete_strides(Tensor* tensor) { - // as strides always are allocated within C code, it must be handled separatedly if (tensor->strides != NULL) { free(tensor->strides); tensor->strides = NULL; @@ -87,7 +80,6 @@ extern "C" { } void delete_device(Tensor* tensor) { - // as device always are allocated within C code, it must be handled separatedly if (tensor->device != NULL) { free(tensor->device); tensor->device = NULL; @@ -114,20 +106,28 @@ extern "C" { int device_id = 0; char* endptr; + char* target_device_type; + long num = strtol(target_device, &endptr, 10); if (*endptr == '\0') { device_id = (int)num; - target_device = new char[strlen("cuda") + 1]; - strcpy(target_device, "cuda"); + target_device_type = new char[strlen("cuda") + 1]; + strcpy(target_device_type, "cuda"); + } + else { + target_device_type = new char[strlen("cuda") + 1]; + strcpy(target_device_type, "cpu"); } - if ((strcmp(target_device, "cuda") == 0) && (strcmp(tensor->device, "cpu") == 0)) { + if ((strcmp(target_device_type, "cuda") == 0) && (strcmp(tensor->device, "cpu") == 0)) { cpu_to_cuda(tensor, device_id); } - else if ((strcmp(target_device, "cpu") == 0) && (strcmp(tensor->device, "cuda") == 0)) { + else if ((strcmp(target_device_type, "cpu") == 0) && (strcmp(tensor->device, "cuda") == 0)) { cuda_to_cpu(tensor); } + + free(target_device_type); } Tensor* add_tensor(Tensor* tensor1, Tensor* tensor2) { diff --git a/norch/csrc/tensor.h b/norch/csrc/tensor.h index 6793e10..bb07c2a 100644 --- a/norch/csrc/tensor.h +++ b/norch/csrc/tensor.h @@ -14,6 +14,8 @@ extern "C" { Tensor* create_tensor(float* data, int* shape, int ndim, char* device); void delete_tensor(Tensor* tensor); void delete_strides(Tensor* tensor); + void delete_shape(Tensor* tensor); + void delete_strides(Tensor* tensor); void delete_device(Tensor* tensor); float get_item(Tensor* tensor, int* indices); Tensor* add_tensor(Tensor* tensor1, Tensor* tensor2); diff --git a/norch/libtensor.so b/norch/libtensor.so index 598e06434b5547919eaa721569fca6dc5a12329c..da03d6efef98bbaf5e41a3c9070f692ab940285a 100755 GIT binary patch delta 67526 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

Bm+~dr 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 0: + print(f"Epoch: {epoch}/{epochs} - Step: {idx} / {len(train_loader)}") + break + + inputs, target = batch + + inputs = inputs.to(device) + target = target.to(device) + + outputs = model(inputs) + loss = criterion(outputs, target) + + optimizer.zero_grad() + + loss.backward() + + optimizer.step() + + avg_loss += loss[0] + num_steps += 1 + + break + avg_loss = avg_loss / num_steps + print(f'Epoch [{epoch + 1}/{epochs}], Loss: {avg_loss:.4f}') + loss_list.append(avg_loss) + + + +if __name__ == "__main__": + main() +