MLX框架常见问题解读:模型支持、微调、转化与MLX CommunityWinston WangSep 25, 2024--
Share
Press enter or click to view image in full size1. MLX支持哪些机器学习模型?MLX框架支持多种常见的机器学习和深度学习模型,主要包括: 大语言模型(LLM)和文本生成模型,如LLaMA,Mistral,Phi-2,Qwen等;图像生成模型,如Stable Diffusion;语音识别模型,如OpenAI的Whisper模型;以及其他常见任务的模型,包括但不限于,文本识别,机器翻译,图像分类,目标检测等。
最重要的是MLX提供了对于大语言模型广泛的支持。有些提到MLX的教程里提到MLX支持的包有限,这完全是错误的理解。实际上,根据官方给出的文档:“大多数 Mistral, Llama, Phi-2, and Mixtral 类似的模型可以直接加载并使用”。实际测试中也可以发现Gemma2模型在该框架下可以直接使用。
2. MLX支持微调吗?有哪些微调方法?MLX支持神经网络模型的微调,苹果用户可以直接在本地进行大语言模型微调。
LoRA (Low-Rank Adaptation)MLX支持使用LoRA方法进行模型微调。LoRA是一种参数高效的微调技术,通过添加低秩矩阵来调整模型权重,而不直接修改原始参数。QLoRA (Quantized LoRA)MLX也支持QLoRA,即量化版的LoRA。这允许在量化模型上进行LoRA微调,进一步降低内存需求。全参数微调虽然不是参数高效的方法,但MLX也支持对模型进行全参数微调。其他微调方法:Adapter微调,Prefix微调,Prompt微调3. 为什么MLX可以在苹果Silicon系列芯片上高效运行?Convert功能是什么?在MLX中有一个convert的功能可能会让人觉得困惑。如果模型可以直接使用,那么convert这个功能是要干什么呢?根据官方的说法:MLX格式专门为Apple Silicon芯片优化,可以充分利用M系列芯片的性能优势提高模型的运行速度和效率。MLX采用统一内存模型,可以在CPU和GPU之间共享内存,减少数据传输开销,提高内存利用效率。模型在Mac、iPad、iPhone等Apple设备上本地运行。MLX采用惰性计算(Lazy computation)策略,只在需要时才实际执行计算,可以优化计算效率。
在对源代码进行了一些调查后发现,MLX自己重新设计了自己格式的数组和框架,这个框架和NumPy很像,但是是针对统一内存进行了设计。这样可以在Apple Silicon的机器上更有效灵活地完成机器学习任务。同时,惰性计算可以让输出值在需要的时候才进行计算,并在CPU和GPU上运行。Convert功能其实就是把原先储存在torch里的数组转化成为MLX的数组,以实现上述特性。
4. 要不要对模型进行量化?Convert功能还可以对模型进行量化,量化是从高精度(通常是32位浮点数)转换为低精度表示(如8位整数)的过程。主要目的是减小模型大小、降低计算复杂度、提高推理速度,同时尽量保持模型的准确性。量化后的模型大小显著减小,使用整数运算代替浮点运算可以加快推理速度,占用的内存也更少。
基于这个情况,我们可以适当的对模型进行转换。例如:我只需要在Apple Silicon的机器上对模型进行微调,并且最后还是要将模型部署到Linux服务器上的话,可以直接使用原始模型,不进行转化;如果未来将要在Apple Silicon的Mac上进行部署,则应该先进行转化。
5. 在HuggingFace上的MLX Community 以及其下的模型是什么?至于HuggingFace上的MLX Community,MLX的作者之一Awni Hannun解释道:
大多数情况下,当精度为 fp16、bf16 或 fp32 时,MLX 社区模型与原始 Hugging Face 模型之间并没有实质性的区别。在某些情况下,模型可能有稍微不同的格式,但在许多情况下它们是相同的。
MLX 社区模型的主要区别在于,创作者将量化的模型(4 位和 8 位)保存在那里。量化格式是特定于 MLX 的。不过,并没有规定量化模型必须存放在 MLX 社区中。如果原始模型创建者没有制作 MLX 量化模型,那么 MLX 社区只是一个方便存放它们的地方。
也就是说,我们可以直接通过HuggingFace 的MLX Community上直接下载已经量化后的模型进行应用,并且这里没有gated model,不需要进行HuggingFace Token设置:
from mlx_lm import generate, loadmodel, tokenizer = load("mlx-community/gemma-2-9b-8bit")转载请注明出处