@LinQ444: jev 与 laya 的对比 https://github.com/mizorewww/laya-mlx…
摘要
Laya-MLX是一个开源工具,用于在Apple Silicon上本地运行类型化决策AI模型,具有低延迟,提供无需云API的原生推理。它包括基准测试,显示在M3 Max等设备上的快速性能。
查看缓存全文
缓存时间: 2026/09/21 03:32
jev 与 laya 的对比 https://t.co/qKMvbIgqZs https://t.co/b1Ze6j6FWO
mizorewww/laya-mlx
来源:https://github.com/mizorewww/laya-mlx
Laya-MLX
Laya MLX 玩贪吃蛇——真实的决策,原始的速度
开放权重的类型化决策,原生运行在 Apple Silicon 上。
13.4 毫秒 是一个简短英文类型化决策的端到端中位数时间。使用多语言检查点时为 7.4 毫秒。零输出令牌。本地 MLX 推理,无需 PyTorch、Transformers 运行时或云端 API。
中文 (https://github.com/mizorewww/laya-mlx/blob/main/README.zh-CN.md) · 基准测试 (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md) · 贪吃蛇演示 (https://github.com/mizorewww/laya-mlx/blob/main/docs/SNAKE_DEMO.md) · Hugging Face 权重 (https://huggingface.co/aac6fef/laya-mlx)
该 GIF 是真实本地贪吃蛇运行的原始速度渲染。每一步都调用 Laya;可见的循环安全层可以纠正不安全的建议。上面的延迟数据是单独的 单问题 API 基准测试,并非三问题贪吃蛇循环的帧时间。观看 30 秒 MP4 (https://github.com/mizorewww/laya-mlx/blob/main/docs/assets/snake-demo.mp4) · 贪吃蛇速度和稳定性 (https://github.com/mizorewww/laya-mlx/blob/main/docs/SNAKE_BENCHMARKS.md)。
快速开始
pip install laya-mlx
import laya_mlx as laya
agent = laya.load("aac6fef/laya-mlx")
result = agent.predict(
"我被重复扣款了。请退还多付的款项。",
{
"department": {
"type": "choice",
"instructions": "谁应该处理这个问题?",
"criteria": ["billing", "technical", "sales"],
}
},
)
print(result["answers"]["department"])
需要 Apple Silicon,Python 3.11+,macOS 14+。首次加载会下载检查点;后续推理完全在本地进行。测试环境为 macOS 27.2,Python 3.12.13 和 MLX 0.32.2。该 MLX 版本提供了适用于 macOS 14、15 和 26 的轮子包;本地安装器选择了 26 的轮子包。未在此机器上测试其他旧版支持的 macOS 版本。
运行终端演示:
pip install 'laya-mlx[demo]'
hf download aac6fef/laya-multilingual-mlx
laya-snake
离线演示前请先下载。使用至少 104 × 35 单元格的终端。空格键暂停,↑/↓ 键改变速度,R 键重置,Q 键退出。laya-snake --max-speed 会为每一步进行全新决策,没有节奏控制。录制、控制和精确指标含义 (https://github.com/mizorewww/laya-mlx/blob/main/docs/SNAKE_DEMO.md)。
laya-snake --optimize --max-speed 启用了经过测试的编译和前缀复用路径:在 2,400 步中达到 75.40 步/秒,在配对的 M3 Max 测试中零死亡且有 2 次可见的安全干预。这比其同次运行的急切模式控制约快 6.5%。游戏玩法、性能和正确性证据 (https://github.com/mizorewww/laya-mlx/blob/main/docs/SNAKE_OPTIMIZATION.md)。
M3 Max 上的性能
| FP16, 端到端 | Laya 421M | 多语言 322M |
|---|---|---|
| 单个简短问题, P50 | 13.42 毫秒 | 7.39 毫秒 |
| 单个简短问题, P95 | 13.92 毫秒 | 7.79 毫秒 |
| 50 个问题的吞吐量 | 146.8 问题/秒 | 395.0 问题/秒 |
| 峰值 MLX 内存占用,单个简短问题 | 943.6 MiB | 687.6 MiB |
M3 Max,40 GPU 核心,128 GiB 内存。计时包括提示准备、分词、张量、同步推理、校准和结果格式化;不包括模型加载。50 个问题的测量使用 batch_size=64;API 默认值为 16。不同的长度、问题数量和运行时条件会改变延迟。完整方法和每个计时样本 (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md)。
移植保真度:所有三个检查点在 FP32 和 FP16 下的 63/63 个验证问题上都与上游选择的答案匹配——378/378 次比较。每种配置还通过了 100 次重复的有限、确定性调用,测量到的活跃内存增长为零。这测量的是这些固定测试用例上的保真度,而非所有可能问题上的准确性。概率误差和验证 (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md#numerical-parity-and-stability)。
为什么需要类型化决策?
软件经常需要做出选择、标准评分或概率判断。Laya 在双向前向传播中回答这些受限问题,无需逐令牌解码或生成 JSON。
状态 + 类型化问题 → 双向编码器 → 决策头 → 概率
choice:在命名选项上的概率分布。score:在有序标准等级及其预期分数上的概率分布。noul:对于一个命题的 P(true)。
问题行是独立批处理的。它们的双向编码器表示同时依赖于状态和问题;此运行时并不声称只编码一次状态并在任意问题间复用其隐藏状态。
编码器、决策 Transformer、评分头和动作头都在 MLX 中运行。分词使用 Hugging Face 的 Rust 分词器。保留了原始预训练权重、问题格式、校准和输出模式。这是一个独立的 MLX 移植版本,并非 Convai Innovations 的官方发布。
支持的检查点
| 模型 | 编码器 | 参数量 | 上下文限制 | 用途 |
|---|---|---|---|---|
convaiinnovations/laya | ModernBERT-large | 421M | 512 | 英文 |
convaiinnovations/laya-multilingual | mmBERT-base | 322M | 1,024 | 多语言输入 |
convaiinnovations/laya-typed-decisions | ModernBERT-large | 421M | 1,024 | 上游类型化决策工作流 |
上下文包括指令、选项和状态。所有三个都使用原始权重、提示格式、温度校准和输出模式。此仓库提供推理和转换功能;RLCD 训练和微调仍在上游项目中。这是一个独立移植版本,非 Convai Innovations 官方发布。
预转换的 FP16 检查点已发布在 Hugging Face:
- aac6fef/laya-mlx (https://huggingface.co/aac6fef/laya-mlx)
- aac6fef/laya-multilingual-mlx (https://huggingface.co/aac6fef/laya-multilingual-mlx)
- aac6fef/laya-typed-decisions-mlx (https://huggingface.co/aac6fef/laya-typed-decisions-mlx)
使用 laya.load("aac6fef/laya-mlx") 直接加载这些,或使用上面的原始检查点 ID。每个发布的检查点都包含其模型卡、验证结果、来源、许可证和文件校验和。所有 36 个发布的文件都通过了严格的远程校验和验证;固定的修订版和权重哈希记录在 hub-publication.json (https://github.com/mizorewww/laya-mlx/blob/main/benchmarks/results/hub-publication.json) 中。
开发安装
gh repo clone mizorewww/laya-mlx
cd laya-mlx
uv sync --extra demo
uv run --extra demo laya-snake
或使用 pip install 'git+https://github.com/mizorewww/laya-mlx.git' 安装最新的 GitHub 版本。模型权重需单独下载,不包含在 Git 中。
Python API
import laya_mlx as laya
agent = laya.load("aac6fef/laya-mlx", dtype="float16")
result = agent.predict(
"我被重复扣款了。请今天退还多付的款项。",
{
"department": {
"type": "choice",
"instructions": "哪个团队应该处理这个请求?",
"criteria": {
"billing": "发票、付款、退款",
"technical": "错误和宕机",
"sales": "新购买",
},
},
"urgency": {
"type": "score",
"instructions": "这个请求有多紧急?",
"criteria": ["不紧急", "尽快", "关键"],
},
"refund": {
"type": "noul",
"instructions": "客户是否要求退款?",
},
},
)
print(result["answers"])
system_one 是 predict 的别名。状态可以是文本、JSON 字典或对话列表。choice 接受字典或唯一标签列表;score 返回预期的从零开始的评分等级;noul 返回 P(true)。结果保留上游的四舍五入到小数点后四位、action.act_probability 和令牌使用字段。
默认精度为 FP16。使用 dtype="float32" 以获得更接近的数值一致性。即使选择的标签一致,不同精度下的概率也可能略有不同;参见 BENCHMARKS.md (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md) 中测量的误差。可以请求 BF16,但它不包含在已发布的验证矩阵中。
batch_size=16 限制了每次前向传播的问题数量;更大的请求会分块处理。当内存允许时,可以增加它。device="gpu" 或 device="cpu" 显式选择设备;否则使用 MLX 的默认设备。
对于重复工作负载,加载 Agent 时可以选择启用 compile=True、pad_to_multiple=16 和 cache_prompts=True。前缀缓存限制为 128 个问题,并共享 CPU 状态分词,而每个问题仍然获得自己的编码器计算。编译有首次使用成本和形状特化;填充可能使某些工作负载变慢。所有三个选项默认禁用。测量的贪吃蛇消融实验和使用方法 (https://github.com/mizorewww/laya-mlx/blob/main/docs/SNAKE_OPTIMIZATION.md)。
agent = laya.load("./models/laya", dtype="float32", batch_size=32)
# 从上游捆绑的仓库中选择一个检查点:
multi = laya.load("convaiinnovations/laya", subfolder="multilingual")
# 固定 Hub 版本以确保可重现性:
agent = laya.load(
"convaiinnovations/laya",
revision="c5d78730f3493e4fe16d61507ef4b78eef7318cf",
)
加载会验证每个参数名称和形状。不支持的编码器和非默认 RoPE 缩放会明确失败。保留了 ModernBERT 的全局/局部注意力模式、包含的滑动窗口边界、不同的局部/全局 RoPE 基底以及第一层归一化行为。
语言路由和预设
from laya_mlx import Router, triage_questions
router = Router(dtype="float16", max_loaded=2)
result = router.predict({"message": "发票被重复扣款,请退款。"}, triage_questions())
print(result["routing"]) # multilingual
# 显式选择专门的检查点:
result = router.predict(state, questions, task="typed_decisions")
路由器、语言启发式方法、电子邮件助手和应用程序预设均改编自上游。Router(preload=True) 使所有三个检查点保持常驻;支持 attach、preload、unload、显式 lang= 和显式 model=。类型化决策工作流检测仍为可选。移植保留了模型限制:英文检查点不能替代多语言检查点,且置信度不能保证准确性。
命令行
uv run laya-mlx predict \
--model aac6fef/laya-mlx \
--state-file examples/state.json \
--questions examples/questions.json
uv run laya-mlx predict \
--model aac6fef/laya-multilingual-mlx \
--state '发票被重复扣款,请退款。' \
--questions examples/questions.json
导出 MLX 检查点
uv run laya-mlx convert \
--model convaiinnovations/laya \
--dtype float16 \
--output models/laya-mlx-fp16
uv run laya-mlx predict \
--model models/laya-mlx-fp16 \
--state-file examples/state.json \
--questions examples/questions.json
导出包含 model.safetensors、编码器和代理配置、分词器文件和 mlx_config.json。不会覆盖现有的输出目录。这是参数名称/数据类型转换,而非量化或重新训练。源检查点已存储 FP16 权重;选择 FP32 增加的是算术精度,而非源权重的精度。
测试和基准测试
uv sync --extra dev --extra reference --extra benchmark --extra demo
source .venv/bin/activate
gh repo clone NandhaKishorM/laya .upstream
git -C .upstream checkout 6a5819129eb220570792e417e49723d697efd76f
pytest -q
python -m benchmarks.download
python -m benchmarks.validate --repeats 100
python -m benchmarks.run --iterations 50 --warmup 5
python -m benchmarks.accuracy --per-class 64
python -m benchmarks.report
按顺序运行 GPU 测量。单元测试使用小型随机模型,并包括与 Transformers 和固定的上游决策头的直接比较。真实的检查点验证测试分词、logits、校准概率、重复输出和活跃内存增长。基准测试在全新进程中运行每个后端/检查点,并将每个计时样本存储在 benchmarks/results (https://github.com/mizorewww/laya-mlx/blob/main/benchmarks/results) 中。完整报告 (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md) 解释了计时边界和精度差异。
GitHub Actions 在 macOS arm64 运行器上运行小型模型 CPU 测试。完整的检查点 GPU 基准测试在本地测量,不包含在托管 CI 中。
性能研究
性能研究包括数学分析和独立本地实验:
- 初始性能研究 (https://github.com/mizorewww/laya-mlx/blob/main/docs/PERFORMANCE_RESEARCH.md):实现瓶颈、MLX 内核分发和受控实验计划。
- 进一步实现 10 倍加速的数学研究 (https://github.com/mizorewww/laya-mlx/blob/main/docs/MATH_10X_RESEARCH.md):算术预算、条件带宽限制、真实权重谱、精确复用和更小模型设计。
- 工程研究 (https://github.com/mizorewww/laya-mlx/blob/main/docs/ENGINEERING_10X_RESEARCH.md):测量的编译、量化、最终头选择、自定义 Metal 内核和代表性矩阵乘法。
experiments/ (https://github.com/mizorewww/laya-mlx/blob/main/experiments) 包含研究脚本及其原始测量数据。已发布运行时的性能和验证结果在 BENCHMARKS.md (https://github.com/mizorewww/laya-mlx/blob/main/BENCHMARKS.md) 中;每个实验变体都有其自己的计时和正确性结果。
当前研究不支持使用相同检查点进一步实现普遍的 10 倍加速。选定的案例显示约 1.03–1.08 倍的配对中位数加速;工程报告给出了不确定性区间、量化保真度结果和自定义 Metal 内核测量结果。
要准备发布用的模型卡和经过验证的导出,请安装参考依赖项并运行:
python -m scripts.prepare_hub --account YOUR_HF_USERNAME
hf upload YOUR_HF_USERNAME/laya-mlx models/hub/laya-mlx . --exclude '.cache/*'
准备脚本会将每个导出的张量与其原始 FP16 源进行比较。以相同方式上传其他两个准备好的文件夹,然后使用 hf cache verify REPO_ID --local-dir EXPORT_PATH 检查远程文件。
致谢和许可
Apache-2.0;请参阅 LICENSE (https://github.com/mizorewww/laya-mlx/blob/main/LICENSE) 和 NOTICE (https://github.com/mizorewww/laya-mlx/blob/main/NOTICE)。Laya 及其预训练权重由 Convai Innovations 和上游贡献者提供。提示构建、输出格式化、语言路由、电子邮件工具和预设改编自 NandhaKishorM/laya (https://github.com/NandhaKishorM/laya) 的提交 6a5819129eb220570792e417e49723d697efd76f。神经网络架构遵循 Laya 和 Hugging Face ModernBERT 在 MLX 中重新实现。
相似文章
@mizorewww: 推出比Jev快50倍的版本,在您的设备上运行:laya-mlx!内存占用最高仅1G……
介绍laya-mlx,这是一个使用MLX优化的开源分类系统,适用于Apple Silicon,提供比Jev快50倍的性能,最大内存使用仅1G,并通过实时贪吃蛇游戏演示进行展示。
Laya (OS Jev) 在 Mac M4 CoreML 离线运行(每秒45次决策)
Laya 模型使用 CoreML 在苹果的 M4 芯片上离线运行,推理速度达到每秒45次决策。
@LinusEkenstam: 相当重要的进展。比MLX-LM推理速度快1.35倍,在预填充阶段速度快1.23倍,能够从内部选择混合选项。
Perplexity已经开源了Lily,这是一个针对Apple Silicon优化的本地推理引擎,专门用于Qwen3.6-35B-A3B模型,实现了比MLX-LM快1.35倍的推理速度。
@cevenif: 用苹果电脑跑本地大模型的朋友,有个工具值得盯上——Rapid-MLX。它在 M 系列芯片上的推理速度比 Ollama 快 2 到 4 倍,因为它是直接基于苹果的 MLX 框架开发的,对芯片架构的压榨更彻底。 几个关键点: KV 缓存裁剪加…
Rapid-MLX 是一个针对苹果 M 系列芯片优化的本地大模型推理工具,基于 MLX 框架开发,推理速度比 Ollama 快 2 到 4 倍,支持多种模型、工具调用及 OpenAI API 兼容接口。
jundot/omlx
oMLX 是一个用于在 Apple Silicon Mac 上进行优化 LLM 推理的新开源工具,具备持续批处理和分层 KV 缓存功能,并通过菜单栏应用进行管理。