一、定义
环境配置 案例: https://zhuanlan.zhihu.com/p/695287607 chatglm3 案例 多卡训练deepspeed llama factory 案例Qwen1.5 报错二、实现
环境配置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]' 如果发生冲突: pip install --no-deps -e .
同时对本库的基础安装做一下校验,输入以下命令获取训练相关的参数指导, 否则说明库还没有安装成功
llamafactory-cli train -h
模型下载与可用性校对
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
import transformers import torch # 切换为你下载的模型文件目录, 这里的demo是Llama-3-8B-Instruct # 如果是其他模型,比如qwen,chatglm,请使用其对应的官方demo model_id = "/home/Meta-Llama-3-8B-Instruct" pipeline = transformers.pipeline( "text-generation", model=model_id, model_kwargs={"torch_dtype": torch.bfloat16}, device_map="auto", ) messages = [ {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"}, {"role": "user", "content": "Who are you?"}, ] prompt = pipeline.tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) terminators = [ pipeline.tokenizer.eos_token_id, pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>") ] outputs = pipeline( prompt, max_new_tokens=256, eos_token_id=terminators, do_sample=True, temperature=0.6, top_p=0.9, ) print(outputs[0]["generated_text"][len(prompt):])
2. 案例: https://zhuanlan.zhihu.com/p/695287607
2.1 数据准备
将该自定义数据集放到我们的系统中使用,则需要进行如下两步操作
a 复制该数据集到 data目录下
b 修改 data/dataset_info.json 新加内容完成注册, 该注册同时完成了3件事
b1 自定义数据集的名称为adgen_local,后续训练的时候就使用这个名称来找到该数据集
b2 指定了数据集具体文件位置
b3 定义了原数据集的输入输出和我们所需要的格式之间的映射关系
2. 微调:
下载模型
>> git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \ --stage sft \ --do_train \ --model_name_or_path /home/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
或者:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train ./examples/train_lora/llama3_lora_sft.yaml
3. 推理
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat ./examples/inferce/llama3_lora_sft.yaml
或
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat \ --model_name_or_path /home/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --template llama3 \ --finetuning_type lora
4. 批量预测与训练效果评估
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat ./examples/train/llama3_lora_predict.yaml
或
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \ --stage sft \ --do_predict \ --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --dataset alpaca_gpt4_zh,identity,adgen_local \ --dataset_dir ./data \ --template llama3 \ --finetuning_type lora \ --output_dir ./saves/LLaMA3-8B/lora/predict \ --overwrite_cache \ --overwrite_output_dir \ --cutoff_len 1024 \ --preprocessing_num_workers 16 \ --per_device_eval_batch_size 1 \ --max_samples 20 \ --predict_with_generate
5. LoRA模型合并导出
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \ --model_name_or_path /home/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
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export ./examples/merge_lora/llama3_lora_sft.yaml
6. api 调用
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 nohup llamafactory-cli api \ --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --template llama3 \ --finetuning_type lora
项目也支持了基于vllm 的推理后端,但是这里由于一些限制,需要提前将LoRA 模型进行merge,使用merge后的完整版模型目录或者训练前的模型原始目录都可。
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 nohup llamafactory-cli api \ --model_name_or_path megred-model-path \ --template llama3 \ --infer_backend vllm \ --vllm_enforce_eager>output.log 2>&1 &
import os from openai import OpenAI from transformers.utils.versions import require_version require_version("openai>=1.5.0", "To fix: pip install openai>=1.5.0") if __name__ == '__main__': # change to your custom port port = 8000 client = OpenAI( api_key="0", base_url="http://localhost:{}/v1".format(os.environ.get("API_PORT", 8000)), ) messages = [] messages.append({"role": "user", "content": "hello, where is USA"}) result = client.chat.completions.create(messages=messages, model="test") print(result.choices[0].message)
7. 测试
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval ./examples/train/llama3_lora_eval.yaml
或
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \ --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \ --template llama3 \ --task mmlu \ --split validation \ --lang en \ --n_shot 5 \ --batch_size 1
chatglm3 案例
见专题模块
多卡训练deepspeed
多卡看llama3_lora_sft_ds0.yaml
报错
1,RuntimeError: Failed to import trl.trainer.dpo_trainer because of the following error (look up to see its traceback):
‘FieldInfo’ object has no attribute ‘required’
解决:换干净的环境,重新安装。
总结
**文章总结**本文重点介绍了环境配置和实现步骤等内容,特别针对LLaMA-Factory项目,旨在帮助读者成功配置和使用该项目进行大模型(如Llama、Qwen、ChatGLM等)的训练、部署和测试。
**一、环境配置基础**
- **定义**:文章首先介绍了环境配置,其中包含了案例链接和多个大模型的场景应用,如多卡训练deepspeed和LLaMA Factory实例。
- **实现**:
- 提供了详细的git仓库克隆、conda环境创建与激活、pip包安装等步骤。
- 描述了如何校验库的安装,以及如何进行模型下载和可用性校核。
**二、实现指引**
- **模型下载与校验**:详细说明了如何获取Meta Llama 3-8B-Instruct等模型,并通过transformers库进行校验和使用。
- **数据准备与微调**:
- 解释了如何将自定义数据集添加到系统中并配置dataset_info.json文件,以进行模型的微调。
- 提供了微调过程中的参数配置示例和命令,以及如何运行LoRA方法。
- **推理、预测与评估**:
- 展示了如何从现有模型中生成对话、进行批量预测,以及对训练效果进行评估。
- 解释了LoRA模型的合并导出过程,以便模型的迁移和使用。
- **API调用与测试**:
- 提供了如何通过API端口调用LLaMA Factory训练好的模型,以及如何基于VLLM进行推理后端的设置。
- 导出了如何进行模型评估的代码示例。
- **特殊场景与错误解决**:特别提到了chatglm3案例和如何使用deepspeed进行多卡训练,以及解决import错误的建议。
**总结**
文章为想要使用LLaMA-Factory项目进行大模型训练、微调、评估和部署的开发者提供了详细的环境配置指导和实际操作步骤,同时提供了解决常见问题的方法,帮助开发者顺利地应用该技术进行研究和开发。 llamactoclichatapillmtokengit数据集tpuamlopenaiprompttransformertransformers大模型coding自定义clone数据准备