Solving poker in custom WebGPU kernels

(phulin.me)

30 points | by patrickhulin 6 hours ago ago

9 comments

  • noname123 29 minutes ago

    QQ for all the pro players out there, for 6 or 9-ring poker, can solvers really solve every scenario - or there is simply too many permutations.

    The other question I have is how do human players adapt to GTO play now? Like in other games, humans have adapted to novel strategies - I'm curious for poker whether there's ways to exploit GTO solvers (ie, if you put your opponent bot on the GTO range and chase the fat tails). And is the poker community's fair play detection algorithm good enough to catch players who use solvers like chess community - or it's easy to evade by making a few deviations. Much thanks!

    • fierycatnet 7 minutes ago

      Not a pro player but I do well enough recreationally in local clubs when I play. GTO in my experience is really not a threat. Most players dont play GTO and against bad players GTO is not a factor. I've played with solvers before but I see no value for my current stakes. Nor do I feel that GTO is important. Perhaps in computer simulations but... its all theoretical and just fun and games. You'd need to play HU against Phil Galfond if you want GTO to be useful but how many players will be challenged like that?

    • ryanto 18 minutes ago

      - for 6 and 9 handed, yes they can solve any 2 player scenario you give it. you solve to some expected loss (like 1%), so it's not a perfect solve. you can solve lower, but it takes longer. in theory there are multiway hands that are unsolvable.

      - human players adapt to GTO by leaving the game. you are not beating a solver. solvers by their very design are unexploitable.

      - sites can catch players that use solvers if they care to. in my experience there are sites that care and others that dont, depends on the market. regs know who is cheating.

  • ryanto 32 minutes ago

    Wow, this is amazing, great read too. I have a few "test spots" I like to use with solvers and yours nailed them.

    >A more modern approach instead “re-solves” each spot to a limited search depth and uses a neural network as an approximation function at the depth cutoff.

    This sounds very interesting, I'd love to hear more about it. A few years ago a wrote a solver that worked by reducing the entire game tree. It was slow, and couldn't do preflop. It sounds like these re-solves allow preflop solves with needing a massive tree?

  • patrickhulin 6 hours ago

    I wanted to build a poker solver that I could host for ~free. This meant running client-side, where the best browser technology is WebGPU. The tensor library I wanted did not exist, but in the LLM era we sometimes don't need libraries at all. I had Codex turn my thousands of lines of PyTorch code into custom WebGPU kernels with parity tests. Codex then spent days optimizing those kernels.

    You can use the solver at https://holdem.computer, and the source is at https://github.com/phulin/poker2.

  • mncalc7 an hour ago

    You should check out https://jax-js.com/. It has parity with quite a large surface area of Jax, and compiles natively in the browser to wasm and webGPU, entirely written in JS.

    • patrickhulin 2 minutes ago

      Oh, this is neat! I knew posting something that claimed a library didn't exist would inevitably surface one :)

  • bluecalm an hour ago

    >>A more modern approach instead “re-solves” each spot to a limited search depth and uses a neural network as an approximation function at the depth cutoff. Both tabular (e.g. Piosolver) and neural (e.g. GTOWizard) commercial solvers are available.

    PioSOLVER doesn't use any abstractions or cutoff functions. It just solves the whole game without any simplifications other than allowed bet sizes. The cost is rather large RAM requirements. The advantages is that it's very precise and produces exact results for every hand (it doesn't bundle them).

  • beepbooptheory an hour ago

    Man was really excited for some poker-themed computer science blogging like back in the day but really I guess shoulda known huh :/.