Speculative Decoding es un técnica (realmente un conjunto de ellas) para acelerar un modelo de lenguaje usando un «oraculo» que genera un borrador tratando de adivinar lo que el modelo va a generar. En este caso usaremos Qwen-2.5-coder-0.5B como oraculo para generar el borrador.
Para esta prueba usaremos un ejemplo que viene con Llama.cpp. Pero antes de poder usarlo hay que cambiar en el fichero examples/speculative/speculative.cpp el valor de la constante SPEC_VOCAB_MAX_SIZE_DIFFERENCE de 100 a 200.
#define SPEC_VOCAB_MAX_SIZE_DIFFERENCE 200
Una vez hecho esto hay que volver a compilarlo y ya se puede probar con el comando:
./llama-speculative
-m models/Qwen2.5.1-Coder-7B-Instruct-Q8_0.gguf
-md models/Qwen2.5-coder-0.5b-instruct-q4_k_m.gguf
-c 4000 --draft 8 --color
--sampling-seq k --top-k 10 --temp 0.7
-p "Generate a tetris game using JS and HTML in one HTML file"
-ngl 99 -ngld 99
Puedes verlo en funcionamientos en el siguiente vídeo (así como la explicación de cada parámetro):
