LLaMA-Factory 是一个多功能的语言模型微调框架,它提供了一系列工具和方法来微调和优化大型语言模型。以下是它的一些主要功能和优点:

在这里插入图片描述 本文将教大家如何在矩池云使用LLaMA-Factory快速训练属于自己的专属模型。
在这里插入图片描述

上传训练数据

首先自己准备好训练用的数据集,本案例使用的数据集来自 福州好奇心科技 黄进老师整理古文数据集guwen.json,数据格式如下:

[
    {
        "instruction": "下列为文言文的一部分内容,请参照这部分内容,续写下一部分。",
        "input": "至于负者歌于途,行者休于树,前者呼,后者应,伛偻提携,往来而不绝者,滁人游也。临溪而渔,溪深而鱼肥酿泉为酒,泉香而酒洌山肴野蔌,杂然而前陈者,太守宴也。宴酣之乐,非丝非竹,射者中,弈者胜,觥筹交错,起坐而喧哗者,众宾欢也。苍颜白发,颓然乎其间者,太守醉也。\n",
        "output": "已而夕阳在山,人影散乱,太守归而宾客从也。树林阴翳,鸣声上下,游人去而禽鸟乐也。然而禽鸟知山林之乐,而不知人之乐人知从太守游而乐,而不知太守之乐其乐也。醉能同其乐,醒能述以文者,太守也。太守谓谁?庐陵欧阳修也。\n"
    },
    ...
]

将数据集通过矩池云网盘上传,网盘对应机器里的/mnt目录,比如我上传在网盘的 example/data下,那么后面租用机器里对应文件路径就是:/mnt/example/data/guwen.json在这里插入图片描述

租用机器

训练使用的 Qwen2-0.5B-Instruct 模型在镜像里已经有了,在传好训练数据集后,直接租用页面租用机器即可,这里我选择的是 NVIDIA RTX A4000 显卡,也没点击租用后,在系统镜像搜索框内搜索llama即可看到 LLaMA-Factory 镜像。

  • 点击选择 LLaMA-Factory 镜像
  • 高级选项-自定义端口里,自定义一个 HTTP 协议的 7860 端口,用于访问 webui 服务
  • 点击租用
    在这里插入图片描述租用成功后我们可以在租用页面看到机器的 SSH、Jupyterlab 等链接,矩池云官网有详细的教程介绍了如何使用这些链接连接服务器。

在这里插入图片描述

配置训练数据集

首先点击打开租用页面的 Jupyterlab 链接,然后在左侧文件导航栏依次打开:LLaMA-Factory/data 文件夹,然后选中 dataset_info.json 右键选择:Open With -> Editor,在文件中新增三行:

  "guwen": {
    "file_name": "/mnt/example/data/guwen.json"
  },

添加内容说明:

  • guwen为数据集在webui中显示名称;
  • file_name 后的/mnt/example/data/guwen.json 数据集存放路径,改成自己数据集路径。

在这里插入图片描述

启动LLaMA-Factory WebUI 服务

训练数据集配置好后,我们开始启动程序,首先 Jupyterlab 里新建一个 terminal。

在这里插入图片描述
然后在Terminal里输入以下指令进入项目目录,然后并启动 webui 服务。

cd /LLaMA-Factory/
python src/webui.py 

在这里插入图片描述
程序运行成功后,访问租用页面 7860 端口对应链接即可打开LLaMA-Factory WebUI 页面。

在这里插入图片描述

配置训练

LLaMA-Factory WebUI 页面中点击 Lang 中的 zh 可以将页面设置成中文。

然后模型名称搜索 Qwen2-0.5B-Instruct,模型路径可以写绝对路径,镜像里内置的 Qwen2-0.5B-Instruct 模型路径为:/LLaMA-Factory/Qwen/Qwen2-0.5B-Instruct,你也可以改成其他模型,模型路径指定正确即可。
在这里插入图片描述
在 Train 页面,先选择数据集为自己新建的,然后设置训练轮数。

在这里插入图片描述
设置好参数后,依次点击:预览命令、保存训练参数、载入训练参数、开始,即可。
在这里插入图片描述

我们可以 Jupyterlab 新建一个 terminal,然后输入以下指令查看训练过程中显卡GPU利用率变化情况。

watch -n 0.5 nvidia-smi

在这里插入图片描述训练过程中页面会显示loss变化,训练结束后页面也会显示。
在这里插入图片描述

微调模型测试

训练完毕后,会在/LLaMA-Factory/saves目录下存储训练好的模型文件,LLaMA-Factory 提供了微调模型推理方法。

我们训练完毕后,刷新下页面,然后在 检查点路径 里选择最新训练的模型记录,然后点击Chat模块,再依次点击:卸载模型、加载模型即可加载我们微调的模型。

在这里插入图片描述随便输入两句古文,看看微调模型古文续写效果,可以看出效果还是有的,但由于微调数据集比较小,效果不是那么好。
在这里插入图片描述下面是同一个 prompt ,默认的Qwen2-0.5B-Instruct模型回复结果。

在这里插入图片描述

模型导出

除了训练和推理,LLaMA-Factory 还提供了导出训练好的微调模型功能。

选在检查点路径里选择自己要导出的微调模型,然后页面点击Export,设置导出目录,以为我例子,我存储在 /mnt/example/guwen 里, 机器里 /mnt 对应矩池云的网盘,机器释放后数据也在,还可以在矩池云网盘下载数据到本地,我一般都会将代码、数据以及运行结果存在在 /mnt 下,方便后面使用,或者离线下载。

在这里插入图片描述导出模型程序运行日志:
在这里插入图片描述导出成功后,矩池云网盘目录下对应文件:
在这里插入图片描述

微调模型使用方法

直接用Qwen官方给的模型调用方法即可,完全适配,仅需将默认的模型路径改成我们自己模型存储路径,比如我的是/mnt/example/guwen,将下面代码中的 /mnt/example/guwen 改成上一步中你导出模型设置的路径即可。

prompt 改成你要问的问题,system_prompt 改成你想设置的角色描述。

from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "/mnt/example/guwen",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("/mnt/example/guwen")

prompt = "高山仰止,景行行止"
system_prompt = "古文续写助手"
messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)

在这里插入图片描述

保存环境

最后,如果你对环境进行了其他配置修改,暂时不用机器了,可以先租用页面点击:更多–保存环境到个人网盘,这样下次租用从保存环境启动就不需要重新配置啦。

在这里插入图片描述

如果你复现有什么问题,或者有什么AI项目复现需求,欢迎评论交流,知无不言。

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐