Vai al contenuto

Causa, impatto, limiti e checklist della correzione heap nel backend CPU di llama.cpp b10955.

L’ANALISI

llama.cpp b10955: perché il fix CPU evita la corruzione heap

Una differenza nella dimensione della cache line poteva rendere troppo piccolo il buffer RoPE. La nuova build elimina la dipendenza dall’ordine degli include.

2 min di letturaFatti, limiti e fonti primarie
Release GitHub llama.cpp b10955 con la correzione della corruzione heap
Pagina ufficiale della release b10955 con causa tecnica, commit e binari scaricabili.

In breve: Aggiornare a b10955 o a una revisione successiva che includa il fix evita che due unità di compilazione calcolino CACHE_LINE_SIZE in modo diverso. Quel disallineamento poteva sottodimensionare il buffer RoPE e corrompere l’heap.

Il difetto corretto

Il precompiled header di ggml-cpu forzava un ordine degli include diverso. Nei kernel C++ CACHE_LINE_SIZE poteva diventare 256, mentre il codice C che dimensionava il work buffer conservava il fallback 64.

Perché il crash appariva più tardi

Il buffer risultava più piccolo di quanto i kernel si aspettassero. La scrittura oltre il limite avveniva nel calcolo RoPE, ma la corruzione dell’heap poteva manifestarsi con un crash successivo, rendendo meno immediata l’origine del problema.

Come cambia b10955

La patch disattiva il precompiled header per ggml-cpu e rimuove il ramo basato su std::hardware_destructive_interference_size. Il valore diventa deterministico e indipendente dall’ordine degli include.

Cosa cambia per chi distribuisce llama.cpp

Sono disponibili nuovi binari per macOS, Linux, Android e Windows. Il delta è di affidabilità: non aggiunge modelli o velocità, ma elimina una causa documentata di overflow e crash nelle build interessate.

Condizioni e limitazioni

b10955 è una pre-release. La causa è specifica del backend CPU e della configurazione di compilazione descritta nella patch. Prima del rollout va riprodotto il carico che attivava RoPE e controllata l’assenza di errori con un memory sanitizer quando possibile.

Checklist pratica

  • Annotare commit e opzioni della build che mostra il crash.
  • Riprodurre il workload RoPE con la build precedente e conservare il log.
  • Installare b10955 o verificare la presenza del commit 2f539596.
  • Ripetere lo stesso carico con numero di thread e modello invariati.
  • Eseguire ASan o un controllo equivalente se la toolchain lo consente.
  • Distribuire solo dopo la prova sul backend CPU e mantenere il rollback.

Fonti primarie

Radar AI · a cura di Francesco Gruner

Il sito, in una chat.

Servizi, guide e idee da approfondire

Sono l’assistente AI di questo sito. Ti aiuto a orientarti tra il lavoro di Francesco, il blog, Radar AI e i video, con i link alle fonti.

Risposte AI da verificare nelle fonti. 16 messaggi al giorno per rete.