| 3140 | } |
| 3141 | |
| 3142 | static size_t llm_load_gpu_split(llama_model_loader & ml, llama_model & model, bool no_cache, bool no_offload) { |
| 3143 | #if defined (GGML_USE_CUBLAS) |
| 3144 | if (!ggml_cublas_loaded()) { |
| 3145 | throw std::runtime_error(format("cannot offload to GPU: " GGML_CUDA_NAME " not loaded")); |
| 3146 | } |
| 3147 | if (!no_offload && !llm_load_gpu_split_with_budget(ml, model, vram_budget_bytes, no_cache)) { |
| 3148 | LLAMA_LOG_ERROR("%s: error: failed to generate gpu split, an empty one will be used\n", __func__); |
| 3149 | } |
| 3150 | #endif |
| 3151 | |
| 3152 | // Apply GPU index and split FFNs to GPU |
| 3153 | size_t ffn_offloaded_bytes = llama_model_offload_ffn_split(&model); |
| 3154 | LLAMA_LOG_INFO("%s: offloaded %.2f MiB of FFN weights to GPU\n", __func__, ffn_offloaded_bytes / 1024.0 / 1024.0); |
| 3155 | |
| 3156 | return ffn_offloaded_bytes; |
| 3157 | } |
| 3158 | |
| 3159 | static void llm_load_sparse_model_tensors( |
| 3160 | llama_model_loader & ml, |
no test coverage detected