From 99c54eba6dd13ab0ef153863ac5ac69d9f157d83 Mon Sep 17 00:00:00 2001 From: freelw <“freelw81@qq.com“> Date: Tue, 17 Jun 2025 12:21:11 +0800 Subject: [PATCH 1/2] fix yes --- backends/gpu/metal/metal_ops.cpp | 16 ++++++++++++++-- lm.cpp | 13 +++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/backends/gpu/metal/metal_ops.cpp b/backends/gpu/metal/metal_ops.cpp index 893407b..cbb0e2d 100644 --- a/backends/gpu/metal/metal_ops.cpp +++ b/backends/gpu/metal/metal_ops.cpp @@ -35,7 +35,15 @@ MetalOps::MetalOps() : commandBuffer(nullptr), cur_int_args(0), cur_float_args(0 } bufferIntArgs = device->newBuffer(TOTAL_INT_ARGS * sizeof(int), MTL::ResourceStorageModeShared); + if (!bufferIntArgs) { + std::cerr << "Failed to create buffer for int args!" << std::endl; + throw std::runtime_error("Failed to create buffer for int args"); + } bufferFloatArgs = device->newBuffer(TOTAL_FLOAT_ARGS * sizeof(float), MTL::ResourceStorageModeShared); + if (!bufferFloatArgs) { + std::cerr << "Failed to create buffer for float args!" << std::endl; + throw std::runtime_error("Failed to create buffer for float args"); + } load_kernel_metal(); addOps = new MetalKops("tensor_add_kernel", library); @@ -115,10 +123,10 @@ void MetalOps::prepare() { cur_float_args = 0; } -int calc_offset(const Tensor* t) { +unsigned int calc_offset(const Tensor* t) { char* base = reinterpret_cast(reinterpret_cast(t->get_storage()->ctx)->contents()); char* pos = reinterpret_cast(t->get_data()); - auto offset_res = pos - base; + unsigned int offset_res = pos - base; return offset_res; } @@ -1428,6 +1436,10 @@ void MetalOps::mulSV(Tensor* dst, Tensor* src, float value) { void* MetalOps::alloc(size_t size, void** ctx) { MTL::Buffer* buffer = device->newBuffer(size, MTL::ResourceStorageModeShared); + if (!buffer) { + std::cerr << "Error allocating buffer of size " << size << std::endl; + abort(); + } *ctx = (void*)buffer; return buffer->contents(); } diff --git a/lm.cpp b/lm.cpp index 20900cb..c16e87c 100644 --- a/lm.cpp +++ b/lm.cpp @@ -41,7 +41,8 @@ std::vector trim_or_padding(const std::vector& src, uint max_len, ui std::vector res = src; if (src.size() > max_len) { res.resize(max_len); - } else { + } + else { res.resize(max_len, pad_id); } return res; @@ -225,6 +226,7 @@ int main(int argc, char* argv[]) { adam.clip_grad(1.0f); adam.step(); graph::validateAllNodesRefCnt(0); + printAllTensors(); // printAllActions(); allocMemAndInitTensors(); std::cout << "Allocating memory " << std::endl @@ -264,7 +266,8 @@ int main(int argc, char* argv[]) { auto origin_size = src_token_ids.size(); if (src_token_ids.size() < num_steps) { src_token_ids.resize(num_steps, loader.get_pad_id()); - } else if (src_token_ids.size() > num_steps) { + } + else if (src_token_ids.size() > num_steps) { src_token_ids.erase(src_token_ids.begin(), src_token_ids.end() - num_steps); } auto cur_step = origin_size - 1; @@ -302,7 +305,8 @@ int main(int argc, char* argv[]) { if (cur_step >= num_steps - 1) { src_token_ids.push_back(max_index); src_token_ids.erase(src_token_ids.begin(), src_token_ids.end() - num_steps); - } else { + } + else { src_token_ids[++cur_step] = max_index; } } @@ -310,7 +314,8 @@ int main(int argc, char* argv[]) { std::cout << "-----------------" << std::endl; ::free(res_buffer); } - } else { + } + else { init_dec_valid_lens_for_training(dec_valid_lens); signal(SIGINT, signal_callback_handler); int epoch = 0; From dcc55d4d35e69a49247b2cf37f954140cef76ec0 Mon Sep 17 00:00:00 2001 From: freelw <“freelw81@qq.com“> Date: Tue, 17 Jun 2025 12:27:46 +0800 Subject: [PATCH 2/2] fix --- lm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lm.cpp b/lm.cpp index c16e87c..6626ec6 100644 --- a/lm.cpp +++ b/lm.cpp @@ -99,7 +99,7 @@ int main(int argc, char* argv[]) { int opt; int epochs = 10; - int batch_size = 4; + int batch_size = 16; int gpu = 1; int max_words_cnt = 256; float lr = 0.001f; @@ -226,7 +226,7 @@ int main(int argc, char* argv[]) { adam.clip_grad(1.0f); adam.step(); graph::validateAllNodesRefCnt(0); - printAllTensors(); + // printAllTensors(); // printAllActions(); allocMemAndInitTensors(); std::cout << "Allocating memory " << std::endl