Llama-Factory 简介 二, 脚本详解 LLaMA-Factory/src/train_bash.py LLaMA-Factory/src/llmtuner/train/pt/workfl_
examples/│├── pretrain.sh: 基于 LoRA 进行增量预训练│├── sft.sh: 基于 LoRA 进行指令监督│├── reward.sh: 基于 LoRA 进行奖励模型训练│├── ppo.sh: 基于 LoRA 进行 PPO 训练│├── dpo.sh: 基于 LoRA 进行 DPO 训练│├── orpo.sh: 基于 LoRA 进行ORPO 训练│├── pre
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 进行增量预训练
-
#!
/bin
/bash
-
-
CUDA_VISIBLE_DEVICES
=
0 python ..
/..
/src
/train_bash.py \
-
--stage pt \
-
--do_train \
-
--model_name_
or_path meta-llama
/Llama-
2-
7b-hf \
-
--dataset c
4_demo \
-
--dataset_dir ..
/..
/
data \
-
--finetuning_
type lora \
-
--lora_target q_proj,v_proj \
-
--
output_dir ..
/..
/saves
/LLaMA
2-
7B
/lora
/pretrain \
-
--overwrite_cache \
-
--overwrite_
output_dir \
-
--cutoff_len
1024 \
-
--preprocessing_num_workers
16 \
-
--per_device_train_batch_
size
1 \
-
--per_device_eval_batch_
size
1 \
-
--gradient_accumulation_steps
8 \
-
--lr_scheduler_
type cosine \
-
--logging_steps
10 \
-
--warmup_steps
20 \
-
--save_steps
100 \
-
--eval_steps
100 \
-
--evaluation_strategy steps \
-
--load_best_model_
at_
end \
-
--learning_rate
5e-
5 \
-
--num_train_epochs
3.0 \
-
--max_samples
10000 \
-
--val_
size
0.1 \
-
--plot_loss \
-
--fp
16
LLaMA-Factory/src/train_bash.py
-
from llmtuner import run_exp
-
-
-
def
main():
-
run_exp()
-
-
-
def
_mp_fn(index):
-
# For xla_spawn (TPUs)
-
main()
-
-
-
if __name__ ==
"__main__":
-
main()
def run_exp() -> LLaMA-Factory/src/llmtuner/train/tuner.py
-
def
run_exp(args:
Optional[Dict[str,
Any]]
= None, callbacks:
Optional[List[
"TrainerCallback"]]
= None):
-
model_args,
data_args, training_args, finetuning_args, generating_args
=
get_train_args(args)
-
callbacks
= [LogCallback()]
if callbacks
is None
else callbacks
-
-
if finetuning_args.stage
=
=
"pt":
-
run_pt(model_args,
data_args, training_args, finetuning_args, callbacks)
-
elif finetuning_args.stage
=
=
"sft":
-
run_sft(model_args,
data_args, training_args, finetuning_args, generating_args, callbacks)
-
elif finetuning_args.stage
=
=
"rm":
-
run_rm(model_args,
data_args, training_args, finetuning_args, callbacks)
-
elif finetuning_args.stage
=
=
"ppo":
-
run_ppo(model_args,
data_args, training_args, finetuning_args, generating_args, callbacks)
-
elif finetuning_args.stage
=
=
"dpo":
-
run_dpo(model_args,
data_args, training_args, finetuning_args, callbacks)
-
elif finetuning_args.stage
=
=
"orpo":
-
run_orpo(model_args,
data_args, training_args, finetuning_args, callbacks)
-
else:
-
raise ValueError(
"Unknown task.")
-
-
-
def export_model(args:
Optional[Dict[str,
Any]]
= None):
-
model_args,
data_args, finetuning_args, _
=
get_infer_args(args)
-
-
if model_args.export_dir
is None:
-
raise ValueError(
"Please specify `export_dir` to save model.")
-
-
if model_args.adapter_name_
or_path
is
not None
and model_args.export_quantization_
bit
is
not None:
-
raise ValueError(
"Please merge adapters before quantizing the model.")
-
-
tokenizer
= load_tokenizer(model_args)
-
get_template_
and_fix_tokenizer(tokenizer,
data_args.template)
-
model
= load_model(tokenizer, model_args, finetuning_args) # must
after fixing tokenizer
to resize vocab
-
-
if getattr(model,
"quantization_method", None)
and model_args.adapter_name_
or_path
is
not None:
-
raise ValueError(
"Cannot merge adapters to a quantized model.")
-
-
if
not isinstance(model, PreTrainedModel):
-
raise ValueError(
"The model is not a `PreTrainedModel`, export aborted.")
-
-
if getattr(model,
"quantization_method", None)
is None: # cannot convert dtype
of a quantized model
-
output_dtype
= getattr(model.config,
"torch_dtype", torch.float
16)
-
setattr(model.config,
"torch_dtype",
output_dtype)
-
model
= model.
to(
output_dtype)
-
-
model.save_pretrained(
-
save_directory
=model_args.export_dir,
-
max_shard_
size
=
"{}GB".
format(model_args.export_
size),
-
safe_serialization
=(
not model_args.export_legacy_
format),
-
)
-
if model_args.export_hub_model_id
is
not None:
-
model.push_
to_hub(
-
model_args.export_hub_model_id,
-
token
=model_args.hf_hub_token,
-
max_shard_
size
=
"{}GB".
format(model_args.export_
size),
-
safe_serialization
=(
not model_args.export_legacy_
format),
-
)
-
-
try:
-
tokenizer.padding_side
=
"left" # restore padding side
-
tokenizer.init_kwargs[
"padding_side"]
=
"left"
-
tokenizer.save_pretrained(model_args.export_dir)
-
if model_args.export_hub_model_id
is
not None:
-
tokenizer.push_
to_hub(model_args.export_hub_model_id, token
=model_args.hf_hub_token)
-
except
Exception:
-
logger.warning(
"Cannot save tokenizer, please copy the files manually.")
-
-
-
if __name__
=
=
"__main__":
-
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
-
def
run_pt(
-
model_args:
"ModelArguments",
-
data_args:
"DataArguments",
-
training_args:
"Seq2SeqTrainingArguments",
-
finetuning_args:
"FinetuningArguments",
-
callbacks:
Optional[List[
"TrainerCallback"]]
= None,
-
):
-
tokenizer
= load_tokenizer(model_args)
-
dataset
=
get_dataset(tokenizer, model_args,
data_args, training_args, stage
=
"pt")
-
model
= load_model(tokenizer, model_args, finetuning_args, training_args.do_train)
-
data_collator
= DataCollatorForLanguageModeling(tokenizer
=tokenizer, mlm
=
False)
-
-
#
Initialize our Trainer
-
trainer
= CustomTrainer(
-
model
=model,
-
args
=training_args,
-
finetuning_args
=finetuning_args,
-
tokenizer
=tokenizer,
-
data_collator
=
data_collator,
-
callbacks
=callbacks,
-
**split_dataset(dataset,
data_args, training_args),
-
)
-
-
# Training
-
if training_args.do_train:
-
train_result
= trainer.train(
resume_
from_checkpoint
=training_args.
resume_
from_checkpoint)
-
trainer.save_model()
-
trainer.log_metrics(
"train", train_result.metrics)
-
trainer.save_metrics(
"train", train_result.metrics)
-
trainer.save_state()
-
if trainer.
is_world_process_
zero()
and finetuning_args.plot_loss:
-
plot_loss(training_args.
output_dir, keys
=[
"loss",
"eval_loss"])
-
-
# Evaluation
-
if training_args.do_eval:
-
metrics
= trainer.
evaluate(metric_
key_prefix
=
"eval")
-
try:
-
perplexity
= math.exp(metrics[
"eval_loss"])
-
except OverflowError:
-
perplexity
= float(
"inf")
-
-
metrics[
"perplexity"]
= perplexity
-
trainer.log_metrics(
"eval", metrics)
-
trainer.save_metrics(
"eval", metrics)
-
-
# Create model card
-
create_modelcard_
and_push(trainer, model_args,
data_args, training_args, finetuning_args)
-
# Inspired
by: https:
/
/github.com
/huggingface
/transformers
/blob
/v
4.34.1
/examples
/pytorch
/language-modeling
/
run_clm.py
-
-
import math
-
from typing import
TYPE_CHECKING, List,
Optional
-
-
from transformers import DataCollatorForLanguageModeling
-
-
from ...
data import
get_dataset, split_dataset
-
from ...extras.ploting import plot_loss
-
from ...model import load_model, load_tokenizer
-
from ..utils import create_modelcard_
and_push
-
from .trainer import CustomTrainer
-
-
-
if
TYPE_CHECKING:
-
from transformers import Seq
2SeqTrainingArguments, TrainerCallback
-
-
from ...hparams import DataArguments, FinetuningArguments, ModelArguments
train() 方法调用的Transformers包底层train()方法
更多推荐

所有评论(0)