MLX Engine Python API¶
MLX Engine Python API 是 LM Studio 开发的一套用于大语言模型(LLM)推理的高层 Python 接口。它基于 Apple 的 MLX 框架构建,专门针对 Apple Silicon (M系列芯片) 硬件进行了优化^[001-TODO__mlx-engine.md]。
该 API 提供了模型加载、流式文本生成、结构化输出以及视觉-语言模型(VLM)推理等功能,并集成了推测解码(Speculative Decoding)、KV 缓存量化等高级优化技术^[001-TODO__mlx-engine.md]。
核心架构¶
MLX Engine 采用模块化设计,根据模型类型的不同,主要有两条处理路径^[001-TODO__mlx-engine.md]:
双路径设计¶
系统根据模型的 config.json 中的 model_type 自动选择初始化路径^[001-TODO__mlx-engine.md]:
- ModelKit:
- 用于处理标准的文本模型或拥有专用视觉插件(Vision Add-on)的视觉模型。
- 全功能支持:支持 KV 缓存量化、跨提示词缓存和推测解码^[001-TODO__mlx-engine.md]。
- VisionModelKit:
- 用于处理通用的视觉模型(基于
mlx-vlm)。 - 兼容性广:适用于大多数视觉模型,但不支持量化、缓存复用和推测解码等高级特性^[001-TODO__mlx-engine.md]。
- 用于处理通用的视觉模型(基于
关键组件¶
- CacheWrapper:负责 KV 缓存的管理与增量更新,实现了跨提示词缓存1,允许在不同会话间复用计算结果^[001-TODO__mlx-engine.md]。
- Vision Add-ons:位于
mlx_engine/model_kit/vision_add_ons/,提供针对特定模型架构(如 Gemma3, Pixtral, Mistral3)的专用处理逻辑^[001-TODO__mlx-engine.md]。
核心 API 用法¶
1. 加载模型¶
使用 load_model 函数加载模型。对于支持高级优化的模型,可以配置 KV 缓存参数^[001-TODO__mlx-engine.md]。
from mlx_engine import load_model
model_kit = load_model(
"mlx-community/Meta-Llama-3.1-8B-Instruct-4bit",
max_kv_size=4096, # 最大 KV cache 大小
kv_bits=None, # KV 缓存量化位数 (None=不量化)
kv_group_size=64, # KV 缓存量化组大小
)
2. 文本生成 (流式)¶
使用 create_generator 进行流式推理。它支持采样参数(如 temp, top_p)和结构化输出约束^[001-TODO__mlx-engine.md]。
from mlx_engine import create_generator, tokenize
prompt_tokens = tokenize(model_kit, "你好,世界")
for result in create_generator(
model_kit,
prompt_tokens,
temp=0.7,
top_p=0.9,
stop_strings=["结束"],
json_schema='{"type":"object",...}', # 结构化输出 (基于 Outlines)
):
print(result.text, end="", flush=True)
3. 视觉模型推理¶
视觉模型的生成需要传入 Base64 编码的图像数据^[001-TODO__mlx-engine.md]。
model_kit = load_model("mlx-community/pixtral-12b-4bit")
for result in create_generator(
model_kit,
prompt_tokens,
images_b64=["base64_encoded_image_string..."],
):
print(result.text)
高级功能¶
推测解码¶
通过加载一个小型的 Draft Model(草稿模型)来加速主模型的推理速度^[001-TODO__mlx-engine.md]。
from mlx_engine import load_draft_model, is_draft_model_compatible
# 检查兼容性并加载
if is_draft_model_compatible(model_kit, "path/to/draft-model"):
load_draft_model(model_kit, "path/to/draft-model")
# 后续生成将自动利用草稿模型加速
KV 缓存量化¶
通过减少 KV Cache 的位宽(例如设置为 4bit 或 8bit)来显著降低显存占用,从而支持更长的上下文或更大的批处理大小^[001-TODO__mlx-engine.md]。
结构化输出¶
集成 Outlines 库,允许通过 JSON Schema 强制模型输出符合特定结构的 JSON 数据^[001-TODO__mlx-engine.md]。
限制与注意事项¶
- 视觉模型限制:使用通用
VisionModelKit加载的模型不支持 KV 缓存量化、跨提示词缓存和推测解码^[001-TODO__mlx-engine.md]。 - 已知 Bug:Qwen VL 系列模型(如
qwen2_vl)的视觉适配器当前存在 Bug,已被注释掉^[001-TODO__mlx-engine.md]。 - Python 版本:项目针对 Python 3.11 编译,其他版本可能存在兼容性问题^[001-TODO__mlx-engine.md]。
支持的模型¶
除了标准的文本模型外,API 明确支持以下视觉模型系列^[001-TODO__mlx-engine.md]:
- Llama-3.2-Vision (11B)
- Pixtral (12B)
- Qwen2-VL (7B)
- Llava-v1.6 (Mistral 7B)
Sources¶
001-TODO__mlx-engine.md
-
跨提示词缓存机制能够计算新 Prompt 与旧 Prompt 的公共前缀,仅对差异部分进行重新计算。 ↩