马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.利用环境
Linux -Ubuntu20.04 RTX3090 24GB, LORA+sft 练习微调
2. 下载项目,虚拟环境创建及安装:
- git clone https://github.com/hiyouga/LLaMA-Factory.git
- conda create -n llama_factory python=3.10
- conda activate llama_factory
- cd LLaMA-Factory
- pip install -e '.[torch,metrics]'
复制代码 安装完成之后,做一下简单的正确性校验。具体如下:
2.1 Torch库校验
- import torch
- torch.cuda.current_device()
- torch.cuda.get_device_name(0)
- torch.__version__
复制代码 显示如下:
2.2 llamafactory库校验
- llamafactory-cli train -h
复制代码 查看能否正常显示资助文档。安装正常会显示如下内容。
3 模子下载及可用性验证
以Meta-Llama-3-8B-Instruct为例,通过huggingface 下载(有墙)
- git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
复制代码 或者 modelscope 下载(无墙)
- git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
复制代码 在Linux下,下载完成后的文件夹大小大约是16.1GB。
运行
- CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
- --model_name_or_path /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
- --template llama3
复制代码 此中 --model_name_or_path 后面的参数改成自己的模子存放路径。
llamafactory-cli 的命令参数包括 :
动作参数枚举参数阐明version显示版本信息train命令行版本练习chat命令行版本推理chatexport模子归并和导出api启动API server,供接口调用eval利用mmlu等标准数据集做评测webchat前端版本纯推理的chat页面webui启动LlamaBoard前端页面,包含可视化练习,猜测,chat,模子归并多个子页面 参数名称参数阐明model_name_or_path参数的名称(huggingface或者modelscope上的标准定义,如“meta-llama/Meta-Llama-3-8B-Instruct”), 或者是本地下载的绝对路径,如:/your/path-for-LLma-model/Meta-Llama-3-8B-Instructtemplate模子问答时所利用的prompt模板,不同模子不同,请参考 https://github.com/hiyouga/LLaMA-Factory?tab=readme-ov-file#supported-models 获取不同模子的模板定义,否则会回答结果会很奇怪或导致重复天生等征象的出现。chat 版本的模子根本都需要指定,比如Meta-Llama-3-8B-Instruct的template 就是 llama3 另外一种通过设置文件运行上述程序的方式如下:
打开llamafactory文件夹中的examples/inference/llama3.yaml,编辑此中的参数,
- model_name_or_path: /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct
- template: llama3
复制代码 然后执行如下命令:
- llamafactory-cli webchat examples/inference/llama3.yaml
复制代码 同样也可以启动模子并通过webchat端举行交互。
一样平常情况程序会自己跳出网页,如果没有跳出网页,可以通过在浏览器中输入 “http://localhost:7860/”,再回车举行访问。
4 数据集的构建
4.1 单轮对话样例
- {
- "instruction": "写一个有效的比较语句",
- "input": "篮球和足球",
- "output": "篮球和足球都是受欢迎的运动。"
- }
复制代码- {
- "content": "类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤",
- "summary": "宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长2米的效果宽松的裤腿,当然是遮肉小能手啊。上身随性自然不拘束,面料亲肤舒适贴身体验感棒棒哒。系带部分增加设计看点,还让单品的设计感更强。腿部线条若隐若现的,性感撩人。颜色敲温柔的,与裤子本身所呈现的风格有点反差萌。"
- }
复制代码 4.2 多轮对话样例
- {
- "instruction": "谢谢",
- "input": "",
- "output": "不用谢! 很高兴我提供的信息能够帮助到你! 如果还有什么其他问题也可以向我提问。",
- "history": [
- [
- "请你给我写一个面试准备计划,我想要去面试微软的程序员岗位",
- "首先,你可以去微软官网寻找招聘信息并申请面试。\n其次,您可以在社交媒体平台寻找微软公司对程序员的面试问题,并做好准备。\n最后,您可以自己对面试过程进行模拟,熟悉话题并减少紧张感。\n我希望你能面试成功。"
- ]
- ]
- }
复制代码 这里需要注意的是,自己制作的数据集是需要在data/dataset_info.json 这个文件中举行注册的。中间有大量的已经注册过的数据集,可以自己参考找到雷同的注册信息,自行添加在文件末了。
如:
单轮对话数据集注册
"cosmopedia": {
"hf_hub_url": "HuggingFaceTB/cosmopedia", #这是在HuggingFaceTB/cosmopedia中的名称
"columns": {
"prompt": "prompt", #提示词
"response": "text" #反馈结果
}
对于数据集在本地的注册
"dpo_zh_demo": {
"file_name": "dpo_zh_demo.json", #数据集文件名,如果不在当前路径需要包含当前路径
"ranking": true,
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"chosen": "chosen",
"rejected": "rejected"
}
}
5 lora微调指令
- CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
- --stage sft \
- --do_train \
- --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \
- --dataset alpaca_gpt4_zh,identity,adgen_local \
- --dataset_dir ./data \
- --template llama3 \
- --finetuning_type lora \
- --output_dir ./saves/LLaMA3-8B/lora/sft \
- --overwrite_cache \
- --overwrite_output_dir \
- --cutoff_len 1024 \
- --preprocessing_num_workers 16 \
- --per_device_train_batch_size 2 \
- --per_device_eval_batch_size 1 \
- --gradient_accumulation_steps 8 \
- --lr_scheduler_type cosine \
- --logging_steps 50 \
- --warmup_steps 20 \
- --save_steps 100 \
- --eval_steps 50 \
- --evaluation_strategy steps \
- --load_best_model_at_end \
- --learning_rate 5e-5 \
- --num_train_epochs 5.0 \
- --max_samples 1000 \
- --val_size 0.1 \
- --plot_loss \
- --fp16
复制代码 比较紧张的参数枚举如下:
参数名称参数阐明stage当前练习的阶段,枚举值,有“sft”,"pt","rm","ppo"等,代表了练习的不同阶段,这里我们是有监视指令微调,所以是sftdo_train是否是练习模式dataset利用的数据集列表,全部字段都需要按上文在data_info.json里注册,多个数据集用","分隔dataset_dir数据集所在目次,这里是 data,也就是项目自带的data目次finetuning_type微调练习的类型,枚举值,有"lora","full","freeze"等,这里利用loraoutput_dir练习结果生存的位置cutoff_len练习数据集的长度截断per_device_train_batch_size每个设备上的batch size,最小是1,如果GPU 显存够大,可以得当增加fp16利用半精度混合精度练习max_samples每个数据集采样多少数据val_size随机从数据会合抽取多少比例的数据作为验证集 6 归并lora举行推理
- CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
- --model_name_or_path /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
- --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
- --template llama3 \
- --finetuning_type lora
复制代码 7模子归并导出
- CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
- --model_name_or_path /your/path-for-LLma-model/Meta-Llama-3-8B-Instruct \
- --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
- --template llama3 \
- --finetuning_type lora \
- --export_dir megred-model-path \
- --export_size 2 \
- --export_device cpu \
- --export_legacy_format False
复制代码 8 利用归并模子推理
- CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli webchat \
- --model_name_or_path megred-model-path \
- --template llama3 \
- --infer_backend vllm \
- --vllm_enforce_eager
复制代码 以上。
这里就全部结束了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |