覆盖LoRA、llama.cpp和KitOps的完整教程,大幅降低本地模型微调门槛;对想自主微调大模型的开发者极有价值。
刚开始接触 LLM 可能会让人望而生畏。在本教程中,我们将向你展示如何使用 LoRA 对大语言模型进行微调,并借助 llama.cpp 和 KitOps 等工具简化整个过程。
LoRA(Low-Rank Adaptation,低秩适配)是一种能够以极低计算开销高效适配预训练模型的技术。我们将通过简单易懂的步骤,带你完成环境设置、模型适配和部署。
开始之前,你需要安装 Kit CLI,并从 Llama 下载一个可执行文件。
你的系统中需要安装 Kit CLI——安装指南
来自 llama.cpp 项目的 finetune 可执行文件——在此下载
创建项目目录:
mkdir /lora_finetuning
使用 Kit CLI 登录 GitHub Container Registry。此操作需要你的 GitHub 用户名和密码。你也可以使用其他任何兼容 OCI artifacts 的 registry。
在项目目录(/lora_finetuning)中创建一个 Kitfile,内容如下:
manifestVersion: "1.0"
package:
name: llama3 fine-tuned
version: 3.0.0
authors: ["Jozu AI"]
model:
name: llama3-8B-instruct-q4_0
path: ghcr.io/jozu-ai/llama3:8B-instruct-q4_0
description: Llama 3 8B instruct model
license: Apache 2.0
注意:你是否发现,这里的 path 指向了另一个 ModelKit?在本例中,它指向 ghcr.io/jozu-ai/llama3:8B-instruct-q4_0。
现在,通过执行以下命令创建初始 ModelKit:
kit pack /lora_finetuning -t fine-tuning:untuned
接下来,将 ModelKit 解包到工作目录。请注意,Kit CLI 还会把你所引用的模型解包到工作目录中,以便你对其进行处理。
kit unpack fine-tuning:untuned -d /lora_finetuning --overwrite
建议使用与基础模型相同的 prompt 格式,不过任何文本文件都可以使用。理想情况下,应提供一个不会出现在训练数据中的通用字符串,用于分隔各个示例,例如 '<s>'。
<s> Example one text here. <s> Example two text here.
从项目目录运行微调命令:
cd /lora_finetuning
llama.cpp\finetune.exe --model-base ./llama3-8B-instruct-q4_0.gguf --train-data ./training-data.txt --threads 8 --sample-start "<s>" --lora-out lora_adapter.gguf
接下来,我们将更新 Kitfile,把 LoRA Adapter 包含进来:
manifestVersion: "1.0"
package:
name: llama3 fine-tuned
version: 3.0.0
authors: ["Jozu AI"]
model:
name: llama3-8B-instruct-q4_0
path: ghcr.io/jozu-ai/llama3:8B-instruct-q4_0
description: Llama 3 8B instruct model
license: Apache 2.0
parts:
- path: ./lora-adapter.gguf
type: lora-adapter
datasets:
- name: fine-tune-data
path: ./training-data.txt
作为最佳实践,我们建议将训练数据包含在 ModelKit 中,这样可以更轻松地进行后续多轮训练。不过,对于生产环境部署而言,这并不是必需的。
打包微调后的模型:
kit pack /lora_finetuning -t fine-tuning:tuned
为模型添加远程 repository 标签:
kit tag fine-tuning:tuned ghcr.io/jozuuser/finetuned:latest
将 ModelKit 推送到 Remote Repository:
kit push ghcr.io/jozuuser/finetuned:latest
恭喜,你微调后的模型现在已经完成打包,可以部署了。你已经成功更新 Kitfile、打包模型,并将其推送到远程 repository,使其可以在各种应用中使用。
如果你觉得本教程对你有所帮助,欢迎加入 KitOps Discord server,并为 KitOps GitHub repo 点亮 Star,以支持该项目。