CoolFace
Apppublic

officialhimanshu595/llama-factory

sourceHugging Faceupdated 3y agoView on Hugging Face
4likes
App README

[image]

![GitHub Repo stars](https://github.com/hiyouga/LLaMA-Factory/stargazers) ![GitHub Code License](LICENSE) ![GitHub last commit](https://github.com/hiyouga/LLaMA-Factory/commits/main) ![PyPI](https://pypi.org/project/llmtuner/) ![Downloads](https://pypi.org/project/llmtuner/) ![GitHub pull request](https://github.com/hiyouga/LLaMA-Factory/pulls) ![Discord](https://discord.gg/rKfvV9r9FK) ![Spaces](https://huggingface.co/spaces/hiyouga/LLaMA-Board) ![Studios](https://modelscope.cn/studios/hiyouga/LLaMA-Board)

πŸ‘‹ Join our WeChat.

\ English | [δΈ­ζ–‡ \]

LLaMA Board: A One-stop Web UI for Getting Started with LLaMA Factory

Preview LLaMA Board at [πŸ€— Spaces](https://huggingface.co/spaces/hiyouga/LLaMA-Board) or [ModelScope](https://modelscope.cn/studios/hiyouga/LLaMA-Board).

Launch LLaMA Board via CUDA_VISIBLE_DEVICES=0 python src/train_web.py. (multiple GPUs are not supported yet in this mode)

Here is an example of altering the self-cognition of an instruction-tuned language model within 10 minutes on a single GPU.

https://github.com/hiyouga/LLaMA-Factory/assets/16256802/6ba60acc-e2e2-4bec-b846-2d88920d5ba1

Table of Contents

Benchmark

Compared to ChatGLM's P-Tuning, LLaMA-Factory's LoRA tuning offers up to 3.7 times faster training speed with a better Rouge score on the advertising text generation task. By leveraging 4-bit quantization technique, LLaMA-Factory's QLoRA further improves the efficiency regarding the GPU memory.

[image]

<details><summary>Definitions</summary>

  • β€”Training Speed: the number of training samples processed per second during the training. (bs=4, cutoff_len=1024)
  • β€”Rouge Score: Rouge-2 score on the development set of the advertising text generation task. (bs=4, cutoff_len=1024)
  • β€”GPU Memory: Peak GPU memory usage in 4-bit quantized training. (bs=1, cutoff_len=1024)
  • β€”We adopt pre_seq_len=128 for ChatGLM's P-Tuning and lora_rank=32 for LLaMA-Factory's LoRA tuning.

</details>

Changelog

[24/01/18] We supported agent tuning for most models, equipping model with tool using abilities by fine-tuning with --dataset glaive_toolcall.

[23/12/23] We supported [unsloth](https://github.com/unslothai/unsloth)'s implementation to boost LoRA tuning for the LLaMA, Mistral and Yi models. Try --use_unsloth argument to activate unsloth patch. It achieves 1.7x speed in our benchmark, check this page for details.

[23/12/12] We supported fine-tuning the latest MoE model [Mixtral 8x7B](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1) in our framework. See hardware requirement here.

<details><summary>Full Changelog</summary>

[23/12/01] We supported downloading pre-trained models and datasets from the [ModelScope Hub](https://modelscope.cn/models) for Chinese mainland users. See this tutorial for usage.

[23/10/21] We supported [NEFTune](https://arxiv.org/abs/2310.05914) trick for fine-tuning. Try --neftune_noise_alpha argument to activate NEFTune, e.g., --neftune_noise_alpha 5.

[23/09/27] We supported $S^2$-Attn proposed by LongLoRA for the LLaMA models. Try --shift_attn argument to enable shift short attention.

[23/09/23] We integrated MMLU, C-Eval and CMMLU benchmarks in this repo. See this example to evaluate your models.

[23/09/10] We supported [FlashAttention-2](https://github.com/Dao-AILab/flash-attention). Try --flash_attn argument to enable FlashAttention-2 if you are using RTX4090, A100 or H100 GPUs.

[23/08/12] We supported RoPE scaling to extend the context length of the LLaMA models. Try --rope_scaling linear argument in training and --rope_scaling dynamic argument at inference to extrapolate the position embeddings.

[23/08/11] We supported [DPO training](https://arxiv.org/abs/2305.18290) for instruction-tuned models. See this example to train your models.

[23/07/31] We supported dataset streaming. Try --streaming and --max_steps 10000 arguments to load your dataset in streaming mode.

[23/07/29] We released two instruction-tuned 13B models at Hugging Face. See these Hugging Face Repos (LLaMA-2 / Baichuan) for details.

[23/07/18] We developed an all-in-one Web UI for training, evaluation and inference. Try train_web.py to fine-tune models in your Web browser. Thank @KanadeSiina and @codemayq for their efforts in the development.

[23/07/09] We released [FastEdit](https://github.com/hiyouga/FastEdit) ⚑🩹, an easy-to-use package for editing the factual knowledge of large language models efficiently. Please follow FastEdit if you are interested.

[23/06/29] We provided a reproducible example of training a chat model using instruction-following datasets, see Baichuan-7B-sft for details.

[23/06/22] We aligned the demo API with the OpenAI's format where you can insert the fine-tuned model in arbitrary ChatGPT-based applications.

[23/06/03] We supported quantized training and inference (aka [QLoRA](https://github.com/artidoro/qlora)). Try --quantization_bit 4/8 argument to work with quantized models.

</details>

Supported Models

ModelModel sizeDefault moduleTemplate
Baichuan27B/13BW_packbaichuan2
BLOOM560M/1.1B/1.7B/3B/7.1B/176Bquerykeyvalue-
BLOOMZ560M/1.1B/1.7B/3B/7.1B/176Bquerykeyvalue-
ChatGLM36Bquerykeyvaluechatglm3
DeepSeek (MoE)7B/16B/67Bqproj,vprojdeepseek
Falcon7B/40B/180Bquerykeyvaluefalcon
InternLM27B/20Bwqkvintern2
LLaMA7B/13B/33B/65Bqproj,vproj-
LLaMA-27B/13B/70Bqproj,vprojllama2
Mistral7Bqproj,vprojmistral
Mixtral8x7Bqproj,vprojmistral
Phi-1.5/21.3B/2.7Bqproj,vproj-
Qwen1.8B/7B/14B/72Bc_attnqwen
XVERSE7B/13B/65Bqproj,vprojxverse
Yi6B/34Bqproj,vprojyi
Yuan2B/51B/102Bqproj,vprojyuan
[!NOTE] Default module is used for the --lora_target argument, you can use --lora_target all to specify all the available modules. For the "base" models, the --template argument can be chosen from default, alpaca, vicuna etc. But make sure to use the corresponding template for the "chat" models.

Please refer to constants.py for a full list of models we supported.

Supported Training Approaches

ApproachFull-parameterPartial-parameterLoRAQLoRA
Pre-Training:whitecheckmark::whitecheckmark::whitecheckmark::whitecheckmark:
Supervised Fine-Tuning:whitecheckmark::whitecheckmark::whitecheckmark::whitecheckmark:
Reward Modeling:whitecheckmark::whitecheckmark::whitecheckmark::whitecheckmark:
PPO Training:whitecheckmark::whitecheckmark::whitecheckmark::whitecheckmark:
DPO Training:whitecheckmark::whitecheckmark::whitecheckmark::whitecheckmark:
[!NOTE] Use --quantization_bit 4 argument to enable QLoRA.

Provided Datasets

<details><summary>Pre-training datasets</summary>

</details>

<details><summary>Supervised fine-tuning datasets</summary>

</details>

<details><summary>Preference datasets</summary>

</details>

Please refer to data/README.md for details.

Some datasets require confirmation before using them, so we recommend logging in with your Hugging Face account using these commands.

bash
pip install --upgrade huggingface_hub
huggingface-cli login

Requirement

  • β€”Python 3.8+ and PyTorch 1.13.1+
  • β€”πŸ€—Transformers, Datasets, Accelerate, PEFT and TRL
  • β€”sentencepiece, protobuf and tiktoken
  • β€”jieba, rouge-chinese and nltk (used at evaluation and predict)
  • β€”gradio and matplotlib (used in web UI)
  • β€”uvicorn, fastapi and sse-starlette (used in API)

Hardware Requirement

MethodBits7B13B30B65B8x7B
Full16160GB320GB600GB1200GB900GB
Freeze1620GB40GB120GB240GB200GB
LoRA1616GB32GB80GB160GB120GB
QLoRA810GB16GB40GB80GB80GB
QLoRA46GB12GB24GB48GB32GB

Getting Started

Data Preparation (optional)

Please refer to data/README.md for checking the details about the format of dataset files. You can either use a single .json file or a dataset loading script with multiple files to create a custom dataset.

[!NOTE] Please update data/dataset_info.json to use your custom dataset. About the format of this file, please refer to data/README.md.

Dependence Installation (optional)

bash
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 -r requirements.txt

If you want to enable the quantized LoRA (QLoRA) on the Windows platform, you will be required to install a pre-built version of bitsandbytes library, which supports CUDA 11.1 to 12.1.

bash
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl

Use ModelScope Hub (optional)

If you have trouble with downloading models and datasets from Hugging Face, you can use LLaMA-Factory together with ModelScope in the following manner.

bash
export USE_MODELSCOPE_HUB=1 # `set USE_MODELSCOPE_HUB=1` for Windows

Then you can train the corresponding model by specifying a model ID of the ModelScope Hub. (find a full list of model IDs at ModelScope Hub)

bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --model_name_or_path modelscope/Llama-2-7b-ms \
    ... # arguments (same as above)

LLaMA Board also supports using the models and datasets on the ModelScope Hub.

bash
CUDA_VISIBLE_DEVICES=0 USE_MODELSCOPE_HUB=1 python src/train_web.py

Train on a single GPU

[!IMPORTANT] If you want to train models on multiple GPUs, please refer to Distributed Training.
Pre-Training
bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage pt \
    --do_train \
    --model_name_or_path path_to_llama_model \
    --dataset wiki_demo \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir path_to_pt_checkpoint \
    --overwrite_cache \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --plot_loss \
    --fp16
Supervised Fine-Tuning
bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --do_train \
    --model_name_or_path path_to_llama_model \
    --dataset alpaca_gpt4_en \
    --template default \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir path_to_sft_checkpoint \
    --overwrite_cache \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --plot_loss \
    --fp16
Reward Modeling
bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage rm \
    --do_train \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_sft_checkpoint \
    --create_new_adapter \
    --dataset comparison_gpt4_en \
    --template default \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir path_to_rm_checkpoint \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 1e-6 \
    --num_train_epochs 1.0 \
    --plot_loss \
    --fp16
PPO Training
bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage ppo \
    --do_train \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_sft_checkpoint \
    --create_new_adapter \
    --dataset alpaca_gpt4_en \
    --template default \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --reward_model path_to_rm_checkpoint \
    --output_dir path_to_ppo_checkpoint \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --top_k 0 \
    --top_p 0.9 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 1e-5 \
    --num_train_epochs 1.0 \
    --plot_loss \
    --fp16
[!WARNING] Use --per_device_train_batch_size=1 for LLaMA-2 models in fp16 PPO training.
DPO Training
bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage dpo \
    --do_train \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_sft_checkpoint \
    --create_new_adapter \
    --dataset comparison_gpt4_en \
    --template default \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir path_to_dpo_checkpoint \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 1e-5 \
    --num_train_epochs 1.0 \
    --plot_loss \
    --fp16

Distributed Training

Use Huggingface Accelerate
bash
accelerate config # configure the environment
accelerate launch src/train_bash.py # arguments (same as above)

<details><summary>Example config for LoRA training</summary>

yaml
compute_environment: LOCAL_MACHINE
distributed_type: MULTI_GPU
downcast_bf16: 'no'
gpu_ids: all
machine_rank: 0
main_training_function: main
mixed_precision: fp16
num_machines: 1
num_processes: 4
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false

</details>

Use DeepSpeed
bash
deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \
    --deepspeed ds_config.json \
    ... # arguments (same as above)

<details><summary>Example config for full-parameter training with DeepSpeed ZeRO-2</summary>

json
{
  "train_batch_size": "auto",
  "train_micro_batch_size_per_gpu": "auto",
  "gradient_accumulation_steps": "auto",
  "gradient_clipping": "auto",
  "zero_allow_untested_optimizer": true,
  "fp16": {
    "enabled": "auto",
    "loss_scale": 0,
    "initial_scale_power": 16,
    "loss_scale_window": 1000,
    "hysteresis": 2,
    "min_loss_scale": 1
  },
  "zero_optimization": {
    "stage": 2,
    "allgather_partitions": true,
    "allgather_bucket_size": 5e8,
    "reduce_scatter": true,
    "reduce_bucket_size": 5e8,
    "overlap_comm": false,
    "contiguous_gradients": true
  }
}

</details>

Merge LoRA weights and export model

bash
python src/export_model.py \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --template default \
    --finetuning_type lora \
    --export_dir path_to_export \
    --export_size 2 \
    --export_legacy_format False
[!WARNING] Merging LoRA weights into a quantized model is not supported.
[!TIP] Use --export_quantization_bit 4 and --export_quantization_dataset data/c4_demo.json to quantize the model after merging the LoRA weights.

API Demo

bash
python src/api_demo.py \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --template default \
    --finetuning_type lora
[!TIP] Visit http://localhost:8000/docs for API documentation.

CLI Demo

bash
python src/cli_demo.py \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --template default \
    --finetuning_type lora

Web Demo

bash
python src/web_demo.py \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --template default \
    --finetuning_type lora

Evaluation

bash
CUDA_VISIBLE_DEVICES=0 python src/evaluate.py \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --template vanilla \
    --finetuning_type lora \
    --task mmlu \
    --split test \
    --lang en \
    --n_shot 5 \
    --batch_size 4

Predict

bash
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --do_predict \
    --model_name_or_path path_to_llama_model \
    --adapter_name_or_path path_to_checkpoint \
    --dataset alpaca_gpt4_en \
    --template default \
    --finetuning_type lora \
    --output_dir path_to_predict_result \
    --per_device_eval_batch_size 8 \
    --max_samples 100 \
    --predict_with_generate \
    --fp16
[!WARNING] Use --per_device_train_batch_size=1 for LLaMA-2 models in fp16 predict.
[!TIP] We recommend using --per_device_eval_batch_size=1 and --max_target_length 128 at 4/8-bit predict.

Projects using LLaMA Factory

  • β€”[StarWhisper](https://github.com/Yu-Yang-Li/StarWhisper): A large language model for Astronomy, based on ChatGLM2-6B and Qwen-14B.
  • β€”[DISC-LawLLM](https://github.com/FudanDISC/DISC-LawLLM): A large language model specialized in Chinese legal domain, based on Baichuan-13B, is capable of retrieving and reasoning on legal knowledge.
  • β€”[Sunsimiao](https://github.com/thomas-yanxin/Sunsimiao): A large language model specialized in Chinese medical domain, based on Baichuan-7B and ChatGLM-6B.
  • β€”[CareGPT](https://github.com/WangRongsheng/CareGPT): A series of large language models for Chinese medical domain, based on LLaMA2-7B and Baichuan-13B.
  • β€”[MachineMindset](https://github.com/PKU-YuanGroup/Machine-Mindset/): A series of MBTI Personality large language models, capable of giving any LLM 16 different personality types based on different datasets and training methods.
[!TIP] If you have a project that should be incorporated, please contact via email or create a pull request.

License

This repository is licensed under the Apache-2.0 License.

Please follow the model licenses to use the corresponding model weights: Baichuan2 / BLOOM / ChatGLM3 / DeepSeek / Falcon / InternLM2 / LLaMA / LLaMA-2 / Mistral / Phi-1.5/2 / Qwen / XVERSE / Yi / Yuan

Citation

If this work is helpful, please kindly cite as:

bibtex
@Misc{llama-factory,
  title = {LLaMA Factory},
  author = {hiyouga},
  howpublished = {\url{https://github.com/hiyouga/LLaMA-Factory}},
  year = {2023}
}

Acknowledgement

This repo benefits from PEFT, QLoRA and FastChat. Thanks for their wonderful works.

Star History

Star History Chart