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

在 Mac 上使用 MLX 微调微软 phi3 模型

微调大语言模型是常见的需求,由于模型参数量大,即使用 Lora/Qlora 进行微调也需要 GPU 显卡,Mac M系是苹果自己的 GPU,目前主流的框架还在建立在 CUDA 的显卡架构,也就是主要的卡还是来自英伟达。如果要用 Mac 来做训练和推理,需要用MLX,MLX 类似于 Pytorch,对苹果芯片做了支持,从而使得苹果电脑也可以进行深度学习。本文将介绍如何用 MLX 训练 Phi3 大语言模型:

安装 MLX

pip install mlx-lm

模型下载推理

这里需要访问 HuggingFace 下载,可以使用国内镜像

国内镜像
https://hf-mirror.com/export HF_ENDPOINT=https://hf-mirror.compython -m mlx_lm.generate --model microsoft/Phi-3-mini-4k-instruct --max-token 2048 --prompt  "<|user|>\nCan you introduce yourself<|end|>\n<|assistant|>"

在这里插入图片描述

HF 模型转换为 MLX 模型

mlx 的命令都有一些默认值,-h 中没有具体说明, 只能去源码里看。

在这里插入图片描述
例如,转换完成的模型会保存到 mlx_model 目录下。

python -m mlx_lm.convert --hf-path microsoft/Phi-3-mini-4k-instruct

通过 MLX 进行调优

首先准备数据,MLX 使用 jsonl 数据格式进行训练,从 github 下载数据集并存放到 data 目录下,一共三个文件,test、train 和 valid,文件下载好之后我们就可以开始训练了。

https://github.com/microsoft/Phi-3CookBook/tree/main/code/04.Finetuning/mlx/data

消耗资源比较多,M2 风扇又开始转了。

python -m mlx_lm.lora --model microsoft/Phi-3-mini-4k-instruct --train --data ./data --iters 1000 

模型推理

  • 运行未训练的模型和训练好的模型,并对推理的结果进行比较。
python -m mlx_lm.generate --model microsoft/Phi-3-mini-4k-instruct --adapter-path ./adapters --max-token 2048 --prompt "Why do chameleons change colors? " --eos-token "<|end|>"    

在这里插入图片描述

  • 原始模型
python -m mlx_lm.generate --model microsoft/Phi-3-mini-4k-instruct --max-token 2048 --prompt "Why do chameleons change colors? " --eos-token "<|end|>"    

在这里插入图片描述

合并模型

将训练好的 Lora adapter 合并到原始模型中。

python -m mlx_lm.fuse --model microsoft/Phi-3-mini-4k-instruct

生成 GGUF

通过 llama.cpp 生成 GGUF,量化参数支持 ‘f32’, ‘f16’, ‘bf16’, ‘q8_0’,根据需要自行修改。Phi3 模型默认没有 tokenizer.model,需要从 HF 下载
https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/tree/main

在这里插入图片描述
将 tokenizer.model 复制到 /lora_fused_model/ 目录下,完成后运行生成GGUF 的转换命令。

git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpppip install -r requirements.txtpython convert-hf-to-gguf.py ../lora_fused_model  --outfile ../phi-3-mini-ft.gguf --outtype q8_0

在这里插入图片描述

创建 Ollma 模型

首先创建 Ollama 的模型文件 ModelFile,和上一步生成的 gguf 文件放到同一个目录下

FROM ./phi-3-mini-ft.gguf
PARAMETER stop "<|end|>"

创建模型

ollama create phi3ft -f Modelfile

Ollama 启动模型并进行推理

ollama run phi3ft

在这里插入图片描述

总结

MLX 模型推理非常简单,数据准备好就可以训练和推理,本次使用的是 phi3 模型,中文支持的不好,以后可以试试 Qwen2 怎么样。

相关文章:

在 Mac 上使用 MLX 微调微软 phi3 模型

微调大语言模型是常见的需求&#xff0c;由于模型参数量大&#xff0c;即使用 Lora/Qlora 进行微调也需要 GPU 显卡&#xff0c;Mac M系是苹果自己的 GPU&#xff0c;目前主流的框架还在建立在 CUDA 的显卡架构&#xff0c;也就是主要的卡还是来自英伟达。如果要用 Mac 来做训练…...

【JavaEE】多线程代码案例(2)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程代码案例(1)&a…...

Halcon支持向量机

一 支持向量机 1 支持向量机介绍&#xff1a; 支持向量机(Support Vector Machine&#xff0c;SVM)是Corinna Cortes和Vapnik于1995年首先提出的&#xff0c;它在解决小样本、非线性及高维模式识别表现出许多特有的优势。 2 支持向量机原理: 在n维空间中找到一个分类超平面…...

【Python机器学习】模型评估与改进——在模型选择中使用评估指标

我们通常希望&#xff0c;在使用GridSearchCV或cross_val_score进行模型选择时能够使用AUC等指标。scikit-learn提供了一种非常简单的实现方法&#xff0c;那就是scoring参数&#xff0c;它可以同时用于GridSearchCV和cross_val_score。你只需要提供一个字符串&#xff0c;用于…...

【C语言】union 关键字

在C语言中&#xff0c;union关键字用于定义联合体。联合体是一种特殊的数据结构&#xff0c;它允许不同的数据类型共享同一段内存。所有联合体成员共享同一个内存位置&#xff0c;因此联合体的大小取决于其最大成员的大小。 定义和使用联合体 基本定义 定义一个联合体类型时…...

电脑回收站删除的文件怎么恢复?5个恢复方法详解汇总!

电脑回收站删除的文件怎么恢复&#xff1f;在我们日常使用电脑的过程中&#xff0c;难免会遇到误删文件的情况。一旦发现自己误删文件了&#xff0c;先不要着急&#xff0c;还是有很多方法可以找回的。市面上还是有很多好用的文件恢复软件可以使用&#xff0c;具体介绍如下。 本…...

mac 安装cnpm 淘宝镜像记录

mac 安装cnpm 淘宝镜像记录 本文介绍了在安装cnpm时遇到权限问题的解决方案&#xff0c;包括使用sudo&#xff0c;处理SSL证书过期&#xff0c;以及因版本不一致导致的错误处理方法&#xff0c;步骤包括设置npm配置、卸载和重新安装cnpm到特定版本。 安装 npm install cnpm …...

ArcGIS Pro SDK (七)编辑 11 撤销重做

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 11 撤销&重做 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 11 撤销&重做1 撤消/重做最近的操作 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 撤消/重做最近的操作 //撤销 if (MapV…...

Excel 中的元素定位:相对定位、绝对定位和混合定位

在Excel中&#xff0c;单元格引用有三种主要类型&#xff1a;相对定位、绝对定位和混合定位。 这些类型主要用于公式和函数中&#xff0c;决定在复制或拖动公式时引用如何变化。 1. 相对定位 相对定位指的是不带“$”符号的单元格引用&#xff0c;例如 A1。 这种引用方式在…...

Idea2024安装后点击无响应

问题 最近因工作需要&#xff0c;升级一下 idea 版本&#xff0c;之前一直使用的是2020版本&#xff0c;下载最新的2024版本&#xff08;下载的 zip 包免安装模式&#xff0c;之前使用的2020版本也是免安装的&#xff0c;因为是免安装的&#xff0c;所以之前的版本也没有删除&…...

如何提高实验室分析结果的准确性呢

要提高实验室分析结果的准确性&#xff0c;可以从以下几个方面着手&#xff1a; 1、选择合适的实验方法 不同的实验方法具有不同的优缺点&#xff0c;实验方法的准确度直接影响测定结果的准确度。因此&#xff0c;在选择实验方法时&#xff0c;需要根据实验目的、实验原理、实…...

Perl 格式化输出:提升代码可读性的技巧

引言 Perl 是一种功能强大的脚本语言&#xff0c;广泛用于文本处理、系统管理、网络编程等多个领域。在 Perl 编程中&#xff0c;代码的格式化输出不仅有助于提升代码的可读性&#xff0c;还能增强程序的用户体验。本文将详细介绍如何在 Perl 中实现代码的格式化输出。 Perl …...

JavaScript基础-函数(完整版)

文章目录 函数基本使用函数提升函数参数arguments对象&#xff08;了解&#xff09;剩余参数(重点)展开运算符(...) 逻辑中断函数参数-默认参数函数返回值-return作用域(scope)全局作用域局部作用域变量的访问原则垃圾回收机制闭包 匿名函数函数表达式立即执行函数 箭头函数箭头…...

AI开发者的新选择:Mojo编程语言

随着人工智能技术的迅猛发展&#xff0c;编程语言的选择在AI项目的成功中扮演着至关重要的角色。近年来&#xff0c;Mojo编程语言作为一种专为AI开发者设计的新兴语言&#xff0c;逐渐引起了广泛关注。本文将详细介绍Mojo编程语言的特点、优势及其在AI开发中的应用。 目录 Mo…...

软考(高项)系统分析师--论软件开发模型及应用

文章目录 前言一、前期准备&#xff1a;二、论文部分: 前言 本文对系统分析师&#xff0c;软件开发模型及其应用文章进行展示&#xff0c;可以拷贝后直接粘贴到word 文档中。 一、前期准备&#xff1a; 项目主体功能项目背景常用的软件开发模型&#xff1a;瀑布模型&#xff…...

同一天提档又撤档!电影《野孩子》宣布取消7月10日公映安排——浔川电影报

同一天提档又撤档&#xff01; 7月3日晚上10点&#xff0c;电影野孩子 发声明官宣撤档&#xff0c;“由于后期进度原因&#xff0c;电影《野孩子》将取消7月10日的公映安排&#xff0c;我们向各影管院线的同仁及所有观众朋友们致以最诚挚的歉意&#xff0c;谢谢大家这段时间的…...

Shell编程之免交互

一、Here Document免交互 1&#xff1a;概述 Here Document 是一个特殊用途的代码块&#xff0c;它在 Linux Shell 中使用 I/O 重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令&#xff0c;Here Document 是标准输入的一种替代品 语法…...

基于opencv的斜光测距及python实现

1.前言 最近做了一个基于opencv的斜光测距的小项目&#xff0c;东西不多&#xff0c;但是很有意思&#xff0c;值得拿出来学一学。项目里面需要比较精确的定位功能&#xff0c;将前人matlab代码移植到python上&#xff0c;并且做了一些优化&#xff0c;简化逻辑(毕竟我是专业的…...

梯度下降算法

占楼&#xff0c;明天写...

第5章:软件工程

第5章&#xff1a;软件工程 软件工程概述 软件生命周期 软件过程 1.能力成熟度模型(CMM) CMM&#xff08;能力成熟度模型&#xff09;是一个评估和确定组织软件过程成熟度的模型。它最早于1987年由美国国防部软件工程研究所&#xff08;SEI&#xff09;提出&#xff0c;其目的…...

人脸识别OOD模型在金融领域的身份验证应用

人脸识别OOD模型在金融领域的身份验证应用 1. 引言 想象一下这样的场景&#xff1a;一位银行客户正在通过手机APP进行大额转账&#xff0c;系统需要快速准确地确认他的身份。传统的人脸识别系统可能会因为光线不佳、佩戴口罩或者图像模糊而无法正常工作&#xff0c;甚至可能被…...

深入解析RK3576 Android14中camera3_profiles_rkxxxx.xml的自定义数据格式支持

1. RK3576 Android14相机配置文件的秘密 最近在调试RK3576平台的相机模块时&#xff0c;遇到了一个棘手的问题&#xff1a;需要为定制摄像头添加特殊数据格式。当我打开camera3_profiles_rkxxxx.xml文件时&#xff0c;发现它只支持BLOB、YCbCr_420_888和IMPLEMENTATION_DEFINED…...

算法审判日:用Git记录定程序员罪孽

一、版本控制的“审判台”在软件质量保障体系中&#xff0c;Git早已超越单纯的版本管理工具&#xff0c;演变为代码行为的“司法档案库”。每一次git commit都是程序员在数字法庭上的宣誓证词&#xff0c;而git blame则成为测试人员追溯缺陷根源的刑侦工具。罪证链条的三重维度…...

RSA2 - Writeup by AI

RSA2 - Writeup by AI 题目信息项目内容题目来源Bugku CTF题目类型Crypto (密码学)考点RSA 小指数攻击、Rabin 加密题目描述 给定 RSA 加密参数&#xff1a; 加密指数 e 2模数 N&#xff08;3072 位&#xff09;密文 c 要求解密得到 flag。 考点分析 核心知识点 RSA 小指数攻击…...

别再让AI单打独斗了:用MCP协议手把手教你搭建一个能‘对话’的智能体协作系统

从零构建智能体协作系统&#xff1a;基于MCP协议的周末旅行规划实战 想象一下这样的场景&#xff1a;周五晚上&#xff0c;你对着手机说"帮我规划一个去杭州的周末旅行"&#xff0c;30秒后&#xff0c;一份完整的行程建议出现在屏幕上——包含根据实时天气推荐的穿搭…...

开源堡垒机Guacamole二次开发实战:SFTP与录屏功能深度优化

1. Guacamole堡垒机二次开发背景与挑战 Guacamole作为一款优秀的开源堡垒机&#xff0c;在企业远程办公和运维管理中扮演着重要角色。但在实际生产环境中&#xff0c;我们常常会遇到一些原生功能无法满足需求的情况。比如在分布式部署场景下&#xff0c;guacd服务与Java后端分离…...

解决Word中MathType功能失效的VBA与注册表修复指南

1. 遇到MathType罢工&#xff1f;先别急着重装Office 最近帮同事处理Word文档时&#xff0c;发现他的MathType菜单全灰了&#xff0c;公式编辑功能完全瘫痪。这种情况在科研论文写作高峰期特别要命——你正赶着投稿 deadline&#xff0c;突然发现公式编辑器失灵了&#xff0c;…...

基于STM32H743的调试记录2——从CubeMX到MDK:构建现代化工程模板的实战指南

1. 为什么需要现代化工程模板 最近在折腾STM32H743的时候&#xff0c;发现一个很有意思的现象&#xff1a;很多开发者还在使用几年前的老旧工程模板。我自己刚开始用某原子的开发板学习时也踩过这个坑&#xff0c;板子配套的例程跑起来没问题&#xff0c;但一旦想实现些复杂功…...

手把手教你编译运行openHiTLS社区的FrodoKEM源码(附完整环境配置)

从零构建FrodoKEM开发环境&#xff1a;openHiTLS社区源码实战指南 当量子计算机从理论走向现实&#xff0c;传统加密算法正面临前所未有的挑战。FrodoKEM作为后量子密码学领域的明星算法&#xff0c;以其坚实的数学基础和简洁的实现逻辑&#xff0c;成为开发者探索抗量子加密技…...

Android Studio 高版本兼容低版本项目配置

AndroidStudio开发工具高版本兼容低版本项目配置&#xff1a;1、 JDK 配置&#xff1a;gradle.properties 文件中指定jdk 版本&#xff1a;org.gradle.java.homeD\:\\ProgramFiles\\JDK\\jdk-11.0.262 配置Gradle 编译版本&#xff1a;3. 显示所有Gradle task 列表设置完成后&a…...