getting-started.qmd 4.5 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
---
title: "Quickstart"
format:
  html:
    toc: true
    toc-depth: 3
    number-sections: true
execute:
  enabled: false
---

This guide will walk you through your first model fine-tuning project with Axolotl.

## Quick Example {#sec-quick-example}

Let's start by fine-tuning a small language model using LoRA. This example uses a 1B parameter model to ensure it runs on most GPUs.
Assuming `axolotl` is installed (if not, see our [Installation Guide](installation.qmd))

1. Download example configs:
```bash
axolotl fetch examples
```

2. Run the training:
```bash
axolotl train examples/llama-3/lora-1b.yml
```

That's it! Let's understand what just happened.

## Understanding the Process {#sec-understanding}

### The Configuration File {#sec-config}

The YAML configuration file controls everything about your training. Here's what (part of) our example config looks like:

```yaml
base_model: NousResearch/Llama-3.2-1B

load_in_8bit: true
adapter: lora

datasets:
  - path: teknium/GPT4-LLM-Cleaned
    type: alpaca
dataset_prepared_path: last_run_prepared
val_set_size: 0.1
output_dir: ./outputs/lora-out
```

::: {.callout-tip}
`load_in_8bit: true` and `adapter: lora` enables LoRA adapter finetuning.

- To perform Full finetuning, remove these two lines.
- To perform QLoRA finetuning, replace with `load_in_4bit: true` and `adapter: qlora`.
:::

See our [Config options](config.qmd) for more details.

### Training {#sec-training}

When you run `axolotl train`, Axolotl:

1. Downloads the base model
2. (If specified) applies QLoRA/LoRA adapter layers
3. Loads and processes the dataset
4. Runs the training loop
5. Saves the trained model and / or LoRA weights

## Your First Custom Training {#sec-custom}

Let's modify the example for your own data:

1. Create a new config file `my_training.yml`:

```yaml
base_model: NousResearch/Nous-Hermes-llama-1b-v1

load_in_8bit: true
adapter: lora

# Training settings
micro_batch_size: 2
num_epochs: 3
learning_rate: 0.0003

# Your dataset
datasets:
  - path: my_data.jsonl        # Your local data file
    type: alpaca               # Or other format
```

This specific config is for LoRA fine-tuning a model with instruction tuning data using
the `alpaca` dataset format, which has the following format:

```json
{
    "instruction": "Write a description of alpacas.",
    "input": "",
    "output": "Alpacas are domesticated South American camelids..."
}
```

Please see our [Dataset Formats](dataset-formats) for more dataset formats and how to
format them.

2. Prepare your JSONL data in the specified format (in this case, the expected `alpaca`
format):

```json
{"instruction": "Classify this text", "input": "I love this!", "output": "positive"}
{"instruction": "Classify this text", "input": "Not good at all", "output": "negative"}
```

3. Run the training:

```bash
axolotl train my_training.yml
```

## Common Tasks {#sec-common-tasks}

::: {.callout-tip}

The same yaml file is used for training, inference, and merging.

:::

### Testing Your Model {#sec-testing}

After training, test your model:

```bash
axolotl inference my_training.yml --lora-model-dir="./outputs/lora-out"
```

More details can be found in [Inference](inference.qmd).

### Using a UI {#sec-ui}

Launch a Gradio interface:

```bash
axolotl inference my_training.yml --lora-model-dir="./outputs/lora-out" --gradio
```

### Preprocessing Data {#sec-preprocessing}

For large datasets, preprocess first:

```bash
axolotl preprocess my_training.yml
```

Please make sure to set `dataset_prepared_path: ` in your config to set the path to save the prepared dataset.

More details can be found in [Dataset Preprocessing](dataset_preprocessing.qmd).

### Merging LoRA weights {#sec-merging-lora}

To merge the LoRA weights back into the base model, run:

```bash
axolotl merge-lora my_training.yml --lora-model-dir="./outputs/lora-out"
```

The merged model will be saved in the `{output_dir}/merged` directory.

More details can be found in [Merging LoRA weights](inference.qmd#sec-merging).

## Next Steps {#sec-next-steps}

Now that you have the basics, you might want to:

- Try different model architectures
- Experiment with hyperparameters
- Use more advanced training methods
- Scale up to larger models

Check our other guides for details on these topics:

- [Configuration Guide](config.qmd) - Full configuration options
- [Dataset Loading](dataset_loading.qmd) - Loading datasets from various sources
- [Dataset Formats](dataset-formats) - Working with different data formats
- [Multi-GPU Training](multi-gpu.qmd)
- [Multi-Node Training](multi-node.qmd)