diff --git a/common/speculative.cpp b/common/speculative.cpp index 851a47b9a5..854a97b85a 100644 --- a/common/speculative.cpp +++ b/common/speculative.cpp @@ -2472,6 +2472,14 @@ common_params common_base_params_to_speculative(const common_params & params) { result.n_gpu_layers = params_spec.n_gpu_layers; result.tensor_buft_overrides = params_spec.tensor_buft_overrides; + // a draft pinned to a single device doesn't need the meta wrapper an inherited -sm tensor would give it + // (the device list is null-terminated, so a single device means size 2) + const size_t n_devs = std::count_if(params_spec.devices.begin(), params_spec.devices.end(), + [](ggml_backend_dev_t d) { return d != nullptr; }); + if (n_devs == 1) { + result.split_mode = LLAMA_SPLIT_MODE_LAYER; + } + if (params_spec.cpuparams.n_threads > 0) { result.cpuparams.n_threads = params_spec.cpuparams.n_threads; result.cpuparams_batch.n_threads = params_spec.cpuparams_batch.n_threads;