整个流程大概几个小时就能跑通,没碰到什么奇怪的 BUG,感觉 LLaMA Factory 对初学者还是很友好的。

注意: 本文仅记录操作流程,因为本人是初学者,文中附上的参数由 GPT 生成,不具备参考价值,可以自行调整。

算力平台选择

算力支持使用的是 算力云 的按量付费方案,本人选择了 vGPU-32GB 实例,操作系统为 Ubuntu。

由于暂时无需立刻开始训练,为节省费用,初始选择无卡模式启动。

下载 LLaMA Factory

在根目录下,根据 LLaMA Factory 官方文档 的安装步骤完成 LLaMA Factory 的部署。官方文档内容较为详尽,此处不再赘述。

下载 Mistral 模型

本次微调目标是对话模型,因此选择了 Mistral-7B-Instruct-v0.2

克隆模型代码仓库

autodl-tmp(根目录)中,通过以下命令尝试使用 git 克隆模型:

# 请确保已正确安装 git lfs
git lfs install
git clone https://www.modelscope.cn/AI-ModelScope/Mistral-7B-Instruct-v0.2.git

由于模型文件较大,通常无法一次性完成下载。可以先核对服务器已下载内容和模型实际应拉取的文件列表(模型的文件内容请参考 ModelScope 模型文件列表),确认好除模型文件以外的所有内容均已克隆完成,就可以直接中断拉取进程,再手动下载模型文件。

手动下载模型文件

进入模型代码仓库的根目录,分别使用以下命令单独下载模型分片:

wget https://modelscope.cn/models/AI-ModelScope/Mistral-7B-Instruct-v0.2/resolve/master/pytorch_model-00001-of-00003.bin
wget https://modelscope.cn/models/AI-ModelScope/Mistral-7B-Instruct-v0.2/resolve/master/pytorch_model-00002-of-00003.bin
wget https://modelscope.cn/models/AI-ModelScope/Mistral-7B-Instruct-v0.2/resolve/master/pytorch_model-00003-of-00003.bin

note:在模型页面中,每个文件旁均有下载按钮,可通过右键复制其下载链接。

数据集准备

根据 LLaMA Factory 官方文档中数据集格式的说明,本人采用了 Alpaca 格式,示例如下:

[
  {
    "instruction": "今天的天气怎么样?",
    "input": "",
    "output": "今天的天气不错,是晴天。",
    "history": [
      ["今天会下雨吗?", "今天不会下雨,是个好天气。"],
      ["今天适合出去玩吗?", "非常适合,空气质量很好。"]
    ]
  }
]

将数据集文件存放于 LLaMA Factory 的 data 目录下。这里本人新建了一个子目录 mistral,将当前数据集存放在了路径 data/mistral/evan.json

随后,在 data 目录下的 dataset_info.json 文件中注册该数据集:

{
  "mistral_evan": {
    "file_name": "mistral/evan.json",
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output",
      "system": "system",
      "history": "history"
    }
  }
}

其中 columns 的配置需根据数据集格式进行调整,具体可以参考 官方文档

微调配置

在 LLaMA Factory 根目录的 examples/train_lora 中,创建一个新的微调配置文件 mistral_evan.yaml,内容如下:

### model
model_name_or_path: /root/autodl-tmp/Mistral-7B-Instruct-v0.2

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: mistral_evan
template: default
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/mistral7b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 2
eval_strategy: steps
eval_steps: 500

注意:

  • model_name_or_path 需替换为实际模型路径。
  • 如果服务器当前为无卡模式,请关机后切换至正常启动模式(启用 GPU)。

启动 GPU 后,在 LLaMA Factory 根目录下运行以下命令进行微调:

llamafactory-cli train examples/train_lora/mistral_evan.yaml

微调完成后,模型文件将保存在配置中指定的 output_dir 路径下。


推理配置与运行

examples/inference 目录下,新建一个推理配置文件 mistral_evan.yaml,内容如下:

model_name_or_path: saves/mistral7b/lora/sft
template: default
infer_backend: huggingface

运行以下命令启动推理:

llamafactory-cli chat examples/inference/mistral_evan.yaml

运行成功后,即可通过命令行与微调后的模型进行对话交互。