diff --git a/src/layer/arm/convolution1d_arm.cpp b/src/layer/arm/convolution1d_arm.cpp index 26389279b18..43a1c17646d 100644 --- a/src/layer/arm/convolution1d_arm.cpp +++ b/src/layer/arm/convolution1d_arm.cpp @@ -68,7 +68,8 @@ int Convolution1D_arm::create_pipeline(const Option& opt) convolution1d_transform_kernel_packed(weight_data, weight_data_tm, num_input, num_output, kernel_w); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -239,7 +240,8 @@ int Convolution1D_arm::create_pipeline_bf16s(const Option& /*opt*/) convolution1d_transform_kernel_packed_bf16s(weight_data, weight_data_tm, num_input, num_output, kernel_w); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/convolution1d_arm_asimdhp.cpp b/src/layer/arm/convolution1d_arm_asimdhp.cpp index 2e194eabf21..cb6336d019e 100644 --- a/src/layer/arm/convolution1d_arm_asimdhp.cpp +++ b/src/layer/arm/convolution1d_arm_asimdhp.cpp @@ -36,7 +36,8 @@ int Convolution1D_arm::create_pipeline_fp16s(const Option& opt) ncnn::cast_float32_to_float16(bias_data, bias_data_fp16, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/convolution_arm.cpp b/src/layer/arm/convolution_arm.cpp index f7f04619e9e..4198eeeb7c6 100644 --- a/src/layer/arm/convolution_arm.cpp +++ b/src/layer/arm/convolution_arm.cpp @@ -194,7 +194,8 @@ int Convolution_arm::create_pipeline(const Option& opt) convolution_dilation1->create_pipeline(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -224,7 +225,8 @@ int Convolution_arm::create_pipeline(const Option& opt) else conv3x3s1_winograd23_transform_kernel(weight_data, weight_winograd23_data, num_input, num_output, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -270,7 +272,8 @@ int Convolution_arm::create_pipeline(const Option& opt) { convolution_im2col_gemm_transform_kernel(weight_data, weight_sgemm_data, num_input, num_output, kernel_w, kernel_h, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -305,7 +308,8 @@ int Convolution_arm::create_pipeline(const Option& opt) convolution_transform_kernel_packed(weight_data, weight_data_tm, num_input, num_output, kernel_w, kernel_h); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -904,7 +908,8 @@ int Convolution_arm::create_pipeline_bf16s(const Option& opt) else conv3x3s1_winograd23_transform_kernel(weight_data, weight_winograd23_data, num_input, num_output, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -950,7 +955,8 @@ int Convolution_arm::create_pipeline_bf16s(const Option& opt) { convolution_im2col_gemm_transform_kernel_bf16s(weight_data, weight_sgemm_data, num_input, num_output, kernel_w, kernel_h, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -971,7 +977,8 @@ int Convolution_arm::create_pipeline_bf16s(const Option& opt) convolution_transform_kernel_packed_bf16s(weight_data, weight_data_tm, num_input, num_output, kernel_w, kernel_h); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -1284,7 +1291,8 @@ int Convolution_arm::create_pipeline_int8_arm(const Option& opt) scale_in_data[p] = scale_in; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/convolution_arm_asimdhp.cpp b/src/layer/arm/convolution_arm_asimdhp.cpp index 51ec51675a8..b1a98ea22e5 100644 --- a/src/layer/arm/convolution_arm_asimdhp.cpp +++ b/src/layer/arm/convolution_arm_asimdhp.cpp @@ -108,7 +108,8 @@ int Convolution_arm::create_pipeline_fp16s(const Option& opt) else conv3x3s1_winograd23_transform_kernel_fp16sa(weight_data, weight_winograd23_data, num_input, num_output, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); if (opt.use_fp16_arithmetic) { @@ -189,7 +190,8 @@ int Convolution_arm::create_pipeline_fp16s(const Option& opt) ncnn::cast_float32_to_float16(bias_data, bias_data_fp16, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -219,7 +221,8 @@ int Convolution_arm::create_pipeline_fp16s(const Option& opt) ncnn::cast_float32_to_float16(bias_data, bias_data_fp16, opt); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/convolutiondepthwise_arm.cpp b/src/layer/arm/convolutiondepthwise_arm.cpp index f9f4a1fdc2d..4bf61c53efc 100644 --- a/src/layer/arm/convolutiondepthwise_arm.cpp +++ b/src/layer/arm/convolutiondepthwise_arm.cpp @@ -119,7 +119,8 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) ncnn::cast_float32_to_bfloat16(weight_data, weight_data_tm, opt); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -161,7 +162,8 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -169,7 +171,8 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -1022,7 +1025,8 @@ int ConvolutionDepthWise_arm::create_pipeline_int8_arm(const Option& opt) weight_data_tm = weight_data; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -1030,7 +1034,8 @@ int ConvolutionDepthWise_arm::create_pipeline_int8_arm(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/convolutiondepthwise_arm_asimdhp.cpp b/src/layer/arm/convolutiondepthwise_arm_asimdhp.cpp index 1d5f2782cc1..cfea9f2a003 100644 --- a/src/layer/arm/convolutiondepthwise_arm_asimdhp.cpp +++ b/src/layer/arm/convolutiondepthwise_arm_asimdhp.cpp @@ -76,7 +76,8 @@ int ConvolutionDepthWise_arm::create_pipeline_fp16s(const Option& opt) ncnn::cast_float32_to_float16(bias_data, bias_data_fp16, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -84,7 +85,8 @@ int ConvolutionDepthWise_arm::create_pipeline_fp16s(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/deconvolution_arm.cpp b/src/layer/arm/deconvolution_arm.cpp index 24c825ae266..c06532a66ca 100644 --- a/src/layer/arm/deconvolution_arm.cpp +++ b/src/layer/arm/deconvolution_arm.cpp @@ -211,7 +211,8 @@ int Deconvolution_arm::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -954,7 +955,8 @@ int Deconvolution_arm::create_pipeline_bf16s(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/deconvolution_arm_asimdhp.cpp b/src/layer/arm/deconvolution_arm_asimdhp.cpp index b5498d815f3..9cb7df4630d 100644 --- a/src/layer/arm/deconvolution_arm_asimdhp.cpp +++ b/src/layer/arm/deconvolution_arm_asimdhp.cpp @@ -154,7 +154,8 @@ int Deconvolution_arm::create_pipeline_fp16s(const Option& opt) ncnn::cast_float32_to_float16(bias_data, bias_data_fp16, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/deconvolutiondepthwise_arm.cpp b/src/layer/arm/deconvolutiondepthwise_arm.cpp index 4eac426d9de..133d5158fa6 100644 --- a/src/layer/arm/deconvolutiondepthwise_arm.cpp +++ b/src/layer/arm/deconvolutiondepthwise_arm.cpp @@ -104,7 +104,8 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) ncnn::cast_float32_to_bfloat16(weight_data_transposed, weight_data_tm, opt); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -190,7 +191,8 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/deconvolutiondepthwise_arm_asimdhp.cpp b/src/layer/arm/deconvolutiondepthwise_arm_asimdhp.cpp index 5fa42d07490..73b428ebfef 100644 --- a/src/layer/arm/deconvolutiondepthwise_arm_asimdhp.cpp +++ b/src/layer/arm/deconvolutiondepthwise_arm_asimdhp.cpp @@ -145,7 +145,8 @@ int DeconvolutionDepthWise_arm::create_pipeline_fp16s(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/gemm_arm.cpp b/src/layer/arm/gemm_arm.cpp index 3463550d3d4..e88ca1cc68d 100644 --- a/src/layer/arm/gemm_arm.cpp +++ b/src/layer/arm/gemm_arm.cpp @@ -4201,7 +4201,8 @@ int Gemm_arm::create_pipeline(const Option& opt) } } - A_data.release(); + if (opt.lightmode) + A_data.release(); } if (constantB) @@ -4241,7 +4242,8 @@ int Gemm_arm::create_pipeline(const Option& opt) } } - B_data.release(); + if (opt.lightmode) + B_data.release(); } if (constantC && constant_broadcast_type_C != -1) @@ -4271,7 +4273,8 @@ int Gemm_arm::create_pipeline(const Option& opt) CT_data = C2; } - C_data.release(); + if (opt.lightmode) + C_data.release(); } if (constantA || constantB || constantC) @@ -4889,7 +4892,8 @@ int Gemm_arm::create_pipeline_bf16s(const Option& opt) } } - A_data.release(); + if (opt.lightmode) + A_data.release(); } if (constantB) @@ -4929,7 +4933,8 @@ int Gemm_arm::create_pipeline_bf16s(const Option& opt) } } - B_data.release(); + if (opt.lightmode) + B_data.release(); } if (constantC && constant_broadcast_type_C != -1) @@ -4959,7 +4964,8 @@ int Gemm_arm::create_pipeline_bf16s(const Option& opt) CT_data = C2; } - C_data.release(); + if (opt.lightmode) + C_data.release(); } if (constantA || constantB || constantC) diff --git a/src/layer/arm/gemm_arm_asimdhp.cpp b/src/layer/arm/gemm_arm_asimdhp.cpp index cfe6ce8ce60..f3140cb04b9 100644 --- a/src/layer/arm/gemm_arm_asimdhp.cpp +++ b/src/layer/arm/gemm_arm_asimdhp.cpp @@ -2736,7 +2736,8 @@ int Gemm_arm::create_pipeline_fp16sa(const Option& opt) } } - A_data.release(); + if (opt.lightmode) + A_data.release(); } if (constantB) @@ -2776,7 +2777,8 @@ int Gemm_arm::create_pipeline_fp16sa(const Option& opt) } } - B_data.release(); + if (opt.lightmode) + B_data.release(); } if (constantC && constant_broadcast_type_C != -1) @@ -2802,7 +2804,8 @@ int Gemm_arm::create_pipeline_fp16sa(const Option& opt) } } - C_data.release(); + if (opt.lightmode) + C_data.release(); } if (constantA || constantB || constantC) diff --git a/src/layer/arm/gemm_arm_vfpv4.cpp b/src/layer/arm/gemm_arm_vfpv4.cpp index 5792e47e980..be0fe178730 100644 --- a/src/layer/arm/gemm_arm_vfpv4.cpp +++ b/src/layer/arm/gemm_arm_vfpv4.cpp @@ -427,7 +427,8 @@ int Gemm_arm::create_pipeline_fp16s(const Option& opt) } } - A_data.release(); + if (opt.lightmode) + A_data.release(); } if (constantB) @@ -467,7 +468,8 @@ int Gemm_arm::create_pipeline_fp16s(const Option& opt) } } - B_data.release(); + if (opt.lightmode) + B_data.release(); } if (constantC && constant_broadcast_type_C != -1) @@ -497,7 +499,8 @@ int Gemm_arm::create_pipeline_fp16s(const Option& opt) CT_data = C2; } - C_data.release(); + if (opt.lightmode) + C_data.release(); } if (constantA || constantB || constantC) diff --git a/src/layer/arm/gru_arm.cpp b/src/layer/arm/gru_arm.cpp index 58df8275ad5..80f8c80ad3c 100644 --- a/src/layer/arm/gru_arm.cpp +++ b/src/layer/arm/gru_arm.cpp @@ -250,9 +250,12 @@ int GRU_arm::create_pipeline(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } @@ -1372,9 +1375,12 @@ int GRU_arm::create_pipeline_bf16s(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/arm/gru_arm_asimdhp.cpp b/src/layer/arm/gru_arm_asimdhp.cpp index fcdce2d8e18..f3d38305a2e 100644 --- a/src/layer/arm/gru_arm_asimdhp.cpp +++ b/src/layer/arm/gru_arm_asimdhp.cpp @@ -914,9 +914,12 @@ int GRU_arm::create_pipeline_fp16s(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/arm/innerproduct_arm.cpp b/src/layer/arm/innerproduct_arm.cpp index 0cbc78525eb..2d3bafab81b 100644 --- a/src/layer/arm/innerproduct_arm.cpp +++ b/src/layer/arm/innerproduct_arm.cpp @@ -122,7 +122,8 @@ int InnerProduct_arm::create_pipeline(const Option& opt) weight_data_tm = weight_data; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -865,7 +866,8 @@ int InnerProduct_arm::create_pipeline_bf16s(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -1258,7 +1260,8 @@ int InnerProduct_arm::create_pipeline_int8_arm(const Option& opt) scale_in_data[p] = scale_in; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/innerproduct_arm_vfpv4.cpp b/src/layer/arm/innerproduct_arm_vfpv4.cpp index 6a6eab84fba..306d37ad7cf 100644 --- a/src/layer/arm/innerproduct_arm_vfpv4.cpp +++ b/src/layer/arm/innerproduct_arm_vfpv4.cpp @@ -41,7 +41,8 @@ int InnerProduct_arm::create_pipeline_fp16s(const Option& opt) } #endif - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/arm/lstm_arm.cpp b/src/layer/arm/lstm_arm.cpp index b8d5afe93dc..04d7277547e 100644 --- a/src/layer/arm/lstm_arm.cpp +++ b/src/layer/arm/lstm_arm.cpp @@ -124,9 +124,12 @@ int LSTM_arm::create_pipeline(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } @@ -928,9 +931,12 @@ int LSTM_arm::create_pipeline_bf16s(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/arm/lstm_arm_asimdhp.cpp b/src/layer/arm/lstm_arm_asimdhp.cpp index 593af33ccd4..1d3fc71cdfc 100644 --- a/src/layer/arm/lstm_arm_asimdhp.cpp +++ b/src/layer/arm/lstm_arm_asimdhp.cpp @@ -835,9 +835,12 @@ int LSTM_arm::create_pipeline_fp16s(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/arm/multiheadattention_arm.cpp b/src/layer/arm/multiheadattention_arm.cpp index b3f3d7aa8e7..37323a2255f 100644 --- a/src/layer/arm/multiheadattention_arm.cpp +++ b/src/layer/arm/multiheadattention_arm.cpp @@ -84,8 +84,11 @@ int MultiHeadAttention_arm::create_pipeline(const Option& _opt) q_gemm->load_model(ModelBinFromMatArray(weights)); q_gemm->create_pipeline(opt); - q_weight_data.release(); - q_bias_data.release(); + if (opt.lightmode) + { + q_weight_data.release(); + q_bias_data.release(); + } } { @@ -110,8 +113,11 @@ int MultiHeadAttention_arm::create_pipeline(const Option& _opt) k_gemm->load_model(ModelBinFromMatArray(weights)); k_gemm->create_pipeline(opt); - k_weight_data.release(); - k_bias_data.release(); + if (opt.lightmode) + { + k_weight_data.release(); + k_bias_data.release(); + } } { @@ -136,8 +142,11 @@ int MultiHeadAttention_arm::create_pipeline(const Option& _opt) v_gemm->load_model(ModelBinFromMatArray(weights)); v_gemm->create_pipeline(opt); - v_weight_data.release(); - v_bias_data.release(); + if (opt.lightmode) + { + v_weight_data.release(); + v_bias_data.release(); + } } { @@ -160,8 +169,11 @@ int MultiHeadAttention_arm::create_pipeline(const Option& _opt) o_gemm->load_model(ModelBinFromMatArray(weights)); o_gemm->create_pipeline(opt); - out_weight_data.release(); - out_bias_data.release(); + if (opt.lightmode) + { + out_weight_data.release(); + out_bias_data.release(); + } } { diff --git a/src/layer/arm/rnn_arm.cpp b/src/layer/arm/rnn_arm.cpp index 15b9f0b8a0d..293322b8488 100644 --- a/src/layer/arm/rnn_arm.cpp +++ b/src/layer/arm/rnn_arm.cpp @@ -139,9 +139,12 @@ int RNN_arm::create_pipeline(const Option& opt) bias_c_data_packed = bias_c_data; - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } @@ -736,9 +739,12 @@ int RNN_arm::create_pipeline_bf16s(const Option& opt) cast_float32_to_bfloat16(bias_c_data, bias_c_data_packed, opt); - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/arm/rnn_arm_asimdhp.cpp b/src/layer/arm/rnn_arm_asimdhp.cpp index 467dba614f8..93b009151c5 100644 --- a/src/layer/arm/rnn_arm_asimdhp.cpp +++ b/src/layer/arm/rnn_arm_asimdhp.cpp @@ -517,9 +517,12 @@ int RNN_arm::create_pipeline_fp16s(const Option& opt) cast_float32_to_float16(bias_c_data, bias_c_data_packed, opt); - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/vulkan/batchnorm_vulkan.cpp b/src/layer/vulkan/batchnorm_vulkan.cpp index b770ab36bc7..2d0072a6cc1 100644 --- a/src/layer/vulkan/batchnorm_vulkan.cpp +++ b/src/layer/vulkan/batchnorm_vulkan.cpp @@ -156,6 +156,12 @@ int BatchNorm_vulkan::upload_model(VkTransfer& cmd, const Option& opt) cmd.record_upload(b_data_packed, b_data_gpu, opt); } + if (opt.lightmode) + { + a_data.release(); + b_data.release(); + } + return 0; } diff --git a/src/layer/vulkan/convolution1d_vulkan.cpp b/src/layer/vulkan/convolution1d_vulkan.cpp index 2747012addc..0581f2d4c0a 100644 --- a/src/layer/vulkan/convolution1d_vulkan.cpp +++ b/src/layer/vulkan/convolution1d_vulkan.cpp @@ -133,8 +133,11 @@ int Convolution1D_vulkan::create_pipeline(const Option& _opt) pipeline_convolution1d->create(shader_type_index, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/convolution_vulkan.cpp b/src/layer/vulkan/convolution_vulkan.cpp index 302ab9085c5..6b07b6b73d4 100644 --- a/src/layer/vulkan/convolution_vulkan.cpp +++ b/src/layer/vulkan/convolution_vulkan.cpp @@ -1148,8 +1148,11 @@ int Convolution_vulkan::create_pipeline(const Option& _opt) pipeline_convolution->create(shader_type_index, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/convolutiondepthwise_vulkan.cpp b/src/layer/vulkan/convolutiondepthwise_vulkan.cpp index 59eca6a55c6..2cda228d976 100644 --- a/src/layer/vulkan/convolutiondepthwise_vulkan.cpp +++ b/src/layer/vulkan/convolutiondepthwise_vulkan.cpp @@ -271,8 +271,11 @@ int ConvolutionDepthWise_vulkan::create_pipeline(const Option& _opt) pipeline_convolutiondepthwise_pack8->create(LayerShaderType::convolutiondepthwise_pack8, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } @@ -413,8 +416,11 @@ int ConvolutionDepthWise_vulkan::create_pipeline(const Option& _opt) pipeline_convolutiondepthwise_group_pack8to1->create(LayerShaderType::convolutiondepthwise_group_pack8to1, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/deconvolution_vulkan.cpp b/src/layer/vulkan/deconvolution_vulkan.cpp index 66e57db57bf..04fab54cceb 100644 --- a/src/layer/vulkan/deconvolution_vulkan.cpp +++ b/src/layer/vulkan/deconvolution_vulkan.cpp @@ -366,6 +366,12 @@ int Deconvolution_vulkan::create_pipeline(const Option& _opt) pipeline_deconvolution_col2im->create(shader_type_index, opt, specializations); } + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } + return 0; } @@ -462,8 +468,11 @@ int Deconvolution_vulkan::create_pipeline(const Option& _opt) pipeline_deconvolution->set_optimal_local_size_xyz(local_size_xyz); pipeline_deconvolution->create(shader_type_index, opt, specializations); - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp b/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp index a715a4782f4..e6ab72b8a2a 100644 --- a/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp +++ b/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp @@ -295,8 +295,11 @@ int DeconvolutionDepthWise_vulkan::create_pipeline(const Option& _opt) pipeline_deconvolutiondepthwise_pack8->create(LayerShaderType::deconvolutiondepthwise_pack8, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } @@ -437,8 +440,11 @@ int DeconvolutionDepthWise_vulkan::create_pipeline(const Option& _opt) pipeline_deconvolutiondepthwise_group_pack8to1->create(LayerShaderType::deconvolutiondepthwise_group_pack8to1, opt, specializations); } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/gemm_vulkan.cpp b/src/layer/vulkan/gemm_vulkan.cpp index f30fa552f11..0d403a5288b 100644 --- a/src/layer/vulkan/gemm_vulkan.cpp +++ b/src/layer/vulkan/gemm_vulkan.cpp @@ -100,9 +100,12 @@ int Gemm_vulkan::create_pipeline(const Option& opt) pipeline_gemm->create(LayerShaderType::gemm, opt, specializations); } - A_data.release(); - B_data.release(); - C_data.release(); + if (opt.lightmode) + { + A_data.release(); + B_data.release(); + C_data.release(); + } return 0; } diff --git a/src/layer/vulkan/innerproduct_vulkan.cpp b/src/layer/vulkan/innerproduct_vulkan.cpp index ee73d4bb4ac..7f9051abe1c 100644 --- a/src/layer/vulkan/innerproduct_vulkan.cpp +++ b/src/layer/vulkan/innerproduct_vulkan.cpp @@ -154,8 +154,11 @@ int InnerProduct_vulkan::create_pipeline(const Option& _opt) pipeline_innerproduct_gemm->set_optimal_local_size_xyz(local_size_xyz); pipeline_innerproduct_gemm->create(shader_type_index, opt, specializations); - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } @@ -364,14 +367,20 @@ int InnerProduct_vulkan::create_pipeline(const Option& _opt) pipeline_innerproduct_gemm->set_optimal_local_size_xyz(local_size_xyz); pipeline_innerproduct_gemm->create(shader_type_index, opt, specializations); - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } - weight_data.release(); - bias_data.release(); + if (opt.lightmode) + { + weight_data.release(); + bias_data.release(); + } return 0; } diff --git a/src/layer/vulkan/memorydata_vulkan.cpp b/src/layer/vulkan/memorydata_vulkan.cpp index d6a316c0a41..b4716ef5e23 100644 --- a/src/layer/vulkan/memorydata_vulkan.cpp +++ b/src/layer/vulkan/memorydata_vulkan.cpp @@ -82,6 +82,11 @@ int MemoryData_vulkan::upload_model(VkTransfer& cmd, const Option& opt) cmd.record_upload(data_packed, data_gpu, opt, /*bool flatten*/ false); } + if (opt.lightmode) + { + data.release(); + } + return 0; } diff --git a/src/layer/vulkan/multiheadattention_vulkan.cpp b/src/layer/vulkan/multiheadattention_vulkan.cpp index 411b81b05e9..48967de3697 100644 --- a/src/layer/vulkan/multiheadattention_vulkan.cpp +++ b/src/layer/vulkan/multiheadattention_vulkan.cpp @@ -73,8 +73,11 @@ int MultiHeadAttention_vulkan::create_pipeline(const Option& opt) q_gemm->load_model(ModelBinFromMatArray(weights)); q_gemm->create_pipeline(opt); - q_weight_data.release(); - q_bias_data.release(); + if (opt.lightmode) + { + q_weight_data.release(); + q_bias_data.release(); + } } { @@ -100,8 +103,11 @@ int MultiHeadAttention_vulkan::create_pipeline(const Option& opt) k_gemm->load_model(ModelBinFromMatArray(weights)); k_gemm->create_pipeline(opt); - k_weight_data.release(); - k_bias_data.release(); + if (opt.lightmode) + { + k_weight_data.release(); + k_bias_data.release(); + } } { @@ -127,8 +133,11 @@ int MultiHeadAttention_vulkan::create_pipeline(const Option& opt) v_gemm->load_model(ModelBinFromMatArray(weights)); v_gemm->create_pipeline(opt); - v_weight_data.release(); - v_bias_data.release(); + if (opt.lightmode) + { + v_weight_data.release(); + v_bias_data.release(); + } } { @@ -222,8 +231,11 @@ int MultiHeadAttention_vulkan::create_pipeline(const Option& opt) o_gemm->load_model(ModelBinFromMatArray(weights)); o_gemm->create_pipeline(opt); - out_weight_data.release(); - out_bias_data.release(); + if (opt.lightmode) + { + out_weight_data.release(); + out_bias_data.release(); + } } return 0; diff --git a/src/layer/vulkan/normalize_vulkan.cpp b/src/layer/vulkan/normalize_vulkan.cpp index 5e29cd9afee..dcadc9b0753 100644 --- a/src/layer/vulkan/normalize_vulkan.cpp +++ b/src/layer/vulkan/normalize_vulkan.cpp @@ -264,6 +264,9 @@ int Normalize_vulkan::upload_model(VkTransfer& cmd, const Option& opt) { cmd.record_upload(scale_data_packed, scale_data_gpu, opt); } + + if (opt.lightmode) + scale_data.release(); } return 0; diff --git a/src/layer/vulkan/padding_vulkan.cpp b/src/layer/vulkan/padding_vulkan.cpp index 4f97733c313..619f33311c6 100644 --- a/src/layer/vulkan/padding_vulkan.cpp +++ b/src/layer/vulkan/padding_vulkan.cpp @@ -348,6 +348,11 @@ int Padding_vulkan::upload_model(VkTransfer& cmd, const Option& opt) cmd.record_upload(per_channel_pad_data_packed, per_channel_pad_data_gpu, opt); } + if (opt.lightmode) + { + per_channel_pad_data.release(); + } + return 0; } diff --git a/src/layer/vulkan/prelu_vulkan.cpp b/src/layer/vulkan/prelu_vulkan.cpp index d58184c0938..a3995e3d2b1 100644 --- a/src/layer/vulkan/prelu_vulkan.cpp +++ b/src/layer/vulkan/prelu_vulkan.cpp @@ -144,6 +144,11 @@ int PReLU_vulkan::upload_model(VkTransfer& cmd, const Option& opt) { cmd.record_upload(slope_data_packed, slope_data_gpu, opt); } + + if (opt.lightmode) + { + slope_data.release(); + } } return 0; diff --git a/src/layer/vulkan/priorbox_vulkan.cpp b/src/layer/vulkan/priorbox_vulkan.cpp index 5cfe341cd78..5425aa7a936 100644 --- a/src/layer/vulkan/priorbox_vulkan.cpp +++ b/src/layer/vulkan/priorbox_vulkan.cpp @@ -129,6 +129,13 @@ int PriorBox_vulkan::upload_model(VkTransfer& cmd, const Option& opt) cmd.record_upload(aspect_ratios, aspect_ratios_gpu, opt); + if (opt.lightmode) + { + min_sizes.release(); + max_sizes.release(); + aspect_ratios.release(); + } + return 0; } diff --git a/src/layer/vulkan/scale_vulkan.cpp b/src/layer/vulkan/scale_vulkan.cpp index 135f04638bd..2398409fe41 100644 --- a/src/layer/vulkan/scale_vulkan.cpp +++ b/src/layer/vulkan/scale_vulkan.cpp @@ -218,6 +218,12 @@ int Scale_vulkan::upload_model(VkTransfer& cmd, const Option& opt) } } + if (opt.lightmode) + { + scale_data.release(); + bias_data.release(); + } + return 0; } diff --git a/src/layer/x86/convolution1d_x86.cpp b/src/layer/x86/convolution1d_x86.cpp index 905db18b728..e1686611d59 100644 --- a/src/layer/x86/convolution1d_x86.cpp +++ b/src/layer/x86/convolution1d_x86.cpp @@ -34,7 +34,7 @@ Convolution1D_x86::Convolution1D_x86() #endif // __SSE2__ } -int Convolution1D_x86::create_pipeline(const Option& /*opt*/) +int Convolution1D_x86::create_pipeline(const Option& opt) { if (dynamic_weight) return 0; @@ -43,7 +43,8 @@ int Convolution1D_x86::create_pipeline(const Option& /*opt*/) convolution1d_transform_kernel_packed(weight_data, weight_data_tm, num_input, num_output, kernel_w); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/convolution_x86.cpp b/src/layer/x86/convolution_x86.cpp index c1f354ea6de..4bd6a4ef2bf 100644 --- a/src/layer/x86/convolution_x86.cpp +++ b/src/layer/x86/convolution_x86.cpp @@ -334,7 +334,8 @@ int Convolution_x86::create_pipeline(const Option& opt) convolution_dilation1->create_pipeline(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -451,7 +452,8 @@ int Convolution_x86::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -542,7 +544,8 @@ int Convolution_x86::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -1250,7 +1253,8 @@ int Convolution_x86::create_pipeline_int8_x86(const Option& opt) scale_in_data[p] = scale_in; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/convolutiondepthwise_x86.cpp b/src/layer/x86/convolutiondepthwise_x86.cpp index 6a9fb7fb4c2..4b20252ccdd 100644 --- a/src/layer/x86/convolutiondepthwise_x86.cpp +++ b/src/layer/x86/convolutiondepthwise_x86.cpp @@ -132,7 +132,8 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -140,7 +141,8 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -843,7 +845,8 @@ int ConvolutionDepthWise_x86::create_pipeline_int8_x86(const Option& opt) weight_data_tm = weight_data; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -851,7 +854,8 @@ int ConvolutionDepthWise_x86::create_pipeline_int8_x86(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/deconvolution_x86.cpp b/src/layer/x86/deconvolution_x86.cpp index 6a94104a43d..2b187a3e32a 100644 --- a/src/layer/x86/deconvolution_x86.cpp +++ b/src/layer/x86/deconvolution_x86.cpp @@ -193,7 +193,8 @@ int Deconvolution_x86::create_pipeline(const Option& opt) } } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/deconvolutiondepthwise_x86.cpp b/src/layer/x86/deconvolutiondepthwise_x86.cpp index 4a1e89d26a8..21b931abae2 100644 --- a/src/layer/x86/deconvolutiondepthwise_x86.cpp +++ b/src/layer/x86/deconvolutiondepthwise_x86.cpp @@ -109,7 +109,8 @@ int DeconvolutionDepthWise_x86::create_pipeline(const Option& opt) weight_data_tm = weight_data_transposed; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -117,7 +118,8 @@ int DeconvolutionDepthWise_x86::create_pipeline(const Option& opt) // group convolution create_group_ops(opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/deformableconv2d_x86.cpp b/src/layer/x86/deformableconv2d_x86.cpp index 8fc7bdf2855..b880adb1e4d 100644 --- a/src/layer/x86/deformableconv2d_x86.cpp +++ b/src/layer/x86/deformableconv2d_x86.cpp @@ -203,7 +203,8 @@ int DeformableConv2D_x86::create_pipeline(const Option& opt) deformableconv2d_transform_kernel_packed_sse(weight_data, weight_data_tm, num_input, num_output, kernel_w, kernel_h, elempack, out_elempack); } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/gemm_x86.cpp b/src/layer/x86/gemm_x86.cpp index 4ab37836a43..16791394dba 100644 --- a/src/layer/x86/gemm_x86.cpp +++ b/src/layer/x86/gemm_x86.cpp @@ -7235,7 +7235,8 @@ int Gemm_x86::create_pipeline(const Option& opt) } } - A_data.release(); + if (opt.lightmode) + A_data.release(); } if (constantB) @@ -7279,7 +7280,8 @@ int Gemm_x86::create_pipeline(const Option& opt) } } - B_data.release(); + if (opt.lightmode) + B_data.release(); } if (constantC && constant_broadcast_type_C != -1) @@ -7315,7 +7317,8 @@ int Gemm_x86::create_pipeline(const Option& opt) CT_data = C2; } - C_data.release(); + if (opt.lightmode) + C_data.release(); } if (constantA || constantB || constantC) diff --git a/src/layer/x86/innerproduct_x86.cpp b/src/layer/x86/innerproduct_x86.cpp index dee07d1de64..9bef1436df9 100644 --- a/src/layer/x86/innerproduct_x86.cpp +++ b/src/layer/x86/innerproduct_x86.cpp @@ -80,7 +80,8 @@ int InnerProduct_x86::create_pipeline(const Option& opt) innerproduct_transform_kernel_sse(weight_data, weight_data_tm, num_input, num_output, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -175,7 +176,8 @@ int InnerProduct_x86::create_pipeline_fp16s(const Option& opt) innerproduct_transform_kernel_fp16s_sse(weight_data, weight_data_tm, num_input, num_output, opt); - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } @@ -281,7 +283,8 @@ int InnerProduct_x86::create_pipeline_int8_x86(const Option& opt) scale_in_data[p] = scale_in; } - weight_data.release(); + if (opt.lightmode) + weight_data.release(); return 0; } diff --git a/src/layer/x86/lstm_x86.cpp b/src/layer/x86/lstm_x86.cpp index 5d693648f44..6ba218e53d3 100644 --- a/src/layer/x86/lstm_x86.cpp +++ b/src/layer/x86/lstm_x86.cpp @@ -182,9 +182,12 @@ int LSTM_x86::create_pipeline(const Option& opt) } } - weight_xc_data.release(); - bias_c_data.release(); - weight_hc_data.release(); + if (opt.lightmode) + { + weight_xc_data.release(); + bias_c_data.release(); + weight_hc_data.release(); + } return 0; } diff --git a/src/layer/x86/multiheadattention_x86.cpp b/src/layer/x86/multiheadattention_x86.cpp index 2bddad5582d..a7ff58288c2 100644 --- a/src/layer/x86/multiheadattention_x86.cpp +++ b/src/layer/x86/multiheadattention_x86.cpp @@ -65,8 +65,11 @@ int MultiHeadAttention_x86::create_pipeline(const Option& opt) q_gemm->load_model(ModelBinFromMatArray(weights)); q_gemm->create_pipeline(opt); - q_weight_data.release(); - q_bias_data.release(); + if (opt.lightmode) + { + q_weight_data.release(); + q_bias_data.release(); + } } { @@ -91,8 +94,11 @@ int MultiHeadAttention_x86::create_pipeline(const Option& opt) k_gemm->load_model(ModelBinFromMatArray(weights)); k_gemm->create_pipeline(opt); - k_weight_data.release(); - k_bias_data.release(); + if (opt.lightmode) + { + k_weight_data.release(); + k_bias_data.release(); + } } { @@ -117,8 +123,11 @@ int MultiHeadAttention_x86::create_pipeline(const Option& opt) v_gemm->load_model(ModelBinFromMatArray(weights)); v_gemm->create_pipeline(opt); - v_weight_data.release(); - v_bias_data.release(); + if (opt.lightmode) + { + v_weight_data.release(); + v_bias_data.release(); + } } { @@ -193,8 +202,11 @@ int MultiHeadAttention_x86::create_pipeline(const Option& opt) o_gemm->load_model(ModelBinFromMatArray(weights)); o_gemm->create_pipeline(opt); - out_weight_data.release(); - out_bias_data.release(); + if (opt.lightmode) + { + out_weight_data.release(); + out_bias_data.release(); + } } return 0;