mirror of
https://github.com/ikawrakow/ik_llama.cpp.git
synced 2026-07-21 02:05:35 +00:00
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
#pragma once
|
|
|
|
#include "common.h"
|
|
|
|
struct llama_model;
|
|
|
|
struct spec_tuner_arm {
|
|
float value;
|
|
double Q = 0.0; // mean per-step Tokens-Per-Second (TPS)
|
|
int N = 0;
|
|
};
|
|
|
|
struct spec_tuner_coord {
|
|
std::string name;
|
|
std::vector<spec_tuner_arm> arms;
|
|
int current_idx = 0;
|
|
int best_idx = 0;
|
|
int user_idx = 0;
|
|
|
|
int select_epsilon_greedy(double epsilon) const;
|
|
|
|
void update(double reward);
|
|
|
|
void reset_scores();
|
|
|
|
void build_grid_float(float lo, float hi, int n_points, float user_value);
|
|
void build_grid_int(int lo, int hi, int step, int user_value);
|
|
int find_nearest_arm(float value) const;
|
|
};
|
|
|
|
struct spec_tuner {
|
|
bool enabled = false;
|
|
|
|
double epsilon = 0.15; // 15% explore, 85% exploit
|
|
|
|
int configured_n_max = 0;
|
|
int dflash_min_samples_per_arm = 3;
|
|
int dflash_recovery_probe_interval = 128;
|
|
double dflash_quarantine_ratio = 0.90;
|
|
std::vector<bool> dflash_quarantined;
|
|
int dflash_probe_cursor = 0;
|
|
bool dflash_last_exploratory = false;
|
|
bool dflash_last_recovery_probe = false;
|
|
uint64_t n_target_only_selections = 0;
|
|
uint64_t n_dflash_selections = 0;
|
|
uint64_t n_exploratory_selections = 0;
|
|
uint64_t n_quarantines = 0;
|
|
uint64_t n_recovery_probes = 0;
|
|
|
|
// task-change detection (per-call)
|
|
// If tuner goes bad for 30 consecutive calls, reset the tuner.
|
|
double step_ema = 0.0;
|
|
double step_ema_alpha = 0.05;
|
|
double step_drop_pct = 0.30;
|
|
int n_low = 0;
|
|
int reset_after = 30;
|
|
int cooldown = 0;
|
|
int cooldown_max = 50;
|
|
int n_resets = 0;
|
|
|
|
int last_n_drafted = 0;
|
|
uint64_t n_calls = 0;
|
|
int log_every = 50;
|
|
|
|
// per-request tracking
|
|
uint64_t n_requests = 0;
|
|
int64_t t_tuner_us = 0;
|
|
double ema_tps = 0.0;
|
|
double ema_alpha = 0.3;
|
|
|
|
common_speculative_type spec_type = COMMON_SPECULATIVE_TYPE_NONE;
|
|
std::vector<spec_tuner_coord> coords;
|
|
|
|
void init(common_speculative_type type, const common_params_speculative & user_params, const llama_model * model_tgt);
|
|
void propose(common_params_speculative & params);
|
|
void accept_feedback(int n_accepted, int n_drafted, double step_tps);
|
|
void end_of_request(double slot_tps, int n_past, common_params_speculative & active_params);
|
|
void enforce_constraints(common_params_speculative & params);
|
|
void print_best() const;
|
|
void reset_exploration();
|
|
|
|
void write_best(common_params_speculative & params) const;
|
|
|
|
bool has_dflash_target_only_arm() const {
|
|
return enabled && spec_type == COMMON_SPECULATIVE_TYPE_DFLASH && configured_n_max > 0;
|
|
}
|
|
|
|
private:
|
|
int select_dflash_arm(spec_tuner_coord & coord);
|
|
void update_dflash_quarantine();
|
|
};
|