使用Colab_LLaMA_Factory_LoRA微调_Llama3(可自定义数据)

使用 LLaMA Factory 微调 Llama-3 中文对话模型

项目主页: https://github.com/hiyouga/LLaMA-Factory

这个过程超级简单,半个多小时在T4上就能跑完。

完全可以替换成自己的数据,支持中文数据。

安装 LLaMA Factory 依赖

<pre style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 16px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(255, 255, 255); border-radius: 6px;">

1%cd /content/ 2%rm -rf LLaMA-Factory 3!git clone https://github.com/hiyouga/LLaMA-Factory.git 4%cd LLaMA-Factory 5%ls 6!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" 7!pip install --no-deps xformers==0.0.25 8!pip install .[bitsandbytes]

</pre>

更新自我认知数据集

<pre style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 16px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(255, 255, 255); border-radius: 6px;">

1import json 2 3%cd /content/LLaMA-Factory/ 4 5NAME = "New LLama3" 6AUTHOR = "AI ONES" 7 8with open("data/identity.json", "r", encoding="utf-8") as f: 9 dataset = json.load(f) 10 11for sample in dataset: 12 sample["output"] = sample["output"].replace("NAME", NAME).replace("AUTHOR", AUTHOR) 13 14with open("data/identity.json", "w", encoding="utf-8") as f: 15 json.dump(dataset, f, indent=2, ensure_ascii=False)

</pre>

微调过程大约需要 30 分钟。

<pre style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 16px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(255, 255, 255); border-radius: 6px;">

1from llmtuner import run_exp 2from llmtuner.extras.misc import torch_gc 3 4%cd /content/LLaMA-Factory/ 5 6run_exp(dict( 7 stage="sft", # 进行指令监督微调 8 do_train=True, 9 model_name_or_path="unsloth/llama-3-8b-Instruct-bnb-4bit", # 使用 4 比特量化版 Llama-3-8b-Instruct 模型 10 dataset="identity,alpaca_gpt4_en,alpaca_gpt4_zh", # 使用 alpaca 和自我认知数据集 11 template="llama3", # 使用 llama3 提示词模板 12 finetuning_type="lora", # 使用 LoRA 适配器来节省显存 13 lora_target="all", # 添加 LoRA 适配器至全部线性层 14 output_dir="llama3_lora", # 保存 LoRA 适配器的路径 15 per_device_train_batch_size=2, # 批处理大小 16 gradient_accumulation_steps=4, # 梯度累积步数 17 lr_scheduler_type="cosine", # 使用余弦学习率退火算法 18 logging_steps=10, # 每 10 步输出一个记录 19 warmup_ratio=0.1, # 使用预热学习率 20 save_steps=1000, # 每 1000 步保存一个检查点 21 learning_rate=5e-5, # 学习率大小 22 num_train_epochs=3.0, # 训练轮数 23 max_samples=300, # 使用每个数据集中的 300 条样本 24 max_grad_norm=1.0, # 将梯度范数裁剪至 1.0 25 quantization_bit=4, # 使用 4 比特 QLoRA 26 loraplus_lr_ratio=16.0, # 使用 LoRA+ 算法并设置 lambda=16.0 27 use_unsloth=True, # 使用 UnslothAI 的 LoRA 优化来加快一倍的训练速度 28 fp16=True, # 使用 float16 混合精度训练 29)) 30 31torch_gc()

</pre>

模型推理

<pre style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 16px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: rgb(255, 255, 255); border-radius: 6px;">

1from llmtuner import ChatModel 2from llmtuner.extras.misc import torch_gc 3 4%cd /content/LLaMA-Factory/ 5 6chat_model = ChatModel(dict( 7 model_name_or_path="unsloth/llama-3-8b-Instruct-bnb-4bit", # 使用 4 比特量化版 Llama-3-8b-Instruct 模型 8 adapter_name_or_path="llama3_lora", # 加载之前保存的 LoRA 适配器 9 finetuning_type="lora", # 和训练保持一致 10 template="llama3", # 和训练保持一致 11 quantization_bit=4, # 加载 4 比特量化模型 12 use_unsloth=True, # 使用 UnslothAI 的 LoRA 优化来加快一倍的推理速度 13)) 14 15messages = [] 16while True: 17 query = input("\nUser: ") 18 if query.strip() == "exit": 19 break 20 21 if query.strip() == "clear": 22 messages = [] 23 torch_gc() 24 print("History has been removed.") 25 continue 26 27 messages.append({"role": "user", "content": query}) # 把提示词添加到消息中 28 print("Assistant: ", end="", flush=True) 29 response = "" 30 for new_text in chat_model.stream_chat(messages): # 流式输出 31 print(new_text, end="", flush=True) 32 response += new_text 33 print() 34 messages.append({"role": "assistant", "content": response}) # 把回答添加到消息中 35 36torch_gc()

</pre>

colab代码地址:https://colab.research.google.com/drive/1RF1YuGTyUHFcVCLUO36KwqCBSr1G_n6w?usp=sharing

原创声明:本文为本人原创作品,首发于AI ONES https://wuxiongwei.com,如果转载,请保留本文链接,谢谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容