Stockfish 15 e Lc0, test al variare del numero dei nodi

Lo scorso anno, poco dopo l’uscita della versione 13 di Stockfish, decisi di effettuare un confronto con Lc0, per determinare come potesse variare la forza dei due programmi di scacchi al variare del numero di nodi per mossa e determinare sia chi tra i due fosse il programma più forte al variare del numero di nodi, ma anche il numero minimo di nodi oltre il quale entrambi i programmi sarebbero diventati imbattibili anche dai migliori giocatori umani al mondo. Dal confronto emerse chiaramente come Stockfish fosse ancora il programma da battere, superato un numero di nodi minimo corrispondente all’incirca ad un milione di nodi analizzati per mossa (all’incirca corrispondente a meno di un secondo per mossa con le prestazioni dei PC odierni).

D’altro canto, Lc0, dotato di una rete neurale convulazionale profonda addestrata per auto apprendimento e con ricerca tramite metodo MonteCarlo, mostrava una notevole conoscenza scacchistica e una abilità posizionale (comparabile con quella di un candidato maestro umano di scacchi) già analizzando un solo nodo per mossa e senza conoscenza del controgioco avversario. Sfortunatamente, ancora oggi la potenza computazionale richiesta da Lc0 è di diversi ordini di grandezza superiore rispetto a Stockfish e altri motori scacchistici tradizionali, cosa che ne limita molto l’utilizzo. Anche utilizzando una potente GPU come le Nvidia di ultima generazione, difficilmente si riesce a superare i 50000 nodi/s, quando per confronto Stockfish, su un laptop di medio livello e senza GPU, raggiunge anche 1 milioni di nodi/sec per singolo core.

Per chi è interessato all’articolo, può cliccare qui.

A distanza di circa un anno, ho deciso di ricondurre l’esperimento utilizzando da un lato l’ultima incarnazione di Stockfish, giunto ormai alla versione 15 e fresco vincitore della edizione 22 del TCEC, e dall’altro Lc0 0.29dev (la versione più aggiornata nel momento in cui scrivo) con la rete di default inclusa nel programma, una piccola rete 15×192 753723. L’obbiettivo è valutare i miglioramenti di entrambi i motori rispetto al passato, e al tempo stesso correggere alcune imprecisioni emerse durante il test dello scorso anno.

Anche questa volta i risultati sono stati calcolati con Ordo di Miguel Ballicora. Poichè rispetto al test dello scorso anno, adesso dispongo di una mia rating list tarata su programmi passati in scontri con esseri umani dotata di un buon numero di partite e di motori, i risultati ottenuti dovrebbero essere più affidabili. I risultati sono stati ottenuti assegnando sempre un solo core ad ogni programma.

Risultati

Stockfish 15, 13 e Lc0 al variare del numero di nodi (cliccare per ingrandire a pieno schermo)

Rispetto al test dello scorso anno, Stockfish 15 appare nettamente più forte della sua incarnazione precedente. A parità di nodi la versione 15 è sempre più forte della versione precedente mantenendosi mediamente 60-65 punti elo più forte anche a tempi di elaborazione molto elevati (100-500 milioni di nodi per mossa). All’altro estremo, quando per ogni mossa ho assegnato un valore estremamente ridotto di nodi (200 nodi o inferiore), Stockfish 15 mostra invece un comportamento anomalo, in quanto il suo punteggio diviene costante e indipendente dal numero di nodi calcolati, mantenendosi comunque superiore alla versione 13. Credo che il problema sia dovuto al fatto che indipendentemente dal numero di nodi specificato, Stockfish calcoli sempre un numero minimo di nodi superiore a 200.

Per quanto riguarda Lc0, la rete inclusa nella versione 0.29dev presenta un andamento molto simile a quella analizzata lo scorso anno (rete 67743, di dimensione 320×24). In particolare, come accennato, anche questa rete mostra una bravura nel gioco nettamente superiore a Stockfish per bassissimi numeri di nodi (appena 100 nodi/mossa sono sufficienti per giocare alla pari con i migliori giocatori umani al mondo), ma viene rapidamente raggiunta e superata man mano che il numero di posizioni calcolate per mossa aumenta. Inoltre, poichè l’algoritmo MTCS su cui si basa Lc0 è diversi ordini di grandezza più lento di quello adottato da Stockfish, per poter sfruttare appieno Lc0, anche nella piccola rete 15×192 analizzata, è richiesta una GPU molto potente.

Rispetto alla rete 67743, la 753723 raggiunge punteggi più bassi, il che è normale se si considera che la rete ha una dimensione mediamente 4 volte inferiore rispetto alla 67743. Tutto ciò porta alla conclusione che solo dando forti vantaggi a Lc0 per quanto riguarda hardware e tempo di calcolo (almeno 100x a vantaggio di Lc0), è possibile uno scontro più o meno equilibrato tra i due programmi. Analizzando i risultati di tornei quali TCEC o CCC, o anche la rating list di Fastgm.de, i risultati sembrerebbero confermare ciò.

4 commenti

  1. Hi!

    According to your chart SF 15 and Lc0 0.29 played equally strong with respect to nodes per moves when both were reaching at least 1.000.000 nodes per move.
    Do you think this still holds true for SF 16.1 and Lc0 0.31?
    (SF 16.1 is full NNUE now since they have removed the classical evaluation part)

    I’m trying to find a balanced hardware setup to use them both for analysis, where ideally I could grant both of them an equal amount of time per move.
    Someone on TCEC Discord seems to have worked out an average conversion factor of ~ 1000, i.e. when SF calculates at ~ 20 MN/s, Lc0 is at 20 kn/s.
    https://discord.com/channels/425419482568196106/430695662108278784/1261869029727928423
    (This would just be the status quo, not a suggestion their configuration is balanced on TCEC)

    Any thoughts on this?

    Thank you and kind regards!

    1. Hi Sven! It’s hard to say without an accurate test. If we consider that both programs have significantly increased the size of their networks, I think the value of 1M nodes might still be valid even for the new versions. Perhaps a bit more than 1M, considering that in tests conducted by others rating lists, Stockfish seems to have gained a bit more elo compared to Lc0. But these are assumptions, as said proper testing should be conducted.

      Consider, also, that the graph I made at the time has very precise data regarding Stockfish (ten of thousands matches), but Lc0’s score has a higher margin of error, as – due to hardware limitiation – the number of test games for Lc0 was much lower.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *