# GitHub Copilot Instructions for LLaMA Factory ## Project Overview LLaMA Factory is an efficient fine-tuning framework for 100+ large language models (LLMs). It provides: - Support for various models: LLaMA, LLaVA, Mistral, Qwen, DeepSeek, Yi, Gemma, ChatGLM, Phi, etc. - Multiple training methods: pre-training, supervised fine-tuning, reward modeling, PPO, DPO, KTO, ORPO - Scalable resources: 16-bit full-tuning, freeze-tuning, LoRA and QLoRA variants - Advanced algorithms: GaLore, BAdam, APOLLO, Adam-mini, Muon, OFT, DoRA, etc. - Web UI (LLaMA Board) and CLI interfaces ### Architecture Versions LLaMA Factory has two parallel architectures that can be switched via the `USE_V1` environment variable: **v0 (default)** - File hierarchy: - `api`, `webui` → `chat`, `eval`, `train` → `data`, `model` → `hparams` → `extras` **v1** - File hierarchy: - `trainers` → `core` → `accelerator`, `plugins`, `config` → `utils` Set `USE_V1=1` to enable v1 architecture. ## Code Structure ### v0 Architecture (Default) - `src/llamafactory/` - Main package directory - `api/` - OpenAI-style API implementation - `chat/` - Chat interface implementation - `cli.py` - Command-line interface - `data/` - Data processing and dataset handling - `eval/` - Model evaluation utilities - `extras/` - Additional utilities and helpers - `hparams/` - Hyperparameter definitions - `model/` - Model loading, patching, and utilities - `train/` - Training pipeline implementation - `webui/` - Gradio-based web interface - `src/train.py` - Training entry script (delegates to `llamafactory.train.tuner`) - `src/webui.py` - Web UI entry script (delegates to `llamafactory.webui.interface`) - `src/api.py` - API server entry script (delegates to `llamafactory.api.app`) - `tests/` - Test suite - `examples/` - Example configurations for various training scenarios - `data/` - Dataset definitions and examples ### v1 Architecture (USE_V1=1) - `src/llamafactory/v1/` - Version 1 package directory - `trainers/` - Training implementations - `core/` - Core training utilities - `accelerator/` - Acceleration and distributed training - `plugins/` - Pluggable components (model, data, sampler, trainer) - `config/` - Configuration management - `utils/` - Utility functions ## Development Practices ### Code Style - Follow the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) - Use ruff for linting and formatting - Line length: 119 characters - Indentation: 4 spaces - Quote style: double quotes - Use Google-style docstrings for documentation ### Import Organization - Known first-party: `llamafactory` - Known third-party: `accelerate`, `datasets`, `gradio`, `numpy`, `peft`, `torch`, `transformers`, `trl` - Use 2 blank lines after imports ### Quality Checks Before committing code, run: ```bash make style # Auto-fix style issues make quality # Check code quality make test # Run test suite ``` Or use the combined command: ```bash make commit # Run pre-commit hooks ``` ### Testing - Use pytest for testing - Tests are located in `tests/` and `tests_v1/` directories - Run tests with: `make test` (which runs `WANDB_DISABLED=true pytest -vv --import-mode=importlib tests/ tests_v1/`) - Disable wandb during testing to avoid external dependencies - **Note**: Training configurations require GPU machines, so training is typically not tested end-to-end. Use `make test` to validate file-level functionality. ### Building Build the package with: ```bash pip3 install build && python3 -m build ``` ### License - All source files must include the Apache 2.0 license header - Check license headers with: `make license` ## Common Patterns ### Configuration Files - Training configurations are typically YAML or JSON files in `examples/` directory - Hyperparameters are defined using dataclasses in `src/llamafactory/hparams/` ### Model Support - New model support is added through model patches in `src/llamafactory/model/` - Visual models use the visual utilities in `src/llamafactory/model/model_utils/visual.py` - Quantization support is in `src/llamafactory/model/model_utils/quantization.py` ### Data Processing - Dataset definitions are in `data/dataset_info.json` - Data templates and processors are in `src/llamafactory/data/` ### Training - Training pipelines are in `src/llamafactory/train/` - Support for different training methods: SFT, DPO, PPO, RM, PT, KTO, ORPO ## Key Dependencies - Python >= 3.9.0 - PyTorch and transformers for model handling - datasets for data processing - peft for parameter-efficient fine-tuning - accelerate for distributed training - gradio for web UI - trl for reinforcement learning - Optional: vllm/sglang for inference, flash-attention-2, unsloth, liger-kernel ## Entry Points - **CLI Training**: `llamafactory-cli train --config examples/train_lora/llama3_lora_sft.yaml` - **Web UI**: `llamafactory-cli webui` or `python src/webui.py` - **API Server**: `llamafactory-cli api` or `python src/api.py` - **Chat Interface**: `llamafactory-cli chat --model_name_or_path MODEL_PATH` ## Environment Setup For development: ```bash pip install -e ".[dev]" ``` ## Important Notes - The project supports multiple backends: default PyTorch, vLLM, SGLang - Megatron-core training is supported via mcore_adapter - SwanLab and W&B are supported for experiment tracking - Docker support is available with pre-built images - Day-0/Day-1 support for latest cutting-edge models - Multi-modal support for vision and audio understanding tasks ## Contribution Guidelines 1. Fork the repository 2. Create a development branch 3. Set up development environment with `pip install -e ".[dev]"` 4. Make changes following the style guide 5. Run quality checks: `make style && make quality` 6. Run tests: `make test` 7. Submit a pull request ## Common Commands - `make style` - Format code - `make quality` - Run linters - `make test` - Run tests - `make commit` - Install and run pre-commit hooks - `make license` - Check license headers