mizorewww/laya-mlx
Native MLX runtime for Laya typed decision models — 7–14 ms short decisions on M3 Max. No text generation, PyTorch, or cloud API.
Laya‑MLX – Apple Silicon 上での高速、型付き意思決定推論
何であるか – macOS Apple Silicon (Mシリーズ) GPU上で、Laya 系列の意思決定言語モデルを完全にローカルで実行できるPythonパッケージです。元の Convai Innovations チェックポイントを MLX(AppleのMetal加速Tensorライブラリ)に移植することで、PyTorch、🤗 Transformers、クラウド呼び出しを一切使わず、短い質問1件に対して15ms未満の遅延を実現します。
コアコンセプト
| コンセプト | Laya‑MLXの実装方法 |
|---|---|
| 型付き意思決定 | 自由なテキスト生成ではなく、1回のフォワードパスで構造化された回答(選択肢、スコア、バイナリ「noul」)を返します。これにより、トークン単位のデコードを回避し、決定論的で低遅延の出力を得られます。 |
| 双方向エンコーダ | 入力(状態+質問)はModernBERT‑largeまたはmmBERT‑baseバックボーンでエンコードされ、専用ヘッドが要求された型の確率を生成します。 |
| ローカル、ランタイム依存なし | すべての推論はMLX内で実行されます。トークン化にはHugging FaceのRustトークナイザーがwheelにコンパイル済みです。PyTorch/Transformersのバイナリは不要です。 |
| Apple‑silicon最適化 | オプションの compile=True、プレフィックスキャッシュ、パディングテクニックにより、M3 Maxで約6%の速度向上が得られます。また、GPU用に事前に変換されたFP16チェックポイントも同梱されています。 |
クイックスタート(30秒)
pip install laya-mlx # コアライブラリ
pip install 'laya-mlx[demo]' # オプションのデモユーティリティ
import laya_mlx as laya
agent = laya.load("aac6fef/laya-mlx") # 最初の使用時にFP16チェックポイントをダウンロード
result = agent.predict(
"I was billed twice. Please refund the duplicate.",
{
"department": {
"type": "choice",
"instructions": "Who should handle this?",
"criteria": ["billing", "technical", "sales"]
}
},
)
print(result["answers"]["department"]) # → "billing"
macOS 14+、Python 3.11+、およびM1–M3のすべてのApple‑silicon GPUで動作。最初の呼び出しでモデルをダウンロードし、以降は完全にオフラインで動作します。
利用可能なチェックポイント
| モデルID(ロード) | エンコーダ | パラメータ数 | コンテキスト | 言語 |
|---|---|---|---|---|
aac6fef/laya-mlx |
ModernBERT‑large | 421 M | 512 | 英語 |
aac6fef/laya-multilingual-mlx |
mmBERT‑base | 322 M | 1 024 | 多言語 |
aac6fef/laya-typed-decisions-mlx |
ModernBERT‑large | 421 M | 1 024 | 英語(型付き意思決定ワークフロー) |
上記3つはすべて、上流のConvai Innovations重みの正確なFP16変換であり、Hugging Faceにホストされています。また、laya.loadに元のHub ID(convaiinnovations/layaなど)を指定することも可能です。ライブラリが自動でダウンロードし、変換します。
パフォーマンス(M3 Max、FP16)
| メトリクス | 英語(Laya 421M) | 多言語(Laya‑multilingual 322M) |
|---|---|---|
| 1件の短い質問の中央遅延 | 13.4 ms | 7.4 ms |
| 95百分位遅延 | 13.9 ms | 7.8 ms |
| 50件バッチ(バッチサイズ64)のスループット | 146 q/s | 395 q/s |
| 1リクエストあたりのピークGPUメモリ | 944 MiB | 688 MiB |
最適化済み laya‑snake --optimize --max‑speed |
75.4 move/s(eagerより約6.5%高速) |
数値にはトークン化、テンソル準備、推論、キャリブレーション、結果フォーマットが含まれます。モデルロードは除外されています。
主要API表面
agent = laya.load(
checkpoint, # HFリポジトリIDまたはローカルパス
dtype="float16", # または "float32", "bfloat16"
batch_size=16, # 1回のフォワードパスあたりの最大質問数
device="gpu", # "cpu"も利用可能(大幅に遅い)
compile=False, # 速度向上のためMLXコンパイルを有効化
cache_prompts=False, # 再利用のためにトークン化されたプロンプトを保持
)
# 推論 – `system_one`はエイリアス
answers = agent.predict(state, questions)
*stateは単純な文字列、JSON辞書、または過去のメッセージのリストが可能です。questionsは各エントリが希望する回答型(choice, score, noul)を記述する辞書です。戻り値には以下が含まれます:
answers(構造化された結果)action.act_probability(ヘッドの生確率)- トークン使用統計
- 上流モデルと同様に小数第4位まで丸められます。*
ルーター補助
言語固有のチェックポイントを自動選択する必要があるアプリケーション向け:
router = laya.Router(dtype="float16", max_loaded=2)
out = router.predict(state, triage_questions())
print(out["routing"]) # 例:"multilingual"
ルーターは最大max_loaded個のモデルを常駐させることができ、Router(preload=True)で事前にロードできます。
コマンドラインユーティリティ
| コマンド | 目的 |
|---|---|
laya-mlx predict … |
JSONファイルまたはインライン文字列からの単一推論を実行。 |
laya-mlx convert … |
Hugging FaceチェックポイントをMLX互換ディレクトリ(safetensors + config)に変換。 |
laya-snake |
モデルが各動きに呼び出される、インタラクティブなターミナルデモ(クラシックなSnakeゲーム)。--optimizeでコンパイル済み高速パスを使用。 |
すべてのCLIはlaya.loadで使用されるのと同じ--model引数を受け入れます。
開発とテスト
- 依存関係:プロジェクトは再現可能な環境に
uvを使用しています。uv sync --extra devでテスト、ベンチマーク、リファレンスの追加を取得します。 - テスト:ユニットテストは小さなランダムモデル上でMLX実装と元のTransformersヘッドを比較。フルチェックポイント検証ではトークン化、キャリブレーション済み確率、決定論的再現、メモリ成長をチェックします。
- ベンチマーク:
benchmarks/runは遅延/スループットを測定。結果はbenchmarks/resultsに保存され、BENCHMARKS.mdで要約されます。 - 研究:
docs/フォルダにはパフォーマンスボトルネックの詳細レポートと、10倍高速化のアイデア(数学的、工学的、実装レベル)が含まれます。スクリプトはexperiments/にあります。
ライセンスとクレジット
- コード – Apache‑2.0(
LICENSEを参照)。 - 重み – 元のLaya重みは© Convai Innovations。上記のHugging Faceリポジトリ経由で同じライセンスで再配布されています。
- 移植 – MLX再実装と周辺ユーティリティはmizorewwwが作成し、上流の
NandhaKishorM/layaリポジトリ(MITスタイルのクレジットはNOTICEに記載)の一部を改変しています。
だれが使うべきか?
- プロダクトチーム:決定論的で低遅延のルーティングや分類をデバイス上で必要とする(例:チケットトライアージ、緊急度スコアリング、バイナリポリシー確認)。
- 開発者:クラウドへのデータ送信を避けたいmacOS専用AIアシスタントやエッジサービスを開発する。
- 研究者:Apple GPU上でMLXをPyTorch/Transformersと比較し、さらなる高速化技術を探索したい。
TL;DR – Laya‑MLXはApple Silicon上でLaya意思決定モデルの即時実行可能な高性能推論ライブラリを提供し、クリーンなPython API、ターミナルSnakeデモ、変換・ベンチマーク・モデルカード公開のためのフルスタックツールを備えています。
これを取り上げた記事
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト