当前位置: 首页 > article >正文

本地快速推断的语言模型比较:Apple MLX、Llama.cpp与Hugging Face Candle Rust

本地快速推断的语言模型比较:Apple MLX、Llama.cpp与Hugging Face Candle Rust

在自然语言处理(NLP)部署中,推断速度是一个关键因素,尤其是对于支持大型语言模型(LLM)的应用来说。随着Apple M1芯片等新移动架构的兴起,评估LLMs在这些平台上的性能显得尤为重要。本文将对三种流行的LLM库——Apple MLX、Llama.cpp和Hugging Face的Candle Rust进行比较,重点关注它们在Apple M1芯片上的推断和生成速度。

主要库

1. Apple MLX

MLX是为Apple硅优化的机器学习框架,旨在既用户友好,又高效地训练和部署模型。用户可以通过Python的包管理工具pip轻松安装MLX:

pip install mlx

生成文本可以通过安装mlx-lm包来实现:

pip install mlx-lm

之后,可以使用以下代码来加载模型并生成文本:

from mlx_lm import load, generate

model, tokenizer = load("mistralai/Mistral-7B-v0.1")
response = generate(model, tokenizer, prompt="hello", verbose=True)
GGUF支持

MLX支持GGUF格式,该格式为快速加载和保存模型而设计。用户可通过安装依赖库并利用Python脚本运行模型实现生成任务。

2. Llama.cpp

Llama.cpp库的主要目标是通过4位整数量化在MacBook上运行LLaMA模型。用户可以通过以下步骤开始使用:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

3. Hugging Face Candle Rust

Candle是一个轻量级的机器学习框架,专为Rust设计,关注性能和易用性。用户需要首先安装Cargo:

curl https://sh.rustup.rs -sSf | sh

然后,可以通过git克隆Candle库:

git clone https://github.com/huggingface/candle.git

实验模型

在本实验中,选择了两种先进的LLM模型:Mistral-7B和Phi-2,分别进行对比测试。

Mistral-7B

  • Q4 GGUF: 使用GGUF格式以加快推断过程。
  • 4-bit: 权重表示采用4位,从而减少内存占用。

Phi-2

  • Q4 GGUF: 与Mistral-7B采用相似的结构,提供有效的量化训练。
  • 4-bit: 同样采用4位权重,优化存储需求。

性能评估

在实验过程中,我们测量了各种库在不同任务中的生成速度。整体实验配置使用了搭载M1芯片的Apple MacBook,配备16GB统一内存。

结果分析

对于Mistral-7B的Q4 GGUF配置,实验表明Llama.cpp在生成速度上优于其他库:

  • Llama.cpp: 11 tokens/秒
  • Candle Rust: 7–8 tokens/秒
  • MLX: 3–4 tokens/秒

对于Phi-2的实验结果:

  • Coding Tasks:

    • Llama.cpp: 25 tokens/秒
    • MLX (4-bit): 43 tokens/秒
    • Candle Rust: 8.6 tokens/秒
  • Non-coding Tasks:

    • Llama.cpp: 28 tokens/秒
    • MLX (4-bit): 85 tokens/秒
    • Candle Rust: 14 tokens/秒

实验结果总结

通过多次测试发现,Phi-2在编码任务的生成速度低于非编码任务,而Mistral或Llama模型则在所有任务中的生成速度保持相对一致。对于需要在Apple M1芯片上运行的低精度LLM,实现Q4 GGUF布局的支持仍需提升。

结论

从实验结果来看,Llama.cpp在Mistral-7B和Phi-2模型的处理上具备优势。而MLX的最新性能提升则表明,在适当的配置和优化后,它也能够在特定任务中表现出色。随着对GGUF模型的支持不断增强,MLX的潜力可能进一步得到释放。


http://www.kler.cn/a/461824.html

相关文章:

  • Lianwei 安全周报|2025.1.2
  • MYsql--------ubantu中安装mysql
  • Redis面试相关
  • 数据库知识汇总2
  • Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
  • Oracle exp和imp命令导出导入dmp文件
  • EasyPlayer.js遇到播放RTMP视频时,画面显示异常是什么原因?
  • 【递归、搜索与回溯算法】二叉树中的深搜
  • RACI矩阵在项目管理中的应用:优化任务管理
  • Kafka配置公网或NLB访问(TCP代理)
  • Github 2024-12-31Python开源项目日报Top8
  • 两种分类代码:独热编码与标签编码
  • 人工智能在SEO中的应用与关键词优化策略
  • 目标检测之DINO详解
  • android 外挂modem模块实现Telephony相关功能(上网,发短信,打电话)
  • R中单细胞RNA-seq分析教程 (7)
  • 【Java项目】基于SpringBoot的【校园新闻网站】
  • 【Goland】怎么执行 go mod download
  • wire单总线通信
  • MySQL数据库笔记——多版本并发控制MVCC
  • 基于Java+Springboot+Vue开发的旅游景区管理系统,实习作品
  • LeetCode -Hot100 - 42. 接雨水
  • HTML5 评分星级组件
  • 【Pytorch实用教程】循环神经网络中使用dropout需要注意的问题
  • [江科大STM32] 第五集快速建立STM32工程模板——笔记
  • Spring-kafka快速Demo示例