From e713a7ed1199cdc97230daab69ae7c9eb968f636 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 01:38:47 +1100 Subject: [PATCH 01/10] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2819449ce3..95d480d026 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -# Unsloth -### 2x faster 50% less memory LLM finetuning on a single GPU. + + +## 2x faster 50% less memory LLM finetuning * Manual autograd engine. * All kernels written in OpenAI's Triton language. * 0% loss in accuracy. @@ -87,3 +88,5 @@ Change `cu121` to `cu118` for CUDA version 11.8 or 12.1. Go to https://pytorch.o !ldconfig /usr/lib64-nvidia ``` 2. Windows is not supported as of yet - we rely on Xformers and Triton support, so until both packages support Windows officially, Unsloth will then support Windows. + + From 90195532e653c3704db7ce259f52aa6634528a16 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 02:34:41 +1100 Subject: [PATCH 02/10] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 95d480d026..77cd9204c0 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ 1. Try our Colab examples for [the Alpaca 52K dataset](https://colab.research.google.com/drive/1oW55fBmwzCOrBVX66RcpptL3a99qWBxb?usp=sharing) or [the Slim Orca 518K dataset](https://colab.research.google.com/drive/1VNqLARpE8N8eYwNrUSDoHVjtbR9W0_c7?usp=sharing). 2. Try our Kaggle example for [the LAION OIG Chip2 dataset](https://www.kaggle.com/danielhanchen/unsloth-laion-chip2-kaggle) +3. Join our [Discord](https://discord.gg/nsS4V5Z6ge)! # Installation Instructions Unsloth currently only supports Linux distros and Pytorch >= 2.1. From 87b4e17d06fe7bfac702fbfd29833e23b3b816cf Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 03:28:49 +1100 Subject: [PATCH 03/10] Add files via upload --- images/unsloth new logo.png | Bin 0 -> 59415 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/unsloth new logo.png diff --git a/images/unsloth new logo.png b/images/unsloth new logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa05a8ef7ce0343916b185a46ab685295b9fc324 GIT binary patch literal 59415 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 Kp02X;P5K`^6%6VC literal 0 HcmV?d00001 From 9a88efa9f3b34ea95dbe976962194876264e13f7 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 03:29:31 +1100 Subject: [PATCH 04/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77cd9204c0..c1268b4798 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + ## 2x faster 50% less memory LLM finetuning * Manual autograd engine. From d794f4c6edbeea16a849dc2a0dbd742f44b288c6 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:37:27 +1100 Subject: [PATCH 05/10] Update README.md --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c1268b4798..24bc2a89f1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ * Manual autograd engine. * All kernels written in OpenAI's Triton language. * 0% loss in accuracy. -* No change of hardware necessary. +* No change of hardware necessary. Supports Tesla T4, RTX 20, 30, 40 series, A100, H100s +* Flash Attention +* Train Alpaca **fully locally in 13 hours from 23 hours.**
@@ -15,34 +17,65 @@ 2. Try our Kaggle example for [the LAION OIG Chip2 dataset](https://www.kaggle.com/danielhanchen/unsloth-laion-chip2-kaggle) 3. Join our [Discord](https://discord.gg/nsS4V5Z6ge)! -# Installation Instructions +# Installation Instructions - Conda Unsloth currently only supports Linux distros and Pytorch >= 2.1. +``` +conda install cudatoolkit xformers bitsandbytes pytorch pytorch-cuda=12.1 \ + -c pytorch -c nvidia -c xformers -c conda-forge -y +pip install "unsloth[kaggle] @ git+https://github.com/unslothai/unsloth.git" +``` -You must first update Pytorch to 2.1 before using pip. If you have Conda, you MUST first upgrade your Pytorch installation with the command we provided, since it also installs xformers and bitsandbytes. - +# Installation Instructions - Pip 1. Find your CUDA version via ``` import torch; torch.version.cuda ``` -2. For CUDA 11.8 or CUDA 12.1. If you are using Kaggle or Colab notebooks, we also provide a distro: DO NOT run this first if you have Conda - do step 3 then 2. +2. Select either cu118 for CUDA 11.8 or cu121 for CUDA 12.1 ``` pip install "unsloth[cu118] @ git+https://github.com/unslothai/unsloth.git" pip install "unsloth[cu121] @ git+https://github.com/unslothai/unsloth.git" -pip install "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git" -pip install "unsloth[kaggle] @ git+https://github.com/unslothai/unsloth.git" ``` -3. To update Pytorch to 2.1: (You MUST run this if you have Conda FIRST) -``` -conda install cudatoolkit xformers bitsandbytes pytorch pytorch-cuda=12.1 \ - -c pytorch -c nvidia -c xformers -c conda-forge -y -``` -or +3. We only support Pytorch 2.1: You can update Pytorch via Pip: ``` pip install --upgrade --force-reinstall --no-cache-dir torch triton \ --index-url https://download.pytorch.org/whl/cu121 ``` Change `cu121` to `cu118` for CUDA version 11.8 or 12.1. Go to https://pytorch.org/ to learn more. +# Alpaca Example +``` +from unsloth import FastLlamaModel +import torch +max_seq_length = 2048 +dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+ +load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False. + +# Load Llama model +model, tokenizer = FastLlamaModel.from_pretrained( + model_name = "unsloth/llama-2-7b", # Supports any llama model + max_seq_length = max_seq_length, + dtype = dtype, + load_in_4bit = load_in_4bit, + # token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf +) + +# Do model patching and add fast LoRA weights +model = FastLlamaModel.get_peft_model( + model, + r = 16, + target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", + "gate_proj", "up_proj", "down_proj",], + lora_alpha = 16, + lora_dropout = 0, # Currently only supports dropout = 0 + bias = "none", # Currently only supports bias = "none" + use_gradient_checkpointing = True, + random_state = 3407, + max_seq_length = max_seq_length, +) + +trainer = .... Use Huggingface's Trainer and dataset loading +``` + # Future Milestones and limitations 1. Support sqrt gradient checkpointing which further slashes memory usage by 25%. 2. Does not support non Llama models - we do so in the future. From 2c4105cfb1d2f449e1f49ad6bbe00525f3bd22b7 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:40:39 +1100 Subject: [PATCH 06/10] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 24bc2a89f1..53a52c31c2 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ -## 2x faster 50% less memory LLM finetuning +## 2x faster 50% less memory LLM local finetuning * Manual autograd engine. * All kernels written in OpenAI's Triton language. * 0% loss in accuracy. * No change of hardware necessary. Supports Tesla T4, RTX 20, 30, 40 series, A100, H100s * Flash Attention * Train Alpaca **fully locally in 13 hours from 23 hours.** - +* Train Open Assistant **fully locally in 4 hours from 8 hours.** +* Check out [Unsloth Pro and Max](https://unsloth.ai/) codepaths for **30x faster training**! +
@@ -80,6 +82,9 @@ trainer = .... Use Huggingface's Trainer and dataset loading 1. Support sqrt gradient checkpointing which further slashes memory usage by 25%. 2. Does not support non Llama models - we do so in the future. +# Unsloth Pro and Max +1. If you want + # Performance comparisons on 1 Tesla T4 GPU: **Time taken for 1 epoch** From 9998f617f38d0e16fde3f3f5bcfa09fde13af602 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:40:52 +1100 Subject: [PATCH 07/10] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 53a52c31c2..93f100b8e6 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,6 @@ trainer = .... Use Huggingface's Trainer and dataset loading 1. Support sqrt gradient checkpointing which further slashes memory usage by 25%. 2. Does not support non Llama models - we do so in the future. -# Unsloth Pro and Max -1. If you want - # Performance comparisons on 1 Tesla T4 GPU: **Time taken for 1 epoch** From 6bd590276cc4f49e9ac990afd3e7840104bd1e52 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:43:26 +1100 Subject: [PATCH 08/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 93f100b8e6..910e3a78f3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -## 2x faster 50% less memory LLM local finetuning +## 50% faster 50% less memory LLM local finetuning * Manual autograd engine. * All kernels written in OpenAI's Triton language. * 0% loss in accuracy. From 707da68c0c89b56b4a5e69f695af36c12365f6c6 Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:49:53 +1100 Subject: [PATCH 09/10] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 910e3a78f3..79c685cb85 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ -## 50% faster 50% less memory LLM local finetuning +## 5X faster 50% less memory LLM local finetuning * Manual autograd engine. * All kernels written in OpenAI's Triton language. * 0% loss in accuracy. * No change of hardware necessary. Supports Tesla T4, RTX 20, 30, 40 series, A100, H100s * Flash Attention -* Train Alpaca **fully locally in 13 hours from 23 hours.** -* Train Open Assistant **fully locally in 4 hours from 8 hours.** +* Train Slim Orca **fully locally in 260 hours from 1301 hours (54 days).** * Check out [Unsloth Pro and Max](https://unsloth.ai/) codepaths for **30x faster training**!
From 49eee2e259e6c14acd51c338f9c9a3e1883f358f Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Fri, 1 Dec 2023 13:50:13 +1100 Subject: [PATCH 10/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 79c685cb85..af65590289 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ * 0% loss in accuracy. * No change of hardware necessary. Supports Tesla T4, RTX 20, 30, 40 series, A100, H100s * Flash Attention -* Train Slim Orca **fully locally in 260 hours from 1301 hours (54 days).** +* Train Slim Orca **fully locally in 260 hours from 1301 hours (5x faster).** * Check out [Unsloth Pro and Max](https://unsloth.ai/) codepaths for **30x faster training**!