ymcui/Chinese-LLaMA-Alpaca-3

新人请教

lingaoan2024 opened this issue · 4 comments

提交前必须检查以下项目

  • 请确保使用的是仓库最新代码(git pull)
  • 已阅读项目文档FAQ章节并且已在Issue中对问题进行了搜索,没有找到相似问题和解决方案。
  • 第三方插件问题:例如llama.cpptext-generation-webui等,建议优先去对应的项目中查找解决方案。

问题类型

模型训练与精调

基础模型

Llama-3-Chinese-8B-Instruct(指令模型)

操作系统

Linux

详细描述问题

刚接触AI,很多地方不熟悉,目前情况是训练后,提问没有任何效果,不知道问题出在哪儿,可能是操作步骤和理解有误
电脑配置情况:inter i7-12700,32G内存,RTX 3060(12GB专用+15GB共享),操作系统是win11,+wsl(ubuntu发行版)
1、下载llama-3-chinese-8b-instruct-v3.git,希望能在这个模型基础上,增加一些我自己的个人知识库内容
2、通过调整run_pt.sh
#!/bin/bash

运行脚本前请仔细阅读wiki(https://github.com/ymcui/Chinese-LLaMA-Alpaca-3/wiki/pt_scripts_zh)

Read the wiki(https://github.com/ymcui/Chinese-LLaMA-Alpaca-3/wiki/pt_scripts_en) carefully before running the script

lr=1e-4
lora_rank=64
lora_alpha=128
lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
##modules_to_save="embed_tokens,lm_head"
modules_to_save=None
lora_dropout=0.05

pretrained_model=/mnt/d/linux/ollama/llama-3-chinese-8b-instruct-v3
tokenizer_name_or_path=${pretrained_model}
dataset_dir=/mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/ptdata
data_cache=/mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/temp_data_cache_dir
per_device_train_batch_size=1
gradient_accumulation_steps=16
block_size=1024
output_dir=/mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/output_dir

torchrun --nnodes 1 --nproc_per_node 1 run_clm_pt_with_peft.py
--model_name_or_path ${pretrained_model}
--tokenizer_name_or_path ${tokenizer_name_or_path}
--dataset_dir ${dataset_dir}
--data_cache_dir ${data_cache}
--validation_split_percentage 0.001
--per_device_train_batch_size ${per_device_train_batch_size}
--do_train
--low_cpu_mem_usage
--seed $RANDOM
--bf16
--num_train_epochs 1
--lr_scheduler_type cosine
--learning_rate ${lr}
--warmup_ratio 0.05
--weight_decay 0.01
--logging_strategy steps
--logging_steps 10
--save_strategy steps
--save_total_limit 3
--save_steps 200
--gradient_accumulation_steps ${gradient_accumulation_steps}
--preprocessing_num_workers 4
--block_size ${block_size}
--output_dir ${output_dir}
--overwrite_output_dir
--ddp_timeout 30000
--logging_first_step True
--lora_rank ${lora_rank}
--lora_alpha ${lora_alpha}
--trainable ${lora_trainable}
--lora_dropout ${lora_dropout}
--modules_to_save ${modules_to_save}
--torch_dtype bfloat16
--load_in_kbits 16
--ddp_find_unused_parameters False
昨晚测试时出现CUDA内存溢出情况,今天又能正常训练了。
(3)/mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/ptdata目录中的txt不是json格式文件,是csv数据表格式,然后直接转换为txt文件(UTF8)
(4)训练结束后,未报错的情况下,输出模型文件(.safetensors),大小只有300度MB,所以我就进行了合并
(5)合并脚本,基于训练前的模型和训练后的模型进行的合并
python scripts/merge_llama3_with_chinese_lora_low_mem.py
--base_model /mnt/d/linux/ollama/llama-3-chinese-8b-instruct-v3
--lora_model /mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/output_dir
--output_dir /mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/merge_output
(6)然后开始量化llama.cpp
python3 convert-hf-to-gguf.py /mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/merge_sft_output

./llama-quantize /mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/merge_sft_output/ggml-model-f16.gguf /mnt/d/linux/ollama/Chinese-LLaMA-Alpaca-3/merge_sft_output/model-q4_0.gguf q4_0
(7)通过(6)两句代码生成gguf文件后,用ollama create并run,尝试提问,没有任何效果。
(8)然后又尝试了更换训练数据为json格式
[
{
"instruction": "你是谁?",
"input": "",
"output": "我是经过重新训练过的智慧小助手,有什么可以帮到您吗?"
}
]
(9)用run_sft.sh进行指令训练,最后量化安装后,还是没有效果。


请教各位老师,这是哪个步骤出现了问题,期待您的指导

依赖情况(代码类问题务必提供)

# 请在此处粘贴依赖情况(请粘贴在本代码块里)

运行日志或截图

# 请在此处粘贴运行日志(请粘贴在本代码块里)
  1. 在instruct模型上通常是做SFT而不是PT;
  2. 并不是说SFT之后模型就一定会记住,和你的训练轮数、学习率等都有关系,训的越久越有可能记住,但也要注意旧知识也会产生遗忘;
  3. 量化后的模型效果会变差。

@ymcui 谢谢你帮忙看我的问题,继续请教一下,我操作的步骤是否有误?训练后新的模型文件只有300多MB,我用训练前的模型与之合并,然后再转换为gguf格式
另外,你们是如何验证训练获得一定效果的?谢谢大佬指点一二

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your consideration.

Closing the issue, since no updates observed. Feel free to re-open if you need any further assistance.