SHARINGAN-2: the full-length Poker Sharingan blueprint
SHARINGAN-2 is blueprint C of the Poker Sharingan Pluribus reproduction (Brown & Sandholm, Science 2019) for 6-player
no-limit Texas hold'em, trained to the full 1.83e11 iterations. It is the successor of
SHARINGAN-1 (the same run at 2e10 iterations). Code, training and evaluation tooling:
https://github.com/markokraemer/poker-sharingan (Rust workspace, "library: custom": the weights are read by the Rust crates blueprint and bench).
The public arena's sharingan-1 track keeps SHARINGAN-1 as its opponent for the duration of the current competition, so scores stay comparable.
Results
All numbers: 6-max, duplicate deals + AIVAT, mbb/game (1 mbb/game = 0.1 bb/100), 95% CI, 4M deals per format.
| test | 3 + 3 seats | 1 SHARINGAN-2 vs 5 | 5 vs 1 (the other side's score) |
|---|---|---|---|
| SHARINGAN-2 vs SHARINGAN-1 (C@2e10) | +5.09 +- 1.16 | +8.60 +- 1.89 | -7.64 +- 1.88 |
| SHARINGAN-2 vs C@4.77e10 (strongest earlier checkpoint) | +1.97 +- 0.97 | +3.76 +- 1.57 | -1.95 +- 1.58 |
| test | result |
|---|---|
| trained best response (12M iterations, every seat) vs SHARINGAN-2 | the exploiter loses -247 +- 58 (SHARINGAN-1: -323 +- 62). A true best response cannot lose, so this run is far too short to measure exploitability: a sanity check that it finds no easy leak, not evidence of robustness |
| gauntlet, 6-max, vs nit / TAG / LAG / maniac / calling station / random | +125 +- 35 / +303 +- 56 / +933 +- 85 / +1,622 +- 99 / +2,572 +- 118 / +4,004 +- 197 |
It is a 6-max blueprint: heads-up (2-max) play is out of distribution (it loses to the simple built-in bots there).
What is in this repository
| file | size | what it is |
|---|---|---|
sharingan-2.plcp.part-* |
169.9 GB | SHARINGAN-2: blueprint C after 1.83e11 iterations (PLCP1 compact, 14.5B infosets, medium bet sizes) |
buckets-200.tar |
0.28 GB | the 200-bucket card abstraction for postflop streets (same as SHARINGAN-1). Required |
SHA256SUMS.models, SHA256SUMS.parts |
checksums of the reassembled file and of every part |
Files are split into 25 GB parts for upload. Reassemble and check:
pip install -U huggingface_hub
hf download markokraemer/sharingan-2 --local-dir weights
cd weights && sha256sum -c SHA256SUMS.parts
cat sharingan-2.plcp.part-* > sharingan-2.plcp && sha256sum -c SHA256SUMS.models && rm sharingan-2.plcp.part-*
mkdir -p ../data && tar xf buckets-200.tar -C ../data # -> data/buckets-200/
Use it
From a clone of the repo (RUSTFLAGS="-C target-cpu=native" cargo build --release). The file is
memory-mapped: disk is required, RAM only makes it faster. Load it with the medium menu.
# inference server: POST /v1/act with a hand, get SHARINGAN-2's action (format: sharingan-1/serve/README.md)
./target/release/sharingan-serve --blueprint weights/sharingan-2.plcp --buckets data/buckets-200 --sizing medium --no-auth
# your own arena with SHARINGAN-2 as the house bot
ARENA_BLUEPRINT=$PWD/weights/sharingan-2.plcp ARENA_BUCKETS=tables:$PWD/data/buckets-200 ARENA_SIZING=medium ./target/release/sharingan-arena --port 8080
# the head-to-head above
./target/release/pluribus h2h --a weights/sharingan-2.plcp --sizing-a medium --b weights/sharingan-1.plcp --sizing-b medium \
--buckets data/buckets-200 --players 6 --deals 4000000 --threads 32 --warm --out h2h.json
Model details
- Game: 6-max no-limit hold'em, 100 bb stacks.
- Algorithm: parallel external-sampling Linear MCCFR with negative-regret pruning; the paper's schedule scaled to iterations. Run C, seed 2019, trained to 1.83e11 iterations (the paper's budget), on 64-core / 576 GB bare-metal servers, resumed across restarts from checkpoints.
- Abstraction: preflop lossless; 200 buckets per postflop street. Action menu
medium(must match at load time). - Real-time search is code, not weights (see SHARINGAN-1's card and the repo); the numbers above are blueprint against blueprint.
Limitations and risks
- Not evaluated against strong humans; exploitability is only bounded from below by one trained best response.
- Trained for 100 bb, 6-max. Off-menu bet sizes are handled by action translation, the main exploitable surface of this class of agents.
- A near-equilibrium bot is a weaker exploiter of weak opponents than adaptive bots.
- Dual use: a strong poker agent can be used to cheat on real-money sites, which prohibit bots. Do not use it for that.
Citation
@article{brown2019superhuman,
title = {Superhuman AI for multiplayer poker},
author = {Brown, Noam and Sandholm, Tuomas},
journal = {Science}, volume = {365}, number = {6456}, pages = {885--890}, year = {2019}
}