CHSM8-player-base: games-only continuation (one full pass over 26M games)
CHSM8 pretrained decoder (LegumMagister/chsm8-pt) continued for exactly one pass over 26.0M unique human games (1.95B move tokens; Lichess pool, deduplicated, split seed 20260802) with no text: plain next-move prediction on the whole game (both sides). Unconditioned strong base for the player fine-tunes (see Player models).
- Architecture: Llama-style decoder, 12 layers x 960, 15 heads, SwiGLU 3520, QK-norm, factored move head; 166.2M parameters (chsm8-pt without its 44.3M cross-attention scaffold).
- Pretraining cross-attention (frozen, constant input) removed exactly: its constant output became a per-layer bias (
xbias); loss at step 0 identical to the pretrained model. - Recipe (picked by 10/30/60-min ablations, val loss): AdamW lr 5e-5, cosine to 0 by tokens, warmup 5%, batch 4 GPUs x 32 x 512, legal-move penalty 0.5, bf16.
- Val loss (fixed 40-batch val set) at 10%, 20%, … 90% of the pass: 2.9236, 2.9117, 2.9104, 2.9068, 2.8948, 2.8871, 2.8855, 2.8786, 2.8773
Strength: 1000 games vs Stockfish 17.1 (UCI_Elo 2000, 0.05 s/move)
| checkpoint (share of the pass) | Elo |
|---|---|
| pct20 | 1889 (95% CI 1869-1907, 999 games) |
| pct40 | 1881 (95% CI 1861-1900, 1000 games) |
| pct60 | 1886 (95% CI 1867-1905, 1000 games) |
| pct80 | 1883 (95% CI 1863-1902, 999 games) |
| final | 1890 (95% CI 1870-1909, 1000 games) |
Reference: the pretrained base, chsm8-pt, scored 1837 on the same benchmark; one extra pass over games gives +53.
Bradley–Terry ranking against 19 other models
From the CHSM8 technical report (Table "Bradley–Terry strength"). One Bradley–Terry fit over all 64,746 games played between the models and Stockfish 17.1 at UCI_Elo 2000, which is fixed at 2000 as the anchor. BT is that strength with its 95% interval; Elo is the model's rating from its 1,000 games against Stockfish alone; Elo rank is its place by that Elo, with ▲/▼ the places gained or lost under BT. Ours in bold. Groups: supervised move prediction, strong recent models without search, and search.
| # | Model | Group | BT (95% CI) | Games | Elo | Elo rank |
|---|---|---|---|---|---|---|
| 1 | Matilda | search | 2674 ±39 | 4,000 | 3009 | 1 |
| 2 | Searchless 136M | strong, no search | 2431 ±21 | 3,999 | 2584 | 2 |
| 3 | Searchless 270M | strong, no search | 2418 ±21 | 3,982 | 2505 | 3 |
| 4 | Searchless 9M | strong, no search | 2321 ±17 | 3,996 | 2403 | 4 |
| 5 | QUEEN (PAWN-8) | strong, no search | 2291 ±34 | 800 | 2354 | 5 |
| 6 | Maia-3 79M | strong, no search | 2271 ±15 | 3,997 | 2271 | 6 |
| 7 | Allie 2.0 | strong, no search | 2250 ±15 | 4,000 | 2232 | 7 |
| 8 | chsm8-player-carlsen | supervised | 2022 ±10 | 16,199 | 1903 | 11 ▲3 |
| 9 | chsm8-player-base | supervised | 2006 ±10 | 16,200 | 1890 | 12 ▲3 |
| 10 | Stockfish (anchor) | search | 2000 (fixed) | 18,146 | – | 10 |
| 11 | Otter 15M | strong, no search | 1972 ±12 | 3,999 | 2021 | 8 ▼3 |
| 12 | ChessLFM with search | search | 1969 ±12 | 3,985 | 2001 | 9 ▼3 |
| 13 | chsm8-pt | supervised | 1953 ±9 | 17,199 | 1837 | 14 ▲1 |
| 14 | Maia-2 blitz | supervised | 1814 ±13 | 4,198 | 1657 | 19 ▲5 |
| 15 | Chess-GPT (Karvonen) | supervised | 1786 ±14 | 4,199 | 1873 | 13 ▼2 |
| 16 | chess-gpt2-uci | supervised | 1691 ±16 | 4,197 | 1784 | 15 ▼1 |
| 17 | ChessFormer (Transcendence) | supervised | 1642 ±17 | 4,200 | 1733 | 16 ▼1 |
| 18 | ChessGPT-base 2.8B | supervised | 1619 ±18 | 4,199 | 1731 | 17 ▼1 |
| 19 | ChessLFM | supervised | 1595 ±20 | 3,997 | 1687 | 18 ▼1 |
| 20 | C1-4B | strong, no search | 1164 ±59 | 4,000 | 1112 | 20 |
This model is ninth overall and the second-strongest model trained only by supervised move prediction, behind its own Carlsen fine-tune; against the full field it ranks above Stockfish at UCI_Elo 2000, Otter 15M and ChessLFM with search, although its Elo against Stockfish alone is lower than theirs.
Player models
Each player model is this model fine-tuned on one player's own moves (full fine-tune, AdamW lr 3e-5, cosine, 2 passes over the player's unique games; the opponent's moves are context only). Games come from chess.com and lichess for active players and from PGN Mentor (classical over-the-board) for historical ones. Held out: the player's most recent games (val + test, up to 1,000 each), never trained on.
How well a fine-tune captures the player (on held-out test games, player's own moves only):
- Move-match: share of positions where the model's top move is the move the player actually played (base = this model before fine-tuning).
- Top-3: the played move is among the model's top 3.
- CE: cross-entropy on the player's moves (lower = closer to the player).
- Model Elo: the fine-tuned model's strength, 1000 games vs Stockfish 17.1 at UCI_Elo 2000, 0.05 s/move (this base model: 1890).
The model imitates the player's moves in the games available (mostly online blitz and rapid for active players); it does not reach the player's strength. Fine-tunes stay within about ±40 Elo of the base.
FIDE top 10
| # | Player | FIDE (2026-09) | Model | Unique games | Move-match base → fit | Top-3 | CE base → fit | Model Elo |
|---|---|---|---|---|---|---|---|---|
| 1 | Magnus Carlsen | 2823 | chsm8-player-carlsen | 17,561 | 0.554 → 0.569 | 0.798 | 2.969 → 2.915 | 1903 |
| 2 | Hikaru Nakamura | 2792 | chsm8-player-nakamura | 19,997 | 0.540 → 0.572 | 0.797 | 3.039 → 2.862 | 1850 |
| 3 | Fabiano Caruana | 2784 | chsm8-player-caruana | 5,513 | 0.545 → 0.556 | 0.788 | 2.960 → 2.938 | 1902 |
| 4 | Javokhir Sindarov | 2782 | chsm8-player-sindarov | 1,371 | 0.557 → 0.567 | 0.794 | 2.959 → 2.897 | 1897 |
| 5 | Nodirbek Abdusattorov | 2780 | chsm8-player-abdusattorov | 5,356 | 0.544 → 0.549 | 0.782 | 2.967 → 2.995 | 1906 |
| 6 | Wesley So | 2770 | chsm8-player-so | 5,300 | 0.547 → 0.564 | 0.793 | 2.962 → 2.969 | 1910 |
| 7 | Praggnanandhaa R | 2763 | chsm8-player-praggnanandhaa | 7,467 | 0.543 → 0.550 | 0.776 | 3.016 → 3.008 | 1871 |
| 8 | Vincent Keymer | 2761 | chsm8-player-keymer | 10,906 | 0.538 → 0.567 | 0.789 | 3.073 → 2.980 | 1887 |
| 9 | Wei Yi | 2758 | chsm8-player-wei-yi | 2,869 | 0.552 → 0.555 | 0.780 | 3.007 → 3.015 | 1895 |
| 10 | Alireza Firouzja | 2757 | chsm8-player-firouzja | 19,999 | 0.555 → 0.559 | 0.785 | 2.962 → 2.960 | 1884 |
Bonus: historical players
Four classic players, added because they shaped chess history and are widely known. Their games are classical over-the-board games from before online chess, so there is less data and much older play.
| Player | Peak FIDE | Why | Model | Unique games | Move-match base → fit | CE base → fit | Model Elo |
|---|---|---|---|---|---|---|---|
| Garry Kasparov | 2851 (1999) | 13th World Champion; world #1 for most of 1984–2005 | chsm8-player-kasparov | 1,727 | 0.533 → 0.539 | 3.153 → 3.103 | 1900 |
| Bobby Fischer | 2785 (1972) | 11th World Champion; won the 1972 "Match of the Century" against Spassky | chsm8-player-fischer | 660 | 0.572 → 0.567 | 2.969 → 2.891 | 1875 |
| Anatoly Karpov | 2780 (1994) | 12th World Champion (1975–85); one of the most successful tournament players ever | chsm8-player-karpov | 3,128 | 0.519 → 0.543 | 3.159 → 3.043 | 1905 |
| Judit Polgar | 2735 (2005) | strongest woman player in history; world #8 overall at her peak | chsm8-player-polgar-judit | 1,459 | 0.530 → 0.539 | 3.181 → 3.099 | 1887 |
Small corpora (Fischer: 660 games) give noisier fits: Fischer's top-1 move-match drops slightly while his CE improves.
Usage
The checkpoint is a PyTorch dict (model_state_dict, cfg) for the CHSM8 decoder (factored move head over
(kind, src, dst, piece, promo)). Moves are fed as factored rows, BOS first; there is no text input, and play picks the
best legal move by summed factored log-probability. The model classes and the loading and play code will be released later with the project code.