【免费下载链接】mlx-serve
Native LLM inference server for Apple Silicon. OpenAI + Anthropic API compatible. No Python. Zig backend, Swift frontend macOS app with chat, music, voice, video generation.
mlx-serve 是面向 Apple Silicon 的原生 LLM 推理服务器(兼容 OpenAI + Anthropic API,零 Python 依赖)。通过它内置的LAN 共享能力,你可以把大模型放在一台内存充裕的 Mac 上,让局域网里的其他 Mac 直接调用——不用配 IP、不用端口映射、不经过任何云服务。本教程用 3 步带你完成mlx-serve LAN 共享的 Bonjour 零配置,全程约 5 分钟。
整个功能由两个开关控制,默认全部关闭:
| 角色 | 参数 | 作用 |
|---|---|---|
| 🖥️ 共享端(模型所在的 Mac) | --lan-share all或--lan-share <模型ID,…> | 发布 Bonjour 服务,仅开放推理接口 |
| 💻 使用端(想用模型的 Mac) | --lan-discover | 自动发现网络内对端及其模型,透明代理请求 |
工作原理:Bonjour 自动发现,为什么不用配 IP
mlx-serve 的 LAN 共享复用了 macOS 原生的Bonjour(mDNS)机制,实现位于 src/lan.zig,分为互相独立的两半:
- 发布(SHARE):共享端向局域网注册一个
_mlxserve._tcp服务,实例名默认取主机名(可用--lan-name自定义); - 发现(DISCOVER):使用端扫描局域网,找到对端后拉取其
/v1/models,并把远程模型以模型ID@对端名的格式镜像进本地模型列表(例如gemma-4-e4b-it-4bit@studio-mac)。
客户端请求远程模型时,mlx-serve 会把它逐字节透明代理给对端 Mac(流式 SSE 也原样透传),对端模型按需在主机上冷加载。只暴露推理面(对话、embeddings、图像/语音/音乐/视频/3D 生成),模型装卸、指标、状态页等管理接口仍仅限本 Mac。
在 MLX Serve 图形界面中,设置 ▸ LAN Sharing可按模型逐个勾选共享;对端的共享模型会以模型 · 对端的形式出现在模型选择器和托盘菜单中,聊天与各类生成面板直接可选。
第 1 步:在模型所在的 Mac 上开启共享
假设大模型放在一台 M 系列 Mac 上,命令行直接启动:
mlx-serve --serve \ --model-dir ~/.mlx-serve/models \ --lan-share all \ --lan-name studio-mac--lan-share all共享全部模型;也可以传逗号分隔的 ID 只共享部分,如--lan-share gemma-4-e4b-it-4bit(目录名或org/name均可匹配);--lan-name studio-mac是其他 Mac 看到的名字,不填则默认取主机名;- 默认端口
11234,默认绑定0.0.0.0(局域网可达),完整参数见 docs/cli.md。
用图形界面的话:打开设置 ▸ LAN 共享,启用后勾选要分享的模型即可。
第 2 步:让其他 Mac 自动发现模型
在使用端 Mac(本机没有模型、或想复用别人大模型)上加一个发现开关:
mlx-serve --serve --model-dir ~/.mlx-serve/models --lan-discover不需要任何 IP 或端口配置——两台 Mac 通过 Bonjour互相发现。十秒内,远程模型就会出现在使用端的/v1/models中,ID 形如模型ID@studio-mac,并带有lan_peer标记。
💡 这一步是真正的零配置:DHCP 换 IP、重启网络,共享链路都会自动重新收敛,无需人工干预。
第 3 步:像调用本地模型一样调用它
调用方式与 OpenAI API 完全一致,只是模型名写成模型ID@对端名:
curl http://localhost:11234/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"gemma-4-e4b-it-4bit@studio-mac", "messages":[{"role":"user","content":"你好"}]}'流式("stream": true)、Claude Code、Ollama 兼容客户端指向localhost都能直接用上对端的大模型;/v1/load-model、/v1/unload-model对远程模型返回成功空操作,无需处理。
验证 LAN 共享是否生效
- 使用端:
curl http://localhost:11234/v1/models,应出现@studio-mac后缀的模型条目; - 共享端:日志出现
[lan] peer "…" at x.x.x.x:11234 shares N models; - 实测一问:对远程模型发一条对话,能看到 token 实时流回。
完整自动化流程可参考 tests/test_lan_share.sh:发现 → 远程对话(流式 + 非流式)→ 装卸空操作 → 管理接口 403 边界。
安全边界:LAN 共享到底暴露了什么
mlx-serve 把局域网共享设计成"默认安全":
- ✅ 对局域网开放:
/health、/v1/models、对话/completions/messages/responses/embeddings 及各媒体生成接口; - ❌ 局域网客户端永远403:模型装卸、
/metrics、状态页等管理接口; - 🔁 经
@peer隧道的请求不会多级跳转,杜绝代理环; - ⚠️ 发给共享模型的提示词会在托管 Mac 上以明文参与计算(设置页有相应提示)——建议只在受信任的家庭/办公网络内共享;
- 想再加一道门槛,可搭配
--api-key:localhost 请求不受影响,非本地请求必须带密钥。
常见问题:LAN 共享不生效怎么办
| 症状 | 原因与处理 |
|---|---|
| 看不到远程模型 | 确认两台 Mac 在同一 Wi-Fi;macOS 首次运行会弹出"允许访问本地网络",需点允许;使用端必须带--lan-discover |
| 启动提示 "matched no models" | --lan-share列表没有匹配到任何模型,核对模型 ID(目录名或org/name) |
| 请求报 "no longer shares" | 对端活着但确实没共享该模型,错误信息会如实说明,无需等待 |
| 对端 Mac 重启后请求 | 代理会等待重新发现再响应,不会立刻误报 404;纯共享端(未开发现)会提示 "discovery is off" 而不是误导性的"对端离线" |
| 首次请求偏慢 | 模型在托管端按需冷加载,属正常现象 |
共享调用的速度有多快
LAN 共享只是一层透明代理,不引入调度排队,实际速度完全取决于托管端的 GPU。mlx-serve 在同一台 Apple Silicon 上解码可达239 tokens/s,多会话并发叠加 MTP 投机解码还能进一步提升吞吐:
参考资料
- CLI 与参数文档:docs/cli.md · docs/zh-CN/cli.md
- FAQ(含"多台 Mac 能否共享模型"一节):docs/faq.md · docs/zh-CN/faq.md
- 图形界面指南:docs/app.md
- LAN 共享实现源码:src/lan.zig · 服务端路由门禁:src/server.zig
- 端到端集成测试:tests/test_lan_share.sh
【免费下载链接】mlx-serve
Native LLM inference server for Apple Silicon. OpenAI + Anthropic API compatible. No Python. Zig backend, Swift frontend macOS app with chat, music, voice, video generation.
相关推荐
XO与ESLint共享配置生成器:创建个性化共享配置
XO与ESLint共享配置生成器:创建个性化共享配置 你是否还在为团队中代码风格不统一而烦恼?是否在多个项目间重复配置ESLint规则?本文将带你使用XO与ES
开发工具代码质量LintCLIIsaacLab Franka 抓取立方体,从跑通到调好:新手实操指南
IsaacLab Franka 抓取立方体,从跑通到调好:新手实操指南 IsaacLab Franka 抓取立方体:一台 Franka Panda 站在桌前,桌
人工智能强化学习机器人具身智能深度学习LAN Share:零配置跨平台局域网文件共享的革命性体验
LAN Share:零配置跨平台局域网文件共享的革命性体验 还在为设备间传输文件而烦恼吗?LAN Share这款跨平台局域网文件共享工具,以零配置自动发现和快速
桌面应用网络通信
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考