mlx-lm
Outlines 提供了与 mlx-lm 的集成,允许模型通过 mlx 库在 Apple Silicon 上快速运行。
加载模型
您可以通过传递 HuggingFace Hub 上仓库的名称来初始化模型。mlx-lm 支持的官方模型仓库是 mlx-community。
这将把模型文件下载到 Hub 缓存文件夹,并将权重加载到内存中。
参数 model_config
和 tokenizer_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}"
生成电话号码