- name: Tests
id: server_integration_tests
- if: ${{ !github.event.pull_request }}
run: |
cd tools/server/tests
pytest -v -x -m "not slow"
- name: Tests (Backend sampling)
id: server_integration_tests_backend_sampling
- if: ${{ !github.event.pull_request }}
run: |
cd tools/server/tests
export LLAMA_ARG_BACKEND_SAMPLING=1
- name: Tests
id: server_integration_tests
- if: ${{ !github.event.pull_request }}
run: |
cd tools/server/tests
$env:PYTHONIOENCODING = ":replace"
// we define here to make sure it's included in llama-gen-docs
if (ex == LLAMA_EXAMPLE_COMPLETION) {
params.use_jinja = false; // disable jinja by default
-
} else if (ex == LLAMA_EXAMPLE_MTMD) {
params.use_jinja = false; // disable jinja by default
params.sampling.temp = 0.2; // lower temp by default for better quality
-
} else if (ex == LLAMA_EXAMPLE_SERVER) {
params.n_parallel = -1; // auto by default
}
sampler_type_names.pop_back(); // remove last semicolon
}
-
/**
* filter options by example
* rules:
}
};
-
add_opt(common_arg(
{"-h", "--help", "--usage"},
"print usage and exit",
return result;
}
+int32_t common_speculative_n_max(const common_params_speculative * spec) {
+ int32_t n_max = 0;
+
+ for (const auto type : spec->types) {
+ switch (type) {
+ case COMMON_SPECULATIVE_TYPE_DRAFT_SIMPLE:
+ case COMMON_SPECULATIVE_TYPE_DRAFT_EAGLE3:
+ case COMMON_SPECULATIVE_TYPE_DRAFT_MTP:
+ n_max = std::max(n_max, std::max(0, spec->draft.n_max));
+ break;
+ case COMMON_SPECULATIVE_TYPE_NGRAM_SIMPLE:
+ n_max = std::max(n_max, (int32_t) spec->ngram_simple.size_m);
+ break;
+ case COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K:
+ n_max = std::max(n_max, (int32_t) spec->ngram_map_k.size_m);
+ break;
+ case COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K4V:
+ n_max = std::max(n_max, (int32_t) spec->ngram_map_k4v.size_m);
+ break;
+ case COMMON_SPECULATIVE_TYPE_NGRAM_MOD:
+ n_max = std::max(n_max, std::max(0, spec->ngram_mod.n_max));
+ break;
+ case COMMON_SPECULATIVE_TYPE_NGRAM_CACHE:
+ n_max = std::max(n_max, (int32_t) 8);
+ break;
+ case COMMON_SPECULATIVE_TYPE_NONE:
+ case COMMON_SPECULATIVE_TYPE_COUNT:
+ break;
+ }
+ }
+
+ return n_max;
+}
+
// initialization of the speculative decoding system
//
common_speculative * common_speculative_init(common_params_speculative & params, uint32_t n_seq) {
{
uint32_t enabled_configs = common_get_enabled_speculative_configs(params.types);
- bool has_draft_model_path = !params.draft.mparams.path.empty();
-
bool has_draft_simple = (enabled_configs & (1u << COMMON_SPECULATIVE_TYPE_DRAFT_SIMPLE));
bool has_draft_eagle3 = false; // TODO PR-18039: if params.speculative.eagle3
bool has_mtp = (enabled_configs & (1u << COMMON_SPECULATIVE_TYPE_DRAFT_MTP)) && params.draft.ctx_dft != nullptr;
if (has_ngram_cache) {
configs.push_back(common_speculative_config(COMMON_SPECULATIVE_TYPE_NGRAM_CACHE, params));
}
- if (has_draft_simple) {
- if (!has_draft_model_path) {
- LOG_WRN("%s: draft model is not specified - cannot use 'draft' type\n", __func__);
- has_draft_simple = false;
- }
- } else if (has_draft_model_path && !has_mtp && !has_draft_eagle3) {
- LOG_WRN("%s: draft model is specified but 'draft' speculative type is not explicitly enabled - enabling it\n", __func__);
- has_draft_simple = true;
- }
-
if (has_draft_simple) {
configs.push_back(common_speculative_config(COMMON_SPECULATIVE_TYPE_DRAFT_SIMPLE, params));
}
// convert type to string
std::string common_speculative_type_to_str(enum common_speculative_type type);
+// return the max number of draft tokens based on the speculative parameters
+int32_t common_speculative_n_max(const common_params_speculative * spec);
+
common_speculative * common_speculative_init(common_params_speculative & params, uint32_t n_seq);
void common_speculative_free(common_speculative * spec);
LLAMA_LOG_INFO("%s: freq_base = %.1f\n", __func__, cparams.rope_freq_base);
LLAMA_LOG_INFO("%s: freq_scale = %g\n", __func__, cparams.rope_freq_scale);
LLAMA_LOG_INFO("%s: n_rs_seq = %u\n", __func__, cparams.n_rs_seq);
+ LLAMA_LOG_INFO("%s: n_outputs_max = %u\n", __func__, cparams.n_outputs_max);
if (cparams.n_ctx_seq < hparams.n_ctx_train) {
LLAMA_LOG_WARN("%s: n_ctx_seq (%u) < n_ctx_train (%u) -- the full capacity of the model will not be utilized\n",
return n_batch;
}
- uint32_t n_outputs_per_seq = 1;
-
- for (const auto type : params.speculative.types) {
- switch (type) {
- case COMMON_SPECULATIVE_TYPE_DRAFT_SIMPLE:
- case COMMON_SPECULATIVE_TYPE_DRAFT_EAGLE3:
- case COMMON_SPECULATIVE_TYPE_DRAFT_MTP:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + std::max(0, params.speculative.draft.n_max));
- break;
- case COMMON_SPECULATIVE_TYPE_NGRAM_SIMPLE:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + params.speculative.ngram_simple.size_m);
- break;
- case COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + params.speculative.ngram_map_k.size_m);
- break;
- case COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K4V:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + params.speculative.ngram_map_k4v.size_m);
- break;
- case COMMON_SPECULATIVE_TYPE_NGRAM_MOD:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + std::max(0, params.speculative.ngram_mod.n_max));
- break;
- case COMMON_SPECULATIVE_TYPE_NGRAM_CACHE:
- n_outputs_per_seq = std::max<uint32_t>(n_outputs_per_seq, 1 + 8);
- break;
- case COMMON_SPECULATIVE_TYPE_NONE:
- case COMMON_SPECULATIVE_TYPE_COUNT:
- break;
- }
- }
+ const uint32_t n_outputs_per_seq = 1 + common_speculative_n_max(¶ms.speculative);
const uint64_t n_outputs = (uint64_t) params.n_parallel * n_outputs_per_seq;
measure_model_bytes = false;
}
- if (!has_draft) {
- params_dft.n_outputs_max = params_base.n_parallel;
- }
+ params_dft.n_outputs_max = params_base.n_parallel;
auto mparams_dft = common_model_params_to_llama(params_dft);
auto cparams_dft = common_context_params_to_llama(params_dft);