|
--- |
|
base_model: unsloth/Qwen2.5-7B-bnb-4bit |
|
tags: |
|
- text-generation-inference |
|
- transformers |
|
- unsloth |
|
- qwen2 |
|
- trl |
|
license: apache-2.0 |
|
language: |
|
- en |
|
--- |
|
|
|
# Efficient Fine-Tuning of Large Language Models - Minecraft AI Assistant Tutorial |
|
|
|
This repository demonstrates how to fine-tune the **Qwen 7B** model to create "Andy," an AI assistant for Minecraft. Using the **Unsloth framework**, this tutorial showcases efficient fine-tuning with 4-bit quantization and LoRA for scalable training on limited hardware. |
|
|
|
## 🚀 Resources |
|
|
|
- **Source Code**: [GitHub Repository](https://github.com/while-basic/mindcraft) |
|
- **Colab Notebook**: [Colab Notebook](https://colab.research.google.com/drive/1Eq5dOjc6sePEt7ltt8zV_oBRqstednUT?usp=sharing) |
|
- **Blog Article**: [Walkthrough](https://chris-celaya-blog.vercel.app/articles/unsloth-training) |
|
- **Dataset**: [Andy-3.5](https://huggingface.co./datasets/Sweaterdog/Andy-3.5) |
|
- **Teaser**: [Video](https://www.youtube.com/watch?v=KUXY5OtaPZc) |
|
|
|
## Overview |
|
|
|
This **readme.md** provides step-by-step instructions to: |
|
1. Install and set up the **Unsloth framework**. |
|
2. Initialize the **Qwen 7B** model with **4-bit quantization**. |
|
3. Implement **LoRA Adapters** for memory-efficient fine-tuning. |
|
4. Prepare the **Andy-3.5 dataset** with Minecraft-specific knowledge. |
|
5. Configure and execute training in a resource-efficient manner. |
|
6. Evaluate and deploy the fine-tuned AI assistant. |
|
|
|
--- |
|
|
|
### Key Features |
|
|
|
- **Memory-Efficient Training**: Fine-tune large models on GPUs as low as T4 (Google Colab). |
|
- **LoRA Integration**: Modify only key model layers for efficient domain-specific adaptation. |
|
- **Minecraft-Optimized Dataset**: Format data using **ChatML templates** for seamless integration. |
|
- **Accessible Hardware**: Utilize cost-effective setups with GPU quantization techniques. |
|
|
|
--- |
|
|
|
## Prerequisites |
|
|
|
- **Python Knowledge**: Familiarity with basic programming concepts. |
|
- **GPU Access**: T4 (Colab Free Tier) is sufficient; higher-tier GPUs like V100/A100 recommended. |
|
- **Optional**: [Hugging Face Account](https://huggingface.co./) for model sharing. |
|
|
|
--- |
|
|
|
## Setup |
|
|
|
Install the required packages: |
|
```bash |
|
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" |
|
!pip install --no-deps xformers trl peft accelerate bitsandbytes |
|
``` |
|
|
|
--- |
|
|
|
## Model Initialization |
|
|
|
Load the **Qwen 7B** model with 4-bit quantization for reduced resource usage: |
|
|
|
```python |
|
from unsloth import FastLanguageModel |
|
import torch |
|
|
|
model, tokenizer = FastLanguageModel.from_pretrained( |
|
model_name="unsloth/Qwen2.5-7B-bnb-4bit", |
|
max_seq_length=2048, |
|
dtype=torch.bfloat16, |
|
load_in_4bit=True, |
|
trust_remote_code=True, |
|
) |
|
``` |
|
|
|
--- |
|
|
|
## Adding LoRA Adapters |
|
|
|
Add LoRA to fine-tune specific layers efficiently: |
|
```python |
|
model = FastLanguageModel.get_peft_model( |
|
model, |
|
r=16, |
|
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "embed_tokens", "lm_head"], |
|
lora_alpha=16, |
|
lora_dropout=0, |
|
use_gradient_checkpointing="unsloth", |
|
) |
|
``` |
|
|
|
--- |
|
|
|
## Dataset Preparation |
|
|
|
Prepare the Minecraft dataset (**Andy-3.5**): |
|
```python |
|
from datasets import load_dataset |
|
from unsloth.chat_templates import get_chat_template |
|
|
|
dataset = load_dataset("Sweaterdog/Andy-3.5", split="train") |
|
tokenizer = get_chat_template(tokenizer, chat_template="chatml") |
|
``` |
|
|
|
--- |
|
|
|
## Training Configuration |
|
|
|
Set up the training parameters: |
|
```python |
|
from trl import SFTTrainer |
|
from transformers import TrainingArguments |
|
|
|
trainer = SFTTrainer( |
|
model=model, |
|
tokenizer=tokenizer, |
|
train_dataset=dataset, |
|
dataset_text_field="text", |
|
args=TrainingArguments( |
|
per_device_train_batch_size=16, |
|
max_steps=1000, |
|
learning_rate=2e-5, |
|
gradient_checkpointing=True, |
|
output_dir="outputs", |
|
fp16=True, |
|
), |
|
) |
|
``` |
|
|
|
Clear unused memory before training: |
|
```python |
|
import torch |
|
torch.cuda.empty_cache() |
|
``` |
|
|
|
--- |
|
|
|
## Train the Model |
|
|
|
Initiate training: |
|
```python |
|
trainer_stats = trainer.train() |
|
``` |
|
|
|
--- |
|
|
|
## Save and Share |
|
|
|
Save your fine-tuned model locally or upload to Hugging Face: |
|
```python |
|
model.save_pretrained("andy_minecraft_assistant") |
|
``` |
|
|
|
--- |
|
|
|
## Optimization Tips |
|
|
|
- Expand the dataset for broader Minecraft scenarios. |
|
- Adjust training steps for better accuracy. |
|
- Fine-tune inference parameters for more natural responses. |
|
|
|
--- |
|
|
|
For more details on **Unsloth** or to contribute, visit [Unsloth GitHub](https://github.com/unslothai/unsloth). |
|
|
|
Happy fine-tuning! 🎮 |
|
|
|
## Citation |
|
|
|
@misc{celaya2025minecraft, |
|
author = {Christopher B. Celaya}, |
|
title = {Efficient Fine-Tuning of Large Language Models - A Minecraft AI Assistant Tutorial}, |
|
year = {2025}, |
|
publisher = {GitHub}, |
|
journal = {GitHub repository}, |
|
howpublished = {\url{https://github.com/kolbytn/mindcraft}}, |
|
note = {\url{https://chris-celaya-blog.vercel.app/articles/unsloth-training}} |
|
} |
|
|