跳到内容

mlx-lm

Outlines 提供了与 mlx-lm 的集成,允许模型通过 mlx 库在 Apple Silicon 上快速运行。

安装

您需要在支持 Metal 的设备上安装 mlxmlx-lm 库才能使用 mlx-lm 集成。要快速入门,您也可以运行

pip install "outlines[mlxlm]"

加载模型

您可以通过传递 HuggingFace Hub 上仓库的名称来初始化模型。mlx-lm 支持的官方模型仓库是 mlx-community

from outlines import models

model = models.mlxlm("mlx-community/Meta-Llama-3.1-8B-Instruct-8bit")

这将把模型文件下载到 Hub 缓存文件夹,并将权重加载到内存中。

参数 model_configtokenizer_config 可用于修改加载行为。例如,根据 mlx-lm 文档,您必须为 qwen/Qwen-7B 设置一个 eos_token。在 Outlines 中,您可以通过以下方式进行设置

model = models.mlxlm(
    "mlx-community/Meta-Llama-3.1-8B-Instruct-8bit",
    tokenizer_config={"eos_token": "<|endoftext|>", "trust_remote_code": True},
)

主要参数

(可能会有变化。表格基于 mlx-lm.load docstring)

参数 类型 描述 默认值
tokenizer_config dict tokenizer 的特定配置参数。默认为空字典。 {}
model_config dict 模型的特定配置参数。默认为空字典。 {}
adapter_path str LoRA adapters 的路径。如果提供,则将 LoRA 层应用于模型。 None
lazy bool 如果为 False,评估模型参数以确保在返回前已加载到内存中。 False

生成文本

您可以使用文本生成文档中描述的参数来生成文本。

加载模型后,您可以生成文本或执行结构化生成,例如:

from outlines import models, generate

model = models.mlxlm("mlx-community/Meta-Llama-3.1-8B-Instruct-8bit")
generator = generate.text(model)

answer = generator("A prompt", temperature=2.0)

流式传输

您可以进行最小改动来创建一个流式可迭代对象

from outlines import models, generate

model = models.mlxlm("mlx-community/Meta-Llama-3.1-8B-Instruct-8bit")
generator = generate.text(model)

for token_str in generator.text("A prompt", temperature=2.0):
    print(token_str)

结构化

您可以使用 mlxlm 进行结构化生成,以保证输出符合 regex 模式、json schema 或 lark 语法。

示例:使用模式 "\\+?[1-9][0-9]{7,14}" 生成电话号码

from outlines import models, generate

model = models.mlxlm("mlx-community/Meta-Llama-3.1-8B-Instruct-8bit")

phone_number_pattern = "\\+?[1-9][0-9]{7,14}"
generator = generate.regex(model, phone_number_pattern)

model_output = generator("What's Jennys Number?\n")
print(model_output)
# '8675309'