examples/
├── lora_single_gpu/
│   ├── pretrain.sh: 基于 LoRA 进行增量预训练
│   ├── sft.sh: 基于 LoRA 进行指令监督微调
│   ├── reward.sh: 基于 LoRA 进行奖励模型训练
│   ├── ppo.sh: 基于 LoRA 进行 PPO 训练
│   ├── dpo.sh: 基于 LoRA 进行 DPO 训练
│   ├── orpo.sh: 基于 LoRA 进行 ORPO 训练
│   ├── prepare.sh: 保存预处理后的数据集
│   └── predict.sh: 基于 LoRA 进行批量预测并计算 BLEU 和 ROUGE 分数
├── qlora_single_gpu/
│   ├── bitsandbytes.sh: 基于 QLoRA 微调 4/8 比特 BNB 模型
│   ├── gptq.sh: 基于 QLoRA 微调 4/8 比特 GPTQ 模型
│   ├── awq.sh: 基于 QLoRA 微调 4 比特 AWQ 模型
│   └── aqlm.sh: 基于 QLoRA 微调 2 比特 AQLM 模型
├── lora_multi_gpu/
│   ├── single_node.sh: 使用 Accelerate 进行单节点 LoRA 训练
│   └── multi_node.sh: 使用 Accelerate 进行多节点 LoRA 训练
├── full_multi_gpu/
│   ├── single_node.sh: 使用 DeepSpeed 进行单节点全量训练
│   ├── multi_node.sh: 使用 DeepSpeed 进行多节点全量训练
│   └── predict.sh: 基于全量训练进行批量预测并计算 BLEU 和 ROUGE 分数
├── merge_lora/
│   ├── merge.sh: 将 LoRA 权重合并到预训练模型
│   └── quantize.sh: 使用 AutoGPTQ 量化微调后的模型
├── inference/
│   ├── cli_demo.sh: 启动 LoRA 模型的命令行推理接口
│   ├── api_demo.sh: 启动 LoRA 模型的 OpenAI 风格 API
│   ├── web_demo.sh: 启动 LoRA 模型的浏览器推理接口
│   └── evaluate.sh: 在 MMLU/CMMLU/C-Eval 数据集上评测 LoRA 模型
└── extras/
    ├── galore/
    │   └── sft.sh: 使用 GaLore 训练模型
    ├── badam/
    │   └── sft.sh: 使用 BAdam 训练模型
    ├── loraplus/
    │   └── sft.sh: 使用 LoRA+ 训练模型
    ├── llama_pro/
    │   ├── expand.sh: 扩展模型中的层
    │   └── sft.sh: 训练扩展后的模型
    └── fsdp_qlora/
        └── sft.sh: 使用 FSDP+QLoRA 微调量化模型

├── lora_single_gpu/
│   ├── pretrain.sh: 基于 LoRA 进行增量预训练


  
  1. #! /bin /bash
  2. CUDA_VISIBLE_DEVICES = 0 python .. /.. /src /train_bash.py \
  3. --stage pt \
  4. --do_train \
  5. --model_name_ or_path meta-llama /Llama- 2- 7b-hf \
  6. --dataset c 4_demo \
  7. --dataset_dir .. /.. / data \
  8. --finetuning_ type lora \
  9. --lora_target q_proj,v_proj \
  10. -- output_dir .. /.. /saves /LLaMA 2- 7B /lora /pretrain \
  11. --overwrite_cache \
  12. --overwrite_ output_dir \
  13. --cutoff_len 1024 \
  14. --preprocessing_num_workers 16 \
  15. --per_device_train_batch_ size 1 \
  16. --per_device_eval_batch_ size 1 \
  17. --gradient_accumulation_steps 8 \
  18. --lr_scheduler_ type cosine \
  19. --logging_steps 10 \
  20. --warmup_steps 20 \
  21. --save_steps 100 \
  22. --eval_steps 100 \
  23. --evaluation_strategy steps \
  24. --load_best_model_ at_ end \
  25. --learning_rate 5e- 5 \
  26. --num_train_epochs 3.0 \
  27. --max_samples 10000 \
  28. --val_ size 0.1 \
  29. --plot_loss \
  30. --fp 16
LLaMA-Factory/src/train_bash.py

  
  1. from llmtuner import run_exp
  2. def main():
  3. run_exp()
  4. def _mp_fn(index):
  5. # For xla_spawn (TPUs)
  6. main()
  7. if __name__ == "__main__":
  8. main()

def run_exp() -> LLaMA-Factory/src/llmtuner/train/tuner.py


  
  1. def run_exp(args: Optional[Dict[str, Any]] = None, callbacks: Optional[List[ "TrainerCallback"]] = None):
  2. model_args, data_args, training_args, finetuning_args, generating_args = get_train_args(args)
  3. callbacks = [LogCallback()] if callbacks is None else callbacks
  4. if finetuning_args.stage = = "pt":
  5. run_pt(model_args, data_args, training_args, finetuning_args, callbacks)
  6. elif finetuning_args.stage = = "sft":
  7. run_sft(model_args, data_args, training_args, finetuning_args, generating_args, callbacks)
  8. elif finetuning_args.stage = = "rm":
  9. run_rm(model_args, data_args, training_args, finetuning_args, callbacks)
  10. elif finetuning_args.stage = = "ppo":
  11. run_ppo(model_args, data_args, training_args, finetuning_args, generating_args, callbacks)
  12. elif finetuning_args.stage = = "dpo":
  13. run_dpo(model_args, data_args, training_args, finetuning_args, callbacks)
  14. elif finetuning_args.stage = = "orpo":
  15. run_orpo(model_args, data_args, training_args, finetuning_args, callbacks)
  16. else:
  17. raise ValueError( "Unknown task.")
  18. def export_model(args: Optional[Dict[str, Any]] = None):
  19. model_args, data_args, finetuning_args, _ = get_infer_args(args)
  20. if model_args.export_dir is None:
  21. raise ValueError( "Please specify `export_dir` to save model.")
  22. if model_args.adapter_name_ or_path is not None and model_args.export_quantization_ bit is not None:
  23. raise ValueError( "Please merge adapters before quantizing the model.")
  24. tokenizer = load_tokenizer(model_args)
  25. get_template_ and_fix_tokenizer(tokenizer, data_args.template)
  26. model = load_model(tokenizer, model_args, finetuning_args) # must after fixing tokenizer to resize vocab
  27. if getattr(model, "quantization_method", None) and model_args.adapter_name_ or_path is not None:
  28. raise ValueError( "Cannot merge adapters to a quantized model.")
  29. if not isinstance(model, PreTrainedModel):
  30. raise ValueError( "The model is not a `PreTrainedModel`, export aborted.")
  31. if getattr(model, "quantization_method", None) is None: # cannot convert dtype of a quantized model
  32. output_dtype = getattr(model.config, "torch_dtype", torch.float 16)
  33. setattr(model.config, "torch_dtype", output_dtype)
  34. model = model. to( output_dtype)
  35. model.save_pretrained(
  36. save_directory =model_args.export_dir,
  37. max_shard_ size = "{}GB". format(model_args.export_ size),
  38. safe_serialization =( not model_args.export_legacy_ format),
  39. )
  40. if model_args.export_hub_model_id is not None:
  41. model.push_ to_hub(
  42. model_args.export_hub_model_id,
  43. token =model_args.hf_hub_token,
  44. max_shard_ size = "{}GB". format(model_args.export_ size),
  45. safe_serialization =( not model_args.export_legacy_ format),
  46. )
  47. try:
  48. tokenizer.padding_side = "left" # restore padding side
  49. tokenizer.init_kwargs[ "padding_side"] = "left"
  50. tokenizer.save_pretrained(model_args.export_dir)
  51. if model_args.export_hub_model_id is not None:
  52. tokenizer.push_ to_hub(model_args.export_hub_model_id, token =model_args.hf_hub_token)
  53. except Exception:
  54. logger.warning( "Cannot save tokenizer, please copy the files manually.")
  55. if __name__ = = "__main__":
  56. run_exp()

from typing import TYPE_CHECKING, Any, Dict, List, Optional

import torch
from transformers import PreTrainedModel

from ..data import get_template_and_fix_tokenizer
from ..extras.callbacks import LogCallback
from ..extras.logging import get_logger
from ..hparams import get_infer_args, get_train_args
from ..model import load_model, load_tokenizer
from .dpo import run_dpo
from .orpo import run_orpo
from .ppo import run_ppo
from .pt import run_pt
from .rm import run_rm
from .sft import run_sft


if TYPE_CHECKING:
    from transformers import TrainerCallback


logger = get_logger(__name__)

def run_pt() -> LLaMA-Factory/src/llmtuner/train/pt/workflow.py


  
  1. def run_pt(
  2. model_args: "ModelArguments",
  3. data_args: "DataArguments",
  4. training_args: "Seq2SeqTrainingArguments",
  5. finetuning_args: "FinetuningArguments",
  6. callbacks: Optional[List[ "TrainerCallback"]] = None,
  7. ):
  8. tokenizer = load_tokenizer(model_args)
  9. dataset = get_dataset(tokenizer, model_args, data_args, training_args, stage = "pt")
  10. model = load_model(tokenizer, model_args, finetuning_args, training_args.do_train)
  11. data_collator = DataCollatorForLanguageModeling(tokenizer =tokenizer, mlm = False)
  12. # Initialize our Trainer
  13. trainer = CustomTrainer(
  14. model =model,
  15. args =training_args,
  16. finetuning_args =finetuning_args,
  17. tokenizer =tokenizer,
  18. data_collator = data_collator,
  19. callbacks =callbacks,
  20. **split_dataset(dataset, data_args, training_args),
  21. )
  22. # Training
  23. if training_args.do_train:
  24. train_result = trainer.train( resume_ from_checkpoint =training_args. resume_ from_checkpoint)
  25. trainer.save_model()
  26. trainer.log_metrics( "train", train_result.metrics)
  27. trainer.save_metrics( "train", train_result.metrics)
  28. trainer.save_state()
  29. if trainer. is_world_process_ zero() and finetuning_args.plot_loss:
  30. plot_loss(training_args. output_dir, keys =[ "loss", "eval_loss"])
  31. # Evaluation
  32. if training_args.do_eval:
  33. metrics = trainer. evaluate(metric_ key_prefix = "eval")
  34. try:
  35. perplexity = math.exp(metrics[ "eval_loss"])
  36. except OverflowError:
  37. perplexity = float( "inf")
  38. metrics[ "perplexity"] = perplexity
  39. trainer.log_metrics( "eval", metrics)
  40. trainer.save_metrics( "eval", metrics)
  41. # Create model card
  42. create_modelcard_ and_push(trainer, model_args, data_args, training_args, finetuning_args)

  
  1. # Inspired by: https: / /github.com /huggingface /transformers /blob /v 4.34.1 /examples /pytorch /language-modeling / run_clm.py
  2. import math
  3. from typing import TYPE_CHECKING, List, Optional
  4. from transformers import DataCollatorForLanguageModeling
  5. from ... data import get_dataset, split_dataset
  6. from ...extras.ploting import plot_loss
  7. from ...model import load_model, load_tokenizer
  8. from ..utils import create_modelcard_ and_push
  9. from .trainer import CustomTrainer
  10. if TYPE_CHECKING:
  11. from transformers import Seq 2SeqTrainingArguments, TrainerCallback
  12. from ...hparams import DataArguments, FinetuningArguments, ModelArguments

train() 方法调用的Transformers包底层train()方法

大模型底层 transformers源码解析之trainer.py-CSDN博客

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐