lift-bf16 vs 其他量化版本:18GB全精度模型的性能与效率深度对比
【免费下载链接】lift-bf16项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/lift-bf16
lift-bf16是基于qwen3_5架构的9B视觉语言模型,专为结构化数据提取(如PDF、图像到JSON格式转换)设计,是datalab-to/lift模型的MLX格式bf16全精度转换版本,无量化处理,可通过mlx-vlm在Apple Silicon上运行。
各版本核心参数对比
不同量化版本的lift模型在存储大小、内存占用和生成速度等方面存在显著差异,以下是详细对比:
| Repo | Method | ≈bpw | Size | Peak RAM* | Gen* |
|---|---|---|---|---|---|
| lift-bf16(本文介绍版本) | full bf16 | 16 | 18 GB | 19.9 GB | 31 t/s |
| lift-oQ8 | oQ | ≈8.6 | 9.7 GB | 12.3 GB | 58 t/s |
| lift-oQ6 | oQ | ≈6 | 7.7 GB | 9.4 GB | 73 t/s |
| lift-oQ5 | oQ | ≈5 | 6.7 GB | 8.4 GB | 83 t/s |
| lift-oQ4 | oQ | ≈4.6 | 5.6 GB | 7.2 GB | 100 t/s |
| lift-oQ3.5 | oQ | ≈4.0 | 4.9 GB | 6.5 GB | 109 t/s |
| lift-oQ3 | oQ | ≈3.5 | 4.6 GB | 6.2 GB | 119 t/s |
注:峰值RAM和生成速度是在Macbook Pro M5 Max 128GB 40 GPU上对单图像发票提取进行测量的结果,仅为指示性数据,非基准测试。
性能与效率分析
存储与内存占用
lift-bf16作为全精度模型,存储大小达到18GB,相比最低量化的lift-oQ3版本(4.6GB),存储需求约为其3.9倍。在内存占用方面,lift-bf16的峰值RAM为19.9GB,而lift-oQ3仅需6.2GB,内存占用差距明显。对于存储资源有限或设备内存较小的用户,低量化版本更具优势。
生成速度
生成速度上,lift-bf16为31 t/s,随着量化程度的提高,生成速度逐渐加快,lift-oQ3达到119 t/s,是lift-bf16的约3.8倍。这意味着在处理大量数据或对实时性要求较高的场景中,低量化版本能显著提升效率。
模型质量
上游全精度lift(9B)在Datalab的225文档基准测试中,字段得分90.2%,全文档得分20.9%。测试表明,各量化版本均能正确提取简单测试发票,但低比特宽度版本在更复杂或对抗性文档上的性能可能会下降,目前尚未进行大规模重新基准测试。
适用场景选择
优先选择lift-bf16的情况
- 对模型输出质量要求极高,尤其是处理复杂、关键的结构化数据提取任务。
- 拥有充足的存储和内存资源,如高性能的Apple Silicon设备(128GB内存及以上)。
- 不追求极致的生成速度,更注重结果的准确性和完整性。
优先选择低量化版本的情况
- 设备存储或内存有限,需要在较小资源下运行模型。
- 对生成速度有较高要求,如批量处理大量文档或实时响应场景。
- 处理的文档结构相对简单,对模型精度要求不是特别严苛。
快速开始使用
生成(CLI方式)
通过以下命令可快速使用lift-bf16模型进行图像文本生成:
uvx --from mlx-vlm mlx_vlm.generate \ --model mlx-community/lift-bf16 \ --image invoice.png \ --prompt "Extract the invoice as JSON." \ --max-tokens 800OpenAI兼容服务器 + 结构化输出
lift模型专为 schema 约束提取而构建,mlx_vlm.server可在解码时通过llguidance强制执行 JSON Schema,确保输出有效且类型正确。 启动服务器:
uvx --from mlx-vlm mlx_vlm.server --model mlx-community/lift-bf16 --port 8080使用Python客户端调用:
import base64, json from openai import OpenAI client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="local") img = base64.b64encode(open("invoice.png", "rb").read()).decode() schema = { "type": "object", "properties": { "invoice_number": {"type": "string"}, "total": {"type": "number"}, "line_items": {"type": "array", "items": {"type": "object", "properties": { "description": {"type": "string"}, "amount": {"type": "number"}}}}, }, "required": ["invoice_number", "total"], } resp = client.chat.completions.create( model="mlx-community/lift-bf16", messages=[{"role": "user", "content": [ {"type": "text", "text": "Extract this invoice."}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}}, ]}], response_format={"type": "json_schema", "json_schema": {"name": "invoice", "schema": schema}}, temperature=0.0, max_tokens=800, ) print(json.loads(resp.choices[0].message.content))注意事项
- eos修复已应用:
generation_config.json中设置了eos_token_id: [248044, 248046]。上游模型仅设置了248044,但聊天回合以<|im_end|>(248046)结束,若不进行此修复,读取generation_config的MLX服务器将无法停止并会大量输出<|im_end|>。如果从源重新转换,需重新应用此修复。 - 许可证:代码采用Apache-2.0许可证;权重采用修改后的OpenRAIL-M许可证(免费用于研究、个人使用和年收入低于500万美元的初创公司;不得用于与Datalab API竞争的用途)。详情请参见基础模型。
总结
lift-bf16作为全精度模型,在输出质量上具有潜在优势,适合对精度要求高的场景,但存储和内存占用较大,生成速度较慢。而各低量化版本在存储、内存和速度方面表现更优,适合资源有限或对效率要求高的场景。用户可根据实际需求和设备条件,选择最适合的模型版本进行结构化数据提取工作。
【免费下载链接】lift-bf16项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/lift-bf16
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考