| 3009 | buffered_tensor_allocator(llama_model_loader &ml, ggml_context *ctx, const llama_hparams &hparams) : ml(ml), ctx(ctx), hparams(hparams) {} |
| 3010 | |
| 3011 | ggml_tensor * buffered_alloc(const std::string & name, const llm_tensor tensor_type, const std::vector<int64_t> & ne, const int i_layer) { |
| 3012 | #if defined(GGML_USE_CUBLAS) |
| 3013 | tensor_offloading_levels level = get_offloading_level(tensor_type); |
| 3014 | if (level == TENSOR_NO_OFFLOAD || level == TENSOR_OFFLOAD_FFN) { |
| 3015 | return ml.create_tensor(ctx, name, ne, GGML_BACKEND_CPU); |
| 3016 | } |
| 3017 | // Alloc only metadata for GPU tensors |
| 3018 | bool no_alloc = ctx->no_alloc; |
| 3019 | ggml_set_no_alloc(ctx, true); |
| 3020 | ggml_tensor * meta_tensor = ml.create_tensor(ctx, name, ne, GGML_BACKEND_CPU); |
| 3021 | ggml_set_no_alloc(ctx, no_alloc); |
| 3022 | alloc_queues[level].push_back(std::make_tuple(i_layer, tensor_type, meta_tensor)); |
| 3023 | return meta_tensor; |
| 3024 | #else |
| 3025 | return ml.create_tensor(ctx, name, ne, GGML_BACKEND_CPU); |
| 3026 | #endif |
| 3027 | } |
| 3028 | |
| 3029 | bool offload_tensor(ggml_tensor * meta_tensor) { |
| 3030 | size_t tensor_data_size = ggml_nbytes(meta_tensor); |
no test coverage detected