char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
255582687
char/aliceai-t5-moe
1#pragma once 2 3#include "llama-batch.h" 4#include "llama-graph.h" 5#include "llama-kv-cache.h" 6#include "llama-memory.h" 7#include "llama-memory-recurrent.h" 8 9#include <memory> 10#include <vector> 11 12// 13// llama_memory_hybrid 14// 15 16// utilizes instances of llama_memory_recurrent and llama_kv_cache to 17// support models where each layer may be either attention-based or recurrent 18 19class llama_memory_hybrid :public llama_memory_i { 20public : 21llama_memory_hybrid ( 22const llama_model & model , 23/* attn */ 24ggml_type type_k , 25ggml_type type_v , 26bool v_trans , 27uint32_t kv_size , 28uint32_t n_pad , 29uint32_t n_swa , 30llama_swa_type swa_type , 31/* recurrent */ 32ggml_type type_r , 33ggml_type type_s , 34uint32_t rs_size , 35/* common */ 36uint32_t n_seq_max , 37uint32_t n_rs_seq , 38bool offload , 39bool unified , 40/* layer filters */ 41const layer_filter_cb & filter_attn = nullptr , 42const layer_filter_cb & filter_recr = nullptr ); 43 44 ~llama_memory_hybrid ()= default ; 45 46// 47// llama_memory_i 48// 49 50llama_memory_context_ptr init_batch ( 51llama_batch_allocr & balloc , 52uint32_t n_ubatch , 53bool embd_all )override ; 54 55llama_memory_context_ptr init_full ()override ; 56 57llama_memory_context_ptr init_update ( llama_context * lctx, bool optimize) override; 58 59bool get_can_shift () const override; 60 61void clear ( bool data) override; 62 63bool seq_rm ( llama_seq_id seq_id, llama_pos p0, llama_pos p1) override; 64void seq_cp ( llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) override; 65void seq_keep ( llama_seq_id seq_id) override; 66void seq_add ( llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) override; 67void seq_div ( llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) override; 68 69llama_pos seq_pos_min ( llama_seq_id seq_id) const override; 70llama_pos seq_pos_max ( llama_seq_id seq_id) const override; 71 72std::map < ggml_backend_buffer_type_t, size_t > memory_breakdown () const override; 73 74// state write/load 75 76void state_write ( llama_io_write_i & io, llama_seq_id seq_id = -1 , llama_state_seq_flags flags = 0 ) const override; 77void state_read ( llama_io_read_i & io, llama_seq_id seq_id = -1 , llama_state_seq_flags flags = 0 ) override; 78 79// 80// llama_memory_hybrid specific API 81// 82 83llama_kv_cache * get_mem_attn () const; 84llama_memory_recurrent * get_mem_recr () const; 85 86private : 87const llama_hparams & hparams; 88 89const std ::unique_ptr < llama_kv_cache > mem_attn; 90const std ::unique_ptr < llama_memory_recurrent > mem_recr; 91}; 92 93class llama_memory_hybrid_context : public llama_memory_context_i { 94public : 95using slot_info_vec_t = llama_kv_cache::slot_info_vec_t; 96 97// init failure 98explicit llama_memory_hybrid_context ( llama_memory_status status); 99 100// init full 101explicit llama_memory_hybrid_context ( llama_memory_hybrid * mem); 102 103// init update 104explicit llama_memory_hybrid_context ( 105llama_memory_hybrid * mem, 106llama_context * lctx, 107bool optimize); 108 109// init success 110llama_memory_hybrid_context ( 111llama_memory_hybrid * mem, 112slot_info_vec_t sinfos_attn, 113std::vector < llama_ubatch > ubatches); 114 115~ llama_memory_hybrid_context () = default; 116 117bool next () override ; 118bool apply () override; 119 120llama_memory_status get_status () const override ; 121const llama_ubatch & get_ubatch () const override; 122 123// 124// llama_memory_hybrid_context 125// 126 127const llama_kv_cache_context * get_attn () const; 128const llama_memory_recurrent_context * get_recr () const; 129 130private : 131// the index of the next ubatch to process 132size_t i_next = 0 ; 133 134std ::vector < llama_ubatch > ubatches; 135 136const llama_memory_context_ptr ctx_attn; 137const llama_memory_context_ptr ctx_recr; 138 139const llama_memory_status status ; 140};