本文主要参考视频《AI大模型训练-第四课 | 模型微调与数据安全:部署属于你自己的“大”语言模型》,介绍如何使用 Alpaca-LoRa 训练和部署模型。在训练过程中使用租借的 A100,总耗时2小时43分41秒,共花费3.5美金。
前期准备
- 算力平台: Google Colab
- 机器学习训练监控工具: Weights and Biases
训练模型
下载源码 Test_Alpaca_Lora_with_Colab.ipynb,然后在 Colab 里打开。
在 代码执行程序 -> 更改运行时类型选择 GPU类型 -> A100,运行时规格 -> 高 RAM。
PS: 训练 Alpaca-Lora 按照官方说法是需要 28G 显存,A100 有 40G 显存,所以是足够了,费用是1.3美金/小时。
点击“连接”
下面具体介绍下代码,具体可以参考Test_Alpaca_Lora_with_Colab.ipynb
挂载 Google Drive
from google.colab import drive
drive.mount('/content/gdrive')
下载 Alpaca-Lora 项目
%cd /content/gdrive/MyDrive
!git clone https://github.com/xuwenhao/alpaca-lora.git
%cd alpaca-lora
!git pull
这里使用的是从 alpaca-lora Fork 出来的项目,好处是帮我们锁定了 python 部分三方库的版本,保证项目的正常运行。具体改动如下:
bitsandbytes==0.37.2
peft==0.2.0
transformers== 4.29.2
安装依赖
!pip install -r requirements.txt
安装和使用机器训练监控工具 wandb
!pip install wandb
# 登录 wandb,会要求输入 Weights and Biases 的 Key,请提前申请好
import wandb
wandb.login()
训练模型
!python finetune.py
--base_model 'huggyllama/llama-7b'
--data_path './alpaca_data.json'
--output_dir './lora-alpaca-20230624-01'
--batch_size 128
--micro_batch_size 50
--num_epochs 3
--learning_rate 1e-4
--cutoff_len 512
--val_set_size 2000
--lora_r 8
--lora_alpha 16
--lora_dropout 0.05
--lora_target_modules '[q_proj,v_proj]'
--train_on_inputs
--group_by_length
--wandb_project 'mactalk-demo'
--wandb_run_name 'alpaca-20230624'
--wandb_log_model 'true'
--wandb_watch 'false'
base_model: 在这里选择的预训练模型是 llama-7b。
data_path: 微调使用的数据地址。Alpaca 用的指令数据量是52K,利用 text-davinci-003 生成。
output_dir: 模型输出地址,这里可以任意修改。
wandb_project: wandb 项目名称,会在 wandb 后台显示。
wandb_run_name: wandb 运行名称,会在 wandb 后台显示。
训练过程:
wandb 监控数据:
部署模型
可以在 Colab 直接部署使用。
!python generate.py
--load_8bit
--base_model 'huggyllama/llama-7b'
--lora_weights './lora-alpaca-20230624-01'
--share_gradio
PS: 需要加上 share_gradio,不然无法输出公共URL进行使用。该单机部署只能作为 Demo 使用。
你会看到日志输出:
Running on public URL: xxxx.gradio.live ,点击后就可以在直接使用了
参考资料
- 视频号: MacTalk -> 直播回放 -> AI 大模型集训班 第四课: 模型微调与数据安全
- Test_Alpaca_Lora_with_Colab
- alpaca-lora
- stanford_alpaca
- 足够惊艳,使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼