| 2793 | size_t vram_required = 0; |
| 2794 | |
| 2795 | llama_gpu_split_loader(const std::string & fname, bool use_mmap) : fname(fname), use_mmap(use_mmap) { |
| 2796 | GGML_ASSERT(use_mmap); |
| 2797 | |
| 2798 | idx_loader = new llama_model_loader(fname, use_mmap); |
| 2799 | GGUF_GET_KEY(idx_loader->ctx_gguf, vram_required, gguf_get_val_u64, GGUF_TYPE_UINT64, true, LLM_KV_NAMES[LLM_KV_SPLIT_VRAM_CAPACITY]); |
| 2800 | printf("loaded gpu_idx, vram_required: %ld\n", vram_required); |
| 2801 | |
| 2802 | n_tensors = idx_loader->n_tensors; |
| 2803 | |
| 2804 | // allocate memadata/data for mlp tensors |
| 2805 | // TODO: support allocating buffer for tensor data (when mmap is not used) |
| 2806 | size_t per_tensor_meta_size = GGML_PAD(sizeof(struct ggml_tensor), GGML_MEM_ALIGN) + GGML_OBJECT_SIZE; |
| 2807 | size_t tensor_meta_size = n_tensors * per_tensor_meta_size; |
| 2808 | struct ggml_init_params params = { |
| 2809 | /*.mem_size =*/ tensor_meta_size, |
| 2810 | /*.mem_buffer =*/ nullptr, |
| 2811 | /*.no_alloc =*/ true, |
| 2812 | }; |
| 2813 | ctx_meta = ggml_init(params); |
| 2814 | } |
| 2815 | |
| 2816 | bool check_vram_allocable(size_t vram_budget) { |
| 2817 | return vram_budget >= vram_required; |