MLX LM - 在Apple芯片上运行大语言模型的Python工具包


一、关于MLX LM

1、项目概览

MLX LM是一个Python工具包,支持在Apple芯片上使用MLX进行文本生成和大语言模型微调。


2、相关链接资源


3、功能特性

  1. Hugging Face Hub集成

    • 支持数千种LLM模型的单命令调用
    • 支持模型量化和上传到Hugging Face Hub
  2. 模型微调


二、安装配置

# pip安装
pip install mlx-lm

# conda安装
conda install -c conda-forge mlx-lm

三、使用指南

1、快速开始

文本生成

mlx_lm.generate --prompt "How tall is Mt Everest?"

交互式聊天

mlx_lm.chat

这将为你提供一个可与大语言模型(LLM)交互的聊天REPL环境。在REPL会话持续期间,聊天上下文会被保留。

mlx-lm中的命令通常支持命令行选项,用于指定模型、采样参数等配置。使用-h参数可以查看某个命令的可用选项列表,例如:

mlx_lm.generate -h

2、Python API

可以将 mlx-lm 作为模块使用:

from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Mistral-7B-Instruct-v0.3-4bit")

prompt = "Write a story about Einstein"

messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)

text = generate(model, tokenizer, prompt=prompt, verbose=True)

要查看所有参数的描述,您可以执行:

>>> help(generate)

查看生成示例了解如何更详细地使用该API。

3、量化模型,上传HF

mlx-lm包还提供了量化模型及可选上传至Hugging Face Hub的功能。

您可以通过Python API转换模型:

from mlx_lm import convert

repo = "mistralai/Mistral-7B-Instruct-v0.3"
upload_repo = "mlx-community/My-Mistral-7B-Instruct-v0.3-4bit"

convert(repo, quantize=True, upload_repo=upload_repo)

这将生成一个4位量化的Mistral 7B模型,并上传到代码库 mlx-community/My-Mistral-7B-Instruct-v0.3-4bit

默认情况下,转换后的模型还会保存在路径mlx_model中。

要查看所有参数的描述,您可以执行:

>>> help(convert)

4、流式生成

对于流式生成场景,请使用 stream_generate 函数。该函数会返回一个生成响应对象。例如:

from mlx_lm import load, stream_generate

repo = "mlx-community/Mistral-7B-Instruct-v0.3-4bit"
model, tokenizer = load(repo)

prompt = "Write a story about Einstein"

messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True
)

for response in stream_generate(model, tokenizer, prompt, max_tokens=512):
    print(response.text, end="", flush=True)
print()

采样

generatestream_generate 函数接受 samplerlogits_processors 关键字参数。

采样器可以是任何可调用对象,它接收一个可能批处理的 logits 数组并返回采样后的令牌数组。logits_processors 必须是一个可调用对象列表,这些对象以令牌历史和当前 logits 作为输入,并返回处理后的 logits。logits 处理器会按顺序应用。

mlx_lm.sample_utils 中提供了一些标准的采样函数和 logits 处理器。


5、命令行

你也可以通过以下方式在命令行中使用 mlx-lm

mlx_lm.generate --model mistralai/Mistral-7B-Instruct-v0.3 --prompt "hello"

这将从Hugging Face Hub下载Mistral 7B模型,并使用给定的提示生成文本。

要查看完整选项列表,请运行:

mlx_lm.generate --help

要通过命令行量化模型,请运行:

mlx_lm.convert --hf-path mistralai/Mistral-7B-Instruct-v0.3 -q

运行以下命令获取更多选项:

mlx_lm.convert --help

你可以通过为convert指定--upload-repo来上传新模型到Hugging Face。例如,要将量化后的Mistral-7B模型上传到MLX Hugging Face社区,可以执行以下操作:

mlx_lm.convert \
    --hf-path mistralai/Mistral-7B-Instruct-v0.3 \
    -q \
    --upload-repo mlx-community/my-4bit-mistral

模型也可以直接在 mlx-my-repo Hugging Face Space 中进行转换和量化处理。


6、长提示词与生成

mlx-lm 提供了一些工具来高效处理长提示词和生成内容:

  • 采用固定大小的旋转键值缓存机制
  • 支持提示词缓存功能

要使用旋转键值缓存,需传入参数 --max-kv-size n(其中 n 可为任意整数值)。

较小数值如 512 会显著减少内存占用,但会降低生成质量;

较大数值如 4096 或更高会占用更多内存,但能获得更好的生成质量。

通过缓存提示词可大幅加速相同长上下文在不同查询中的复用。

使用 mlx_lm.cache_prompt 方法即可缓存提示词,例如:

cat prompt.txt | mlx_lm.cache_prompt \
  --model mistralai/Mistral-7B-Instruct-v0.3 \
  --prompt - \
  --prompt-cache-file mistral_prompt.safetensors

然后使用缓存的提示词配合 mlx_lm.generate

mlx_lm.generate \
    --prompt-cache-file mistral_prompt.safetensors \
    --prompt "\nSummarize the above text."

缓存的提示词会被视为所提供提示词的前缀。还需注意,当使用缓存的提示词时,模型会从缓存中读取,因此无需显式指定模型。

提示词缓存功能也可在Python API中使用,以避免重复计算提示词。这在多轮对话或使用相同上下文的多次请求中非常有用。更多使用细节请参阅示例


四、支持模型

mlx-lm 支持数千种 Hugging Face 格式的大语言模型。

如果您想运行的模型不在支持列表中,请提交一个issue,或者更棒的是,直接提交一个 pull request。

以下是与此示例兼容的部分 Hugging Face 模型示例:


大多数 MistralLlamaPhi-2Mixtral 类型的模型应该可以直接运行。

对于某些模型(如 Qwenplamo),分词器需要启用 trust_remote_code 选项。您可以通过在命令行中传递 --trust-remote-code 来实现这一点。如果没有明确指定该标志,运行模型时终端会提示您是否信任远程代码。

对于 Qwen 模型,您还必须指定 eos_token。您可以通过在命令行中传递 --eos-token "<|endoftext|>" 来实现这一点。

这些选项也可以在 Python API 中设置。例如:

model, tokenizer = load(
    "qwen/Qwen-7B",
    tokenizer_config={"eos_token": "<|endoftext|>", "trust_remote_code": True},
)

大模型

注意事项: 此功能需要 macOS 15.0 或更高版本支持。

若模型体积相对于机器可用内存较大,运行速度可能会变慢。mlx-lm 会尝试通过固定模型及缓存所占用的内存来提升速度,但此功能需 macOS 15 或更高版本才能生效。

如果看到如下警告信息:

[WARNING] Generating with a model that requires …

则说明该模型在当前机器上运行可能较慢。若模型可完整载入内存,通常可通过提高系统固定内存上限来加速。要调整该限制,请设置以下 sysctl 参数:

sudo sysctl iogpu.wired_limit_mb=N

N 应大于模型大小的兆字节数,但小于机器的内存容量。


伊织 xAI 2025-06-24(二)

<think>好的,用户的问题是如何在Apple Vision Pro上使用LM Studio模型进行推理或部署。首先,我需要了解LM Studio是什么。LM Studio是一个允许用户在本地运行大型语言模型的工具,支持多种平台,包括Mac、Windows和Linux。根据提供的引用,LM Studio在Apple Silicon的Mac设备上可以通过ML Compute框架(即MLX)来优化性能。 接下来,用户提到的是Apple Vision Pro,这是苹果的增强现实设备,运行基于iOS的visionOS操作系统。因此,我需要考虑如何在这种设备上部署或调用LM Studio模型。首先,Vision Pro使用的是ARM架构,所以需要确认LM Studio是否有对应的visionOS版本或是否支持交叉编译。根据引用[1],LM Studio支持Apple Silicon的Mac设备,但visionOS可能有所不同。 可能的步骤包括:首先,检查LM Studio是否提供visionOS的SDK或API。如果没有,可能需要通过中间服务器的方式,将模型部署在Mac上,然后通过网络API让Vision Pro应用调用。另一种方法是将模型转换为Core ML格式,利用苹果的ML框架在本地运行,但这需要模型转换的工作。 此外,引用[2]提到LLaMA模型的本地推理和API集成,这可能对处理图像或视觉任务有帮助。如果用户需要在Vision Pro上进行图像相关的推理,可能需要结合视觉模型和语言模型,比如使用图像处理模块提取特征,再输入到LM Studio的模型中生成文本。 还需要考虑性能优化,因为移动设备的计算资源有限。使用MLX框架可能提升效率,但需要确认是否支持visionOS。此外,内存管理和模型压缩也是关键点,确保模型在Vision Pro上运行流畅。 总结可能的解决方案:1)通过API调用部署在Mac上的LM Studio模型;2)将模型转换为Core ML格式,直接在Vision Pro上运行;3)使用MLX框架优化本地推理。需要根据LM Studio的具体支持情况选择合适的方法,并处理模型转换和性能优化的问题。</think>要在Apple Vision Pro设备上调用LM Studio模型进行推理或部署,需分步骤实施: ### 一、环境准备 1. **模型格式转换** -LM Studio支持的模型(如LLaMA、NLLB-200等)转换为Core ML格式,使用苹果提供的$coremltools$工具包 - 验证模型是否支持visionOS的神经网络加速架构[^1] 2. **开发环境搭建** - 在Xcode中创建visionOS项目 - 集成ML Compute框架以实现Apple Silicon芯片的硬件加速 ```swift import CoreML import MLCompute func loadModel() -> MLModel? { let config = MLModelConfiguration() config.computeUnits = .all return try? MyLanguageModel(configuration: config) } ``` ### 二、部署方案选择 | 方案类型 | 延迟 | 隐私性 | 硬件要求 | |----------------|------|--------|----------------| | 本地推理 | 低 | 高 | Apple Silicon | | 云端API调用 | 中 | 中 | 网络连接 | | 边缘计算混合 | 可变 | 高 | 多设备协同 | ### 三、核心代码实现 1. **本地推理模块** ```swift func runInference(text: String) async -> String { let tokenizer = AutoTokenizer.from_pretrained("llama-3b") let input = tokenizer.encode(text) let prediction = try? await model.prediction(input: input) return tokenizer.decode(prediction?.output) } ``` 需注意内存管理,建议采用$MemoryMapper$技术降低峰值内存占用[^2] 2. **API调用方案** ```python from fastapi import FastAPI app = FastAPI() @app.post("/infer") async def infer(request: dict): response = requests.post("http://mac-server:5000/predict", json=request) return response.json() ``` ### 四、性能优化 1. 使用$MLX$框架的混合精度训练技术: $$ \text{Memory}_{\text{saved}} = \frac{3}{4} \times \text{FP32}_{\text{size}} $$ 2. 采用模型切片技术: $$ \text{Slice}_{\text{size}} = \frac{\text{VRAM}_{\text{available}}}{\text{Layer}_{\text{count}}} $$ ### 五、测试验证 1. 创建visionOS模拟器的单元测试用例 2. 使用XCTest框架进行压力测试: ```swift func testMemoryLeak() { autoreleasepool { let model = loadModel() measure(metrics: [XCTMemoryMetric()]) { model?.runInference(...) } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富婆E

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值