madewithlaya

Catalog / Tools & apps

0093GitHub

Fine-tuning the 421M Laya for real-time Tetris placements, with reproduction guide

The game enumerates placements with their holes, heights and clears; Laya picks one from text. The teacher is a board-evaluation formula, not Jev. Walkthrough video in Japanese.

1,200 training and 200 validation boards from fixed seeds.

hama-jp/laya-tetris-finetuningREADME ↗
# Laya Tetris Fine-Tuning

Fine-tuning a 421M decision model to select placements in a real-time falling-block simulator.

Jevのように「状態と選択肢を受け取り、判断を返す」役割を、公開モデル **Laya** で試した実験です。Jevの重みや内部実装を複製したものではありません。教師はJevではなく、下記の盤面評価式です。

紹介動画: https://youtu.be/SUyEc48b_HQ

## 何を学習するか

ゲーム側が置ける位置を列挙し、置いた後の穴・高さ・消去数などを計算します。モデルはテキストで渡された候補から1つを選びます。画面画像から操作を学習する実験ではありません。

LayaはModernBERT-largeのエンコーダーと2層のTransformer判断ヘッドを持つ約421Mパラメーターのモデルです。文章を逐次生成せず、候補の確率分布を1回の前向き計算で返します。

教師の評価式は次の通りです。

```text
score = 3 × 消去ライン数 − 穴の数 − 0.1 × 各列の高さの合計
        − 0.3 × 隣接列の高さの差の絶対値の合計 − 50 × ゲームオーバー
教師分布 = softmax(score / 0.3)
```

- 学習盤面のseed: 1000–1099、検証盤面: 1200–1219。
- 候補データを生成後、固定乱数で学習1,200件・検証200件を抽出。
- 入力上限1,280トークン、ヘッド側896。候補を末尾まで扱えるよう入力も調整。
- RLCD系の学習ループで4つのノイズ付き分布を作り、グループ内の基準報酬を使う方策勾配と教師分布へのsoft cross entropy(係数1.0)を組み合わせます。4回の実ゲームを回す意味ではありません。
- エンコーダーと判断ヘッドを更新するフルファインチューニングです。LoRAではありません。
- 12 epochs、micro batch 8、gradient accumulation 2。学習率はencoder 5e-5、head 2e-4。
- 学習後の温度調整には同じ検証データを再利用しています。独立データでの較正性能を示すものではありません。

## 実験結果

RTX 3090 × 1、学習ループ約1,515秒(約25分、データ生成等は含まず)。検証200件で教師の最上位候補と一致した割合は84%。ゲームの勝率ではありません。

| 対局seed | 制限時間 | 消去ライン | スコア | 判断リクエスト | 判断処理の中央値 |
|---|---:|---:|---:|---:|---:|
| 423 | 180秒 | 22 | 9,100 | 64 | 約195ms |
| 424 | 180秒 | 23 | 9,100 | 65 | 約191ms |

両対局とも記録上の締切超過・古い判断の適用は0件でした。判断処理の時間はscorer呼び出しの区間で、候補を用意する処理全体は含みません。単発テストの約35msとは測定条件が異なります。

これは2つのseedでの実演です。学習と入力形式・入力予算を一緒に変更しているため、改善を学習だけの効果とは断定できません。過去のJev実演とも入力や実行環境が異なり、優劣を決める比較ではありません。

## 実行手順

Linux、Python 3.12、CUDA対応GPUを想定しています。元実験のPyTorchは2.14.0+cu126でした。使用するGPUとドライバーに合うCUDA版PyTorchを先に導入してください。学習はCUDA必須です。動画出力にはffmpegが必要です。

```bash
python3.12 -m venv .venv
source .venv/bin/activate
# 環境に適合するCUDA版PyTorchを導入後:
pip install -r requirements.txt
python download_model.py
python gen_tetris_data.py
python 

Also filed under Tools & apps

  1. 0005

    laya-mlx plays Snake at 60 decisions per second

    介绍比Jev快50倍,在你设备上跑的laya-mlx! 只在你的设备上占用最高1G内存 Laya是一个开源的类似于Jev的,基于文本输出概率的分类系统 我将其移植到MLX,并且做了一些性能优化! 视频中就是这个模型在我的本地M3Max上玩贪吃蛇 这个模型能够以每秒决策60次的速度玩贪吃蛇! https://t.co/31KGUiNunb

    @mizorewww · Tools & apps · free, local · 60 decisions/s

  2. 0112

    Laya on Axera AX650 and AX8850 edge NPUs, under 70 ms

    AXERA-TECH's conversion of all three Laya checkpoints for its edge AI chips, reported at latency under 70 ms per decision on AX650/AX8850.

    AXERA-TECH · Tools & apps · free, on-device · < 70 ms on AX650 / AX8850

  3. 0099

    laya-mcp (PerryLink): a warm sidecar that fixes Laya's silent truncation and constant noul

    MCP server plus HTTP sidecar: token-budget preflight that reports what would be cut, a persisted calibration store, structured errors, and a noul fix (P(true) 0.5 → 1.0).

    @PerryLink · Tools & apps · free, local

  4. 0097

    Gomoku against Laya-MLX: you play black, the model picks white's move from six candidates

    Local 15x15 Gomoku on Apple Silicon. Rules in Python, board in the browser, every AI move one real Laya choice over up to six candidates, probabilities shown. No Gomoku training.

    smile-magic · Tools & apps · free, local