Paso a paso de ejemplo de LLM en tu PC sin GPU

1.- Instalacion de dependencias

Primero, necesitas instalar algunas dependencias para compilar y ejecutar

 
sudo apt update
sudo apt install build-essential cmake


2.- Clonar repositorio llama.cpp

Clona el repositorio de llama.cpp en tu máquina:

 
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp


3.- Compilar llama.cpp

Compila llama.cpp usando los siguientes comandos:

 
mkdir build
cd build
cmake ..
make
cd ..

4.- Descargar el Modelo

Para este ejemplo descargaremos el modelo gemma-2b-it-GGUF

 
git clone https://huggingface.co/lmstudio-ai/gemma-2b-it-GGUF

5.- Ejecutar el Modelo Usando llama.cpp

Usa el binario compilado de llama.cpp para ejecutar el modelo. Asumiendo que el archivo de modelo se llama gemma-2b-it-q4_k_m.gguf

cd build/bin
./llama-cli -m /home/usuario/ruta/donde_se/descargo_el_modelo/gemma-2b-it-GGUF/gemma-2b-it-q4_k_m.gguf -p "escribe una carta de amor"

6.- Ejemplo de output

israel@israel-Inspiron-3847:~/Documentos/Proyectos/LLM/llama.cpp/build/bin$ ./llama-cli -m /home/israel/Documentos/Proyectos/LLM/gemma-2b-it-GGUF/gemma-2b-it-q4_k_m.gguf -p "escribe una carta de amor"
Log start
main: build = 3751 (feff4aa8)
main: built with cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 for x86_64-linux-gnu
llama_model_loader: loaded meta data with 21 key-value pairs and 164 tensors from /home/israel/Documentos/Proyectos/LLM/gemma-2b-it-GGUF/gemma-2b-it-q4_k_m.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = gemma
llama_model_loader: - kv   1:                               general.name str              = gemma-2b-it
llama_model_loader: - kv   2:                       gemma.context_length u32              = 8192
llama_model_loader: - kv   3:                          gemma.block_count u32              = 18
llama_model_loader: - kv   4:                     gemma.embedding_length u32              = 2048
llama_model_loader: - kv   5:                  gemma.feed_forward_length u32              = 16384
llama_model_loader: - kv   6:                 gemma.attention.head_count u32              = 8
llama_model_loader: - kv   7:              gemma.attention.head_count_kv u32              = 1
llama_model_loader: - kv   8:                 gemma.attention.key_length u32              = 256
llama_model_loader: - kv   9:               gemma.attention.value_length u32              = 256
llama_model_loader: - kv  10:     gemma.attention.layer_norm_rms_epsilon f32              = 0,000001
llama_model_loader: - kv  11:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  12:                tokenizer.ggml.bos_token_id u32              = 2
llama_model_loader: - kv  13:                tokenizer.ggml.eos_token_id u32              = 1
llama_model_loader: - kv  14:            tokenizer.ggml.padding_token_id u32              = 0
llama_model_loader: - kv  15:            tokenizer.ggml.unknown_token_id u32              = 3
llama_model_loader: - kv  16:                      tokenizer.ggml.tokens arr[str,256128]  = ["<pad>", "<eos>", "<bos>", "<unk>", ...
llama_model_loader: - kv  17:                      tokenizer.ggml.scores arr[f32,256128]  = [0,000000, 0,000000, 0,000000, 0,0000...
llama_model_loader: - kv  18:                  tokenizer.ggml.token_type arr[i32,256128]  = [3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, ...
llama_model_loader: - kv  19:               general.quantization_version u32              = 2
llama_model_loader: - kv  20:                          general.file_type u32              = 15
llama_model_loader: - type  f32:   37 tensors
llama_model_loader: - type q4_K:  109 tensors
llama_model_loader: - type q6_K:   18 tensors
llm_load_vocab: control-looking token: '<end_of_turn>' was not control-type; this is probably a bug in the model. its type will be overridden
llm_load_vocab: special tokens cache size = 5
llm_load_vocab: token to piece cache size = 1,6014 MB
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = gemma
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 256128
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: vocab_only       = 0
llm_load_print_meta: n_ctx_train      = 8192
llm_load_print_meta: n_embd           = 2048
llm_load_print_meta: n_layer          = 18
llm_load_print_meta: n_head           = 8
llm_load_print_meta: n_head_kv        = 1
llm_load_print_meta: n_rot            = 256
llm_load_print_meta: n_swa            = 0
llm_load_print_meta: n_embd_head_k    = 256
llm_load_print_meta: n_embd_head_v    = 256
llm_load_print_meta: n_gqa            = 8
llm_load_print_meta: n_embd_k_gqa     = 256
llm_load_print_meta: n_embd_v_gqa     = 256
llm_load_print_meta: f_norm_eps       = 0,0e+00
llm_load_print_meta: f_norm_rms_eps   = 1,0e-06
llm_load_print_meta: f_clamp_kqv      = 0,0e+00
llm_load_print_meta: f_max_alibi_bias = 0,0e+00
llm_load_print_meta: f_logit_scale    = 0,0e+00
llm_load_print_meta: n_ff             = 16384
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 2
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000,0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn  = 8192
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: ssm_dt_b_c_rms   = 0
llm_load_print_meta: model type       = 2B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 2,51 B
llm_load_print_meta: model size       = 1,39 GiB (4,75 BPW) 
llm_load_print_meta: general.name     = gemma-2b-it
llm_load_print_meta: BOS token        = 2 '<bos>'
llm_load_print_meta: EOS token        = 1 '<eos>'
llm_load_print_meta: UNK token        = 3 '<unk>'
llm_load_print_meta: PAD token        = 0 '<pad>'
llm_load_print_meta: LF token         = 227 '<0x0A>'
llm_load_print_meta: EOT token        = 107 '<end_of_turn>'
llm_load_print_meta: max token length = 93
llm_load_tensors: ggml ctx size =    0,08 MiB
llm_load_tensors:        CPU buffer size =  1420,21 MiB
............................................................
llama_new_context_with_model: n_ctx      = 8192
llama_new_context_with_model: n_batch    = 2048
llama_new_context_with_model: n_ubatch   = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 10000,0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init:        CPU KV buffer size =   144,00 MiB
llama_new_context_with_model: KV self size  =  144,00 MiB, K (f16):   72,00 MiB, V (f16):   72,00 MiB
llama_new_context_with_model:        CPU  output buffer size =     0,98 MiB
llama_new_context_with_model:        CPU compute buffer size =   508,25 MiB
llama_new_context_with_model: graph nodes  = 601
llama_new_context_with_model: graph splits = 1

system_info: n_threads = 4 (n_threads_batch = 4) / 8 | AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | RISCV_VECT = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 | 
sampling seed: 1564498072
sampling params: 
	repeat_last_n = 64, repeat_penalty = 1,000, frequency_penalty = 0,000, presence_penalty = 0,000
	top_k = 40, tfs_z = 1,000, top_p = 0,950, min_p = 0,050, typical_p = 1,000, temp = 0,800
	mirostat = 0, mirostat_lr = 0,100, mirostat_ent = 5,000
sampler constr: 
	logits -> logit-bias -> penalties -> top-k -> tail-free -> typical -> top-p -> min-p -> temp-ext -> softmax -> dist 
generate: n_ctx = 8192, n_batch = 2048, n_predict = -1, n_keep = 1


 escribe una carta de amor.

Querida [Nombre],

Desde que conocí a tus ojos, he estado luchando por poder escribirte una carta de amor con las palabras más adecuadas. Hoy, con la confesión de un corazón honesto, puedo decir que siento una conexión tan profunda con ti que nadie en el mundo podría simbolizar lo que tengo para ti.

Tu sonrisa es el paraíso de mi día. Tu mirada llena de luz y emoción es como el sol en la noche. Tu voz es el dulce sonido de las hojas en el viento.

Cada momento con ustedes es un recuerdo perfecto, una mancha que deja un dulce sabor en mi memoria. Cuando nos vemos, siento como si nada hayan pasado en el mundo.

Tu esencia es la luz que me guía en la oscuridad. Tu presencia es el refugio en el mar. Tu amor es la razón de mi vida.

Querida [Nombre], con las palabras más sinceras, te adieu. Con la esperanza de que en el infinito, tus ojos seguirán luchando por mí, y que cada día, en cualquier momento, podamos volver a sentir lo que nos separaba.

Con amor incondicional,

[Tu nombre] [end of text]

llama_perf_sampler_print:    sampling time =      47,26 ms /   243 runs   (    0,19 ms per token,  5142,31 tokens per second)
llama_perf_context_print:        load time =   14388,74 ms
llama_perf_context_print: prompt eval time =     203,64 ms /     6 tokens (   33,94 ms per token,    29,46 tokens per second)
llama_perf_context_print:        eval time =   21089,55 ms /   236 runs   (   89,36 ms per token,    11,19 tokens per second)
llama_perf_context_print:       total time =   21454,75 ms /   242 tokens
Log end