如何在 MacBook Pro 上微调 phi-3

社区文章 发布于 2024 年 4 月 24 日

在这篇博客中,我将向你展示如何在你的 MacBook Pro 上训练/微调微软最新的 phi-3 模型!你需要一台 M1 或 M2 芯片的 Mac 来完成此操作。我们将使用 AutoTrain Advanced!

要安装 AutoTrain Advanced,你可以执行:

$ pip install autotrain-advanced

注意:autotrain 不会自动安装 pytorch、torchvision 等。所以,你需要自己安装它们。你可以创建一个 conda 环境并安装这些依赖项。

$ conda create -n autotrain python=3.10
$ conda activate autotrain
$ conda install pytorch::pytorch torchvision torchaudio -c pytorch
$ pip install autotrain-advanced

完成后,你就可以在你的 Mac 机器上使用 AutoTrain CLI 或 UI 了!我们将两者都看一下!

AutoTrain 不仅提供 LLM 微调,还提供许多其他任务,如文本分类、图像分类、Dreambooth LoRA 等。但在这篇博文中,我们专注于 LLM 微调。

你可以通过以下命令查看所有可用于 LLM 微调的参数:

$ autotrain llm --help

下一步是获取数据。在这篇博客中,我将向你展示如何在你的 MacBook 上进行 SFT 训练和 ORPO 微调(DPO 的小兄弟)。

  • 对于 SFT 训练,我们需要一个只包含单个文本列的数据集。我们可以使用像 timdettmers/openassistant-guanaco 或类似 alpaca 的数据集。注意:这些数据集已经被格式化为包含系统提示、用户指令和助手消息的文本。如果你的数据是以下格式:
[ { "content": "Definition: In this task, you need to count the number of vowels (letters 'a', 'e', 'i', 'o', 'u') / consonants (all letters other than vowels) in the given sentence.\nInput: Sentence: 'a baseball player is in his hitting stance as a few people watch'. Count the number of consonants in the given sentence.\nOutput:", "role": "user" }, { "content": "32", "role": "assistant" } ]

你可以使用 AutoTrain 的 chat-template 参数。我们稍后在这篇文章中会看到它,但在 ORPO 训练部分。因此,我们将先介绍使用预格式化数据集进行 SFT 训练,然后用聊天模板进行 ORPO 训练。

使用 AutoTrain,最耗时的部分只是创建或寻找数据集。现在,当我们有了数据集,就可以使用以下命令进行 SFT 训练:

autotrain llm \
--train \
--model microsoft/Phi-3-mini-4k-instruct \
--data-path timdettmers/openassistant-guanaco \
--lr 2e-4 \
--batch-size 2 \
--epochs 1 \
--trainer sft \
--peft \
--project-name my-own-phi-3-on-mac \
--username abhishek \
--push-to-hub \
--token $HF_TOKEN

其中 $HF_TOKEN 是你的 Hugging Face 写入令牌,如果你想将训练好的模型推送到 Hugging Face Hub 以便轻松部署和分享。你可以在这里找到你的令牌。

请注意,我们正在使用 LoRA,因此我们有 --peft 参数。另外,如果你的数据集中的文本列不叫 text,你可以添加另一个参数 --text-column 你的数据集文本列名。如果你想使用自己的 CSV/JSON 文件而不是 Hugging Face Hub 上的数据集,你可以将其命名为 train.csv / train.jsonl 并放在一个本地文件夹中。训练的命令会稍有变化:

autotrain llm \
--train \
--model microsoft/Phi-3-mini-4k-instruct \
--data-path /path/to/folder/containing/training/file \
--text-column text_column_in_your_dataset \
--lr 2e-4 \
--batch-size 2 \
--epochs 1 \
--trainer sft \
--peft \
--project-name my-own-phi-3-on-mac \
--username abhishek \
--push-to-hub \
--token $HF_TOKEN

接下来,我们来看 ORPO 训练。对于 ORPO 训练,我们将 --trainer sft 改为 --trainer orpo

autotrain llm \
--train \
--model microsoft/Phi-3-mini-4k-instruct \
--data-path argilla/distilabel-capybara-dpo-7k-binarized \
--text-column chosen \
--rejected-text-column rejected \
--lr 2e-4 \
--batch-size 2 \
--epochs 1 \
--trainer orpo \
--chat-template chatml \
--peft \
--project-name my-own-phi-3-on-mac-orpo \
--username abhishek \
--push-to-hub \
--token $HF_TOKEN

上面有 4 处改动。除了数据集和 trainer 的改变,仅仅是列的映射发生了变化。另一个主要变化是使用了 --chat-template 参数,并将其设置为 chatml。对于 --chat-template,可选项有:zephyrchatmltokenizer 或 None。如果你已经像我们在 SFT 训练中那样自己格式化好了数据,则使用 None。

现在,如果你觉得命令行太复杂,你也可以使用 UI!UI 更简单,还允许你上传文件。

要使用 UI,请执行:

$ export HF_TOKEN=your_huggingface_write_token

$ autotrain app --host 127.0.0.1 --port 10000

然后在浏览器中访问 http://127.0.0.1:10000,享受 AutoTrain UI 吧!🚀 下图展示了与上述 ORPO 训练相同的参数设置。

image/png

如果你在模型下拉列表中找不到 phi3,你可以使用这个 URL:http://127.0.0.1:7860/?custom_models=microsoft/Phi-3-mini-4k-instruct。注意:我已将 phi-3 添加为自定义模型。你也可以对 Hub 上的任何其他兼容模型执行相同的操作。;)

SFT 和 ORPO 训练都已在 M2 Max MacBook Pro 上成功测试。

如有任何问题或功能请求,请使用 GitHub 仓库

P.S. AutoTrain 的详细文档可以在这里找到。

祝你(自动)训练愉快!🚀

社区

注册登录 以发表评论