6#include <nlohmann/json.hpp>
9#include <unordered_map>
15#if defined(WINDOWS_CUDA_12_1_WORKAROUND) && defined(_WIN32)
19#include <cuda_runtime.h>
137 std::vector<float>
k;
138 std::vector<float>
v;
220 ". Using max batch size.");
246 int layer,
const std::string&
name,
const std::vector<float>&
v)>;
347 std::vector<float>& input,
425 std::vector<ember_verify::RowPick>*
picks);
710int argmax(
const std::vector<float>&
v);
714void rmsnorm(
const std::vector<float>&
x,
const std::vector<uint16_t>& weight,
715 float eps, std::vector<float>&
out);
718 const std::vector<float>&
vec, std::vector<float>&
out,
727 const std::vector<uint8_t>&
bytes,
size_t numel);
static void warning(const std::string &message)
Main class for loading tensors from SafeTensors format files (single or sharded)
Main transformer model class for TinyLlama.
const GGUFData * get_gguf_data() const
bool use_bf16_tensor_cores_
void free_layer_gpu_weights(int layer_idx)
~TinyLlamaModel()
Destructor. Cleans up all allocated resources.
bool f32_concatenated_weights_loaded_
std::vector< LayerWeights > & get_layers()
std::vector< block_q6_K > embed_tokens_q6k
bool dequantize_all_if_small(size_t max_params)
std::vector< float > lookup_embedding(int token_id)
Lookup the embedding vector for a given token ID.
const ModelConfig & get_config() const
void ensure_up_proj_dequantized(int layer_idx)
std::vector< float > final_norm_f32
void free_bf16_concatenated_weights()
std::vector< block_q4_K > final_norm_q4k
void initialize_rope_freqs()
std::vector< uint16_t > final_norm
int get_vocab_size() const
Get the vocabulary size for the model.
void ensure_v_proj_dequantized(int layer_idx)
std::vector< block_q6_K > final_norm_q6k
std::vector< block_q4_K > lm_head_q4k
std::vector< float > forward_cpu_logits_batch(const std::vector< float > &final_batch_activations, int num_tokens_in_batch)
friend void map_gguf_weights(const GGUFData &gguf, TinyLlamaModel &model)
std::vector< block_q6_K > lm_head_q6k
void set_gemm_fp32_only(bool on)
void ensure_layer_weights_on_gpu(int layer_idx)
bool gemm_fp32_only() const
const std::vector< uint16_t > & get_embed_tokens() const
std::vector< std::pair< float, float > > precomputed_freqs_cis_
bool bf16_batch_gemm_failed_
void initialize_gpu_and_rope()
std::vector< block_q5_K > lm_head_q5k
void ensure_embed_tokens_dequantized()
std::vector< LayerWeights > layers
std::vector< block_q8_0 > embed_tokens_q8_0
void ensure_o_proj_dequantized(int layer_idx)
void clear_layer_dequantized_weights(int layer_idx)
std::vector< block_q4_K > embed_tokens_q4k
void ensure_k_proj_dequantized(int layer_idx)
const std::vector< uint16_t > & get_lm_head() const
std::unique_ptr< class CPUBatchProcessor > cpu_batch_processor_
std::vector< block_q8_0 > lm_head_q8_0
std::vector< uint16_t > lm_head
void ensure_f32_concatenated_weights_loaded()
std::vector< block_q5_K > embed_tokens_q5k
std::vector< std::vector< float > > forward_cpu_batch_generation(const std::vector< float > &batch_input_activations, const std::vector< int > &token_positions, const std::vector< int > &original_sequence_indices, int num_tokens_in_batch, KVCache *kv_cache)
std::vector< uint16_t > embed_tokens
std::vector< block_q8_K > embed_tokens_q8k
void ensure_bf16_concatenated_weights_loaded()
void ensure_q_proj_dequantized(int layer_idx)
void initialize_weights(const SafeTensorsLoader *loader, const GGUFData *gguf)
std::vector< float > forward_cpu_batch(const std::vector< float > &batch_input_activations, int num_tokens_in_batch, int num_cpu_layers_to_process, int start_pos_in_sequence, KVCache *kv_cache, const std::vector< int > &prompt_lengths={})
void ensure_down_proj_dequantized(int layer_idx)
void ensure_gate_proj_dequantized(int layer_idx)
GGUFData * get_gguf_data_ptr()
std::vector< float > embed_tokens_f32
std::vector< float > forward(std::vector< float > &input, int n_tokens, KVCache *kv_cache, const std::vector< int > *attention_mask)
Run the forward pass for the model on CPU layers.
void ensure_lm_head_dequantized()
std::unique_ptr< GGUFData > gguf_data_
std::vector< float > lm_head_f32
std::vector< block_q8_K > lm_head_q8k
static std::string tensor_name_to_string(TensorName tn)
TensorName
Enumeration of tensor names used in the TinyLlama model.
std::vector< uint16_t > uint8_vector_to_uint16_vector(const std::vector< uint8_t > &bytes, size_t numel)
ModelConfig parse_model_config(const nlohmann::json &json)
ModelConfig parse_model_config_from_gguf(const GGUFData &gguf)
void log_vector_summary(const std::string &name, const std::vector< float > &v, int head_count=5)
void log_vector_summary_batch(const std::string &name, const std::vector< float > &batch_vector, int num_tokens_in_batch, int single_token_vector_size, int head_count=5)
void matvec_bf16_f32(const std::vector< uint16_t > &mat, const std::vector< float > &vec, std::vector< float > &out, int M, int N)
int argmax(const std::vector< float > &v)
float bfloat16_to_float32(uint16_t b16)
void softmax(std::vector< float > &x)
std::function< void(int layer, const std::string &name, const std::vector< float > &v)> ForwardDiagCallback
Weight quantization structures and functions for model compression.
SafeTensors format loader for efficient tensor loading, supporting single and sharded models.
Complete representation of a GGUF file's contents.
Key-Value cache for a single transformer layer.
Complete Key-Value cache for all transformer layers.
void initialize_batch(int batch_size)
Initialize batch mode with specified number of sequences.
void initialize(const ModelConfig &config, int total_num_model_layers, int num_gpu_layers_to_allocate, int max_seq_len_arg, int num_kv_heads, int head_dim, int max_batch_size_arg=1)
Initializes the KV cache with given dimensions.
std::vector< KVCacheLayer > layers
void destroy_gpu_resources()
std::vector< int > batch_seq_lens
Structure holding all weights for a single transformer layer.
std::vector< uint16_t > post_attention_layernorm
std::vector< block_q6_K > down_proj_q6k
std::vector< block_q4_K > k_proj_q4k
std::vector< block_q6_K > k_proj_q6k
std::vector< float > input_layernorm_f32
std::vector< block_q8_K > o_proj_q8k
std::vector< uint16_t > gate_proj
std::vector< block_q5_K > v_proj_q5k
std::vector< uint16_t > v_proj
std::vector< uint16_t > input_layernorm
std::vector< block_q4_K > v_proj_q4k
std::vector< block_q4_K > up_proj_q4k
std::vector< block_q8_0 > o_proj_q8_0
std::vector< float > up_proj_f32
std::vector< block_q8_0 > moe_router_q8_0
std::vector< uint16_t > o_proj
std::vector< block_q5_K > o_proj_q5k
std::vector< block_q8_K > down_proj_q8k
std::vector< block_q4_K > down_proj_q4k
std::vector< block_q4_K > gate_proj_q4k
std::vector< float > v_proj_f32
std::vector< block_q5_K > down_proj_q5k
std::vector< block_q6_K > v_proj_q6k
std::vector< block_q8_K > up_proj_q8k
std::vector< block_q6_K > up_proj_q6k
std::vector< block_q8_0 > v_proj_q8_0
std::vector< float > k_proj_f32
std::vector< block_q5_K > gate_proj_q5k
std::vector< block_q8_K > v_proj_q8k
std::vector< block_q8_0 > gate_proj_q8_0
std::vector< block_q6_K > q_proj_q6k
std::vector< float > moe_gate_exps_f32
std::vector< block_q8_K > k_proj_q8k
std::vector< float > moe_down_exps_f32
std::vector< block_q6_K > gate_proj_q6k
std::vector< block_q5_K > q_proj_q5k
std::vector< float > moe_router_f32
std::vector< block_q8_K > gate_proj_q8k
std::vector< block_q5_K > up_proj_q5k
std::vector< float > gate_proj_f32
std::vector< block_q5_K > k_proj_q5k
std::vector< float > o_proj_f32
std::vector< uint16_t > down_proj
std::vector< block_q8_0 > q_proj_q8_0
std::vector< block_q8_0 > k_proj_q8_0
std::vector< uint16_t > up_proj
std::vector< block_q4_K > o_proj_q4k
std::vector< float > q_proj_f32
std::vector< uint16_t > q_proj
std::vector< float > moe_up_exps_f32
std::vector< block_q8_K > q_proj_q8k
std::vector< float > post_attention_layernorm_f32
std::vector< float > down_proj_f32
std::vector< block_q6_K > o_proj_q6k
std::vector< block_q8_0 > down_proj_q8_0
std::vector< block_q8_0 > up_proj_q8_0
std::vector< block_q4_K > q_proj_q4k
std::vector< uint16_t > k_proj
Model configuration structure holding architecture and hyperparameters.
std::string chat_template_string
std::string pre_tokenizer_type
std::string chat_template_type
int num_cpu_offload_layers
bool enable_memory_efficient_layers
bool use_kvcache_quantization
bool use_optimized_cuda_kernels
bool enable_prefill_chunking
TokenizerFamily tokenizer_family
int max_position_embeddings