ツイッター(別名X)
Xでフォローしてください | |
インストール | unsloth/README.md |
ベンチマーク | 性能表 |
発売済みモデル | アンナマケモノのリリース |
ブログ | ブログを読む |
すべてのカーネルは OpenAI の Triton 言語で書かれています。マニュアルバックプロップエンジン。
精度の損失は 0% - 近似方法はなく、すべて正確です。
ハードウェアの変更はありません。 2018 年以降、NVIDIA GPU をサポートします。最小 CUDA 能力 7.0 (V100、T4、Titan V、RTX 20、30、40x、A100、H100、L40 など) GPU を確認してください。 GTX 1070、1080は動作しますが、遅いです。
WSL 経由でLinuxおよびWindows上で動作します。
ビットサンドバイトによる 4 ビットおよび 16 ビット QLoRA / LoRA 微調整をサポートします。
オープンソースのトレーニングは 5 倍高速です。最大30 倍高速なトレーニングについては、Unsloth Pro を参照してください。
?Unsloth でモデルをトレーニングした場合は、このクールなステッカーを使用できます。
再現可能なベンチマーク テーブルの完全なリストについては、当社の Web サイトをご覧ください。
1 A100 40GB | ?ハグフェイス | フラッシュアテンション | ?Unsloth オープンソース | ?Unsloth Pro |
---|---|---|---|---|
アルパカ | 1x | 1.04倍 | 1.98倍 | 15.64倍 |
LAIONチップ2 | 1x | 0.92倍 | 1.61倍 | 20.73倍 |
OASST | 1x | 1.19倍 | 2.17倍 | 14.83倍 |
スリムシャチ | 1x | 1.18倍 | 2.22倍 | 14.82倍 |
以下のベンチマーク表は、?Hugging Face によって実施されました。
無料のColab T4 | データセット | ?ハグフェイス | ピトーチ 2.1.1 | ?ナマケモノを解く | ? VRAMの削減 |
---|---|---|---|---|---|
ラマ-2 7b | OASST | 1x | 1.19倍 | 1.95倍 | -43.3% |
ミストラル 7b | アルパカ | 1x | 1.07倍 | 1.56倍 | -13.7% |
小さなラマ 1.1b | アルパカ | 1x | 2.06倍 | 3.87倍 | -73.8% |
Zephyr による DPO | ウルトラチャット | 1x | 1.09倍 | 1.55倍 | -18.6% |
安定したリリースの場合は、 pip install unsloth
使用します。ただし、ほとんどのインストールではpip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
お勧めします。
️Only use Conda if you have it. If not, use Pip
。 CUDA 11.8 または CUDA 12.1 の場合は、 pytorch-cuda=11.8,12.1
を選択します。 python=3.10,3.11,3.12
をサポートします。
conda create --name unsloth_env Python=3.11 pytorch-cuda=12.1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers -y condaはunsloth_envをアクティブ化します pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps trl peft 加速ビットサンドバイト
mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh~/miniconda3/bin/conda init bash~/miniconda3/bin/conda init zsh
️Do **NOT** use this if you have Conda.
Pip は依存関係の問題があるため、もう少し複雑です。 pip コマンドは、 torch 2.2,2.3,2.4,2.5
および CUDA バージョンで異なります。
他の torch バージョンの場合は、 torch211
、 torch212
、 torch220
、 torch230
、 torch240
をサポートし、CUDA バージョンの場合は、 cu118
、 cu121
、およびcu124
サポートします。アンペア デバイス (A100、H100、RTX3090) 以降の場合は、 cu118-ampere
、 cu121-ampere
、またはcu124-ampere
を使用します。
たとえば、 torch 2.4
とCUDA 12.1
使用している場合は、次を使用します。
pip install --upgrade pip pip インストール "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
別の例として、 torch 2.5
とCUDA 12.4
使用している場合は、次を使用します。
pip install --upgrade pip pip インストール "unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"
その他の例:
pip install "unsloth[cu121-ampere-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu118-ampere-torch240] @ git+https://github.com/ unslothai/unsloth.git"pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu118-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu121-torch230] ] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu121-ampere-torch230] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu121-torch250] @ git+https://github.com/unslothai/unsloth. git"pip install "unsloth[cu124-ampere-torch250] @ git+https://github.com/unslothai/unsloth.git"
または、ターミナルで以下を実行して、最適なpip インストール コマンドを取得します。
wget -qO- https://raw.githubusercontent.com/unslothai/unsloth/main/unsloth/_auto_install.py |パイソン -
または、Python REPL で以下を手動で実行します。
try: import torchexcel: raise ImportError('Install torch via `pip install torch`')fromPackaging.version import Version as Vv = V(torch.__version__)cuda = str(torch.version.cuda)is_ampere = torch.cuda. get_device_capability()[0] >= 8if cuda != "12.1" および cuda != "11.8" およびcuda != "12.4": raise RuntimeError(f"CUDA = {cuda} はサポートされていません!")if v <= V('2.1.0'): raise RuntimeError(f"Torch = {v} が古すぎます!") elif v <= V('2.1.1'): x = 'cu{}{}-torch211'elif v <= V('2.1.2'): x = 'cu{}{}-torch212'elif v < V('2.3.0'): x = 'cu{}{}-torch220'elif v < V('2.4.0'): x = 'cu{} {}-torch230'elif v < V('2.5.0'): x = 'cu{}{}-torch240'elif v < V('2.6.0'): x = 'cu{}{}-torch250'else: raise RuntimeError(f"Torch = {v} too new!")x = x.format(cuda.replace(".", ""), "-ampere" if is_ampere else "")print(f'pip install --upgrade pip && pip install "unsloth[{x}] @ git+https://github.com/unslothai/unsloth.git"')
Windows 上で Unsloth を直接実行するには:
この Windows フォークから Triton をインストールし、手順に従います: https://github.com/woct0rdho/triton-windows
SFTTrainer で、クラッシュの問題を回避するためにdataset_num_proc=1
を設定します。
トレーナー = SFTTrainer(dataset_num_proc=1, ... )
高度なインストール手順について、またはインストール中に奇妙なエラーが表示された場合は、次の手順を実行してください。
torch
とtriton
をインストールします。 https://pytorch.org にアクセスしてインストールします。たとえば、 pip install torch torchvision torchaudio triton
CUDA が正しくインストールされているかどうかを確認します。 nvcc
を試してください。これが失敗した場合は、 cudatoolkit
または CUDA ドライバーをインストールする必要があります。
xformers
手動でインストールします。 vllm
インストールして、 vllm
成功するかどうかを確認してください。 python -m xformers.info
でxformers
が成功したかどうかを確認します https://github.com/facebookresearch/xformers に移動します。もう 1 つのオプションは、Ampere GPU 用のflash-attn
インストールすることです。
最後に、 bitsandbytes
をインストールし、 python -m bitsandbytes
で確認します。
GGUF への保存、チェックポイント設定、評価などについては、公式ドキュメントにアクセスしてください。
私たちは、Huggingface の TRL、Trainer、Seq2SeqTrainer、さらには Pytorch コードもサポートしています。
?Hugging Face の公式ドキュメントに参加しました! SFT ドキュメントと DPO ドキュメントをチェックしてください。
from unsloth import FastLanguageModel from unsloth import is_bfloat16_supportedimport torchfrom trl import SFTTrainerfromTransformers import TrainingArgumentsfrom datasets import load_datasetmax_seq_length = 2048 # RoPE スケーリングを内部的にサポートしているため、任意のものを選択してください!# Get LAION dataseturl = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"dataset = load_dataset("json", data_files = {"train" : url}, Split = "train")# 4 ビット前4 倍高速なダウンロード + OOM なしでサポートされる量子化モデル = ["unsloth/mistral-7b-v0.3-bnb-4bit", # 新しいミストラル v3 が 2 倍高速になりました!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit","unsloth/llama-3-8b -bnb-4bit"、# Llama-3 15 兆トークン モデル 2xより高速です!"unsloth/llama-3-8b-Instruct-bnb-4bit","unsloth/llama-3-70b-bnb-4bit","unsloth/Phi-3-mini-4k-instruct", # Phi-3 2倍より速く!"unsloth/Phi-3-medium-4k-instruct","unsloth/mistral-7b-bnb-4bit","unsloth/gemma-7b-bnb-4bit", # Gemma 2.2 倍高速!] # さらに多くのモデルhttps://huggingface.co/unslothmodel で、トークナイザー = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit"、max_seq_length = max_seq_length、dtype = None、load_in_4bit = True、 )# モデルにパッチを適用し、高速 LoRA 重みを追加しますmodel = FastLanguageModel.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, #あらゆるものをサポートしますが、= 0 は最適化されますbias = "none", # あらゆるものをサポートしますが、= "none" は最適化されます# [新規] "unsloth" は VRAM の使用量を 30% 削減し、2 倍の大きいバッチ サイズに適合します!use_gradient_checkpointing = "unsloth", #非常に長い contextrandom_state = 3407、max_seq_length = max_seq_length、use_rslora = の場合は True または "unsloth" False、# ランク安定化をサポートします LoRAloftq_config = None、# そして LoftQ)trainer = SFTTrainer(model = model,train_dataset = dataset,dataset_text_field = "text",max_seq_length = max_seq_length,tokenizer = tokenizer,args = TrainingArguments(per_device_train_batch_size = 2,gradient_accumulation_steps) = 4、warmup_steps = 10、max_steps = 60、fp16 = is_bfloat16_supported() ではありません、bf16 = is_bfloat16_supported()、logging_steps = 1、output_dir = "出力"、optim = "adamw_8bit"、seed = 3407、 )、 )trainer.train()# 高度なヒントについては https://github.com/unslothai/unsloth/wiki にアクセスしてください# (1) GGUF への保存 / vLLM の 16 ビットへのマージ# (2) 保存された LoRA アダプターからのトレーニングの継続# (3) 評価ループ/OOM の追加# (4) カスタマイズされたチャット テンプレート
DPO (Direct Preference Optimization)、PPO、報酬モデリングはすべて、Llama-Factory によるサードパーティの独立したテストに従って機能するようです。 Tesla T4 で Zephyr を再現するための予備的な Google Colab ノートブックがここにあります: ノートブック。
?Hugging Face の公式ドキュメントに参加しました!私たちは SFT ドキュメントと DPO ドキュメントに取り組んでいます。
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0" # オプションで GPU デバイス ID を設定from unsloth import FastLanguageModel, PatchDPOTrainerfrom unsloth import is_bfloat16_supportedPatchDPOTrainer()import torchfromTransformers import TrainingArgumentsfrom trl import DPOTrainermodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/zephyr-sft-bnb-4bit",max_seq_length = max_seq_length,dtype = None,load_in_4bit = True, )# モデルにパッチを適用し、高速な LoRA 重みを追加しますmodel = FastLanguageModel.get_peft_model(model,r = 64,target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj" ",],lora_alpha = 64,lora_dropout = 0, #あらゆるものをサポートしますが、= 0 は最適化されますbias = "none", # あらゆるものをサポートしますが、= "none" は最適化されます# [新規] "unsloth" は VRAM の使用量を 30% 削減し、2 倍の大きいバッチ サイズに適合します!use_gradient_checkpointing = "unsloth", #非常に長い contextrandom_state = 3407、max_seq_length = max_seq_length、の場合は True または "unsloth" )dpo_trainer = DPOTrainer(model = モデル,ref_model = なし,args = TrainingArguments(per_device_train_batch_size = 4,gradient_accumulation_steps = 8,warmup_ratio = 0.1,num_train_epochs = 3,fp16 = is_bfloat16_supported() ではありません,bf16 = is_bfloat16_supported()、logging_steps = 1、optim = "adamw_8bit"、seed = 42、output_dir = "出力"、 )、beta = 0.1、train_dataset = YOUR_DATASET_HERE、# eval_dataset = YOUR_DATASET_HERE、tokenizer = トークナイザー、max_length = 1024、max_prompt_length = 512、 )dpo_trainer.train()
完全に再現可能な例については、「コード」をクリックしてください
「Unsloth Equal」は、コードが削除された PRO バージョンのプレビューです。すべての設定と損失曲線は同一のままです。
ベンチマーク テーブルの完全なリストについては、当社の Web サイトをご覧ください。
1 A100 40GB | ?ハグフェイス | フラッシュアテンション2 | ?アンスロースオープン | ナマケモノの平等 | アンナマケモノプロ | ナマケモノマックス |
---|---|---|---|---|---|---|
アルパカ | 1x | 1.04倍 | 1.98倍 | 2.48倍 | 5.32倍 | 15.64倍 |
コード | コード | コード | コード | コード | ||
秒 | 1040 | 1001 | 525 | 419 | 196 | 67 |
メモリMB | 18235 | 15365 | 9631 | 8525 | ||
% 節約されました | 15.74 | 47.18 | 53.25 |
パフォーマンス表へのリンク。 TGS: 1 秒あたりの GPU あたりのトークン。モデル:LLaMA2-7B。 GPU: NVIDIA A100 * 1。バッチサイズ: 4。勾配累積: 2。LoRA ランク: 8。最大長: 1024。
方法 | ビット | TGS | グラム | スピード |
---|---|---|---|---|
HF | 16 | 2392 | 18GB | 100% |
HF+FA2 | 16 | 2954 | 17GB | 123% |
アンナマケモノ+FA2 | 16 | 4007 | 16ギガバイト | 168% |
HF | 4 | 2415 | 9GB | 101% |
アンナマケモノ+FA2 | 4 | 3726 | 7GB | 160% |
1 A100 40GB | ハグフェイス | フラッシュアテンション2 | アンナマケモノオープン | ナマケモノの平等 | アンナマケモノプロ | ナマケモノマックス |
---|---|---|---|---|---|---|
ミストラル 7B スリム オルカ | 1x | 1.15倍 | 2.15倍 | 2.53倍 | 4.61倍 | 13.69倍 |
コード | コード | コード | コード | コード | ||
秒 | 1813年 | 1571年 | 842 | 718 | 393 | 132 |
メモリMB | 32853 | 19385 | 12465 | 10271 | ||
% 節約されました | 40.99 | 62.06 | 68.74 |
1 A100 40GB | ハグフェイス | フラッシュアテンション2 | アンナマケモノオープン | ナマケモノの平等 | アンナマケモノプロ | ナマケモノマックス |
---|---|---|---|---|---|---|
コードラマ 34B | OOM | 0.99倍 | 1.87倍 | 2.61倍 | 4.27倍 | 12.82倍 |
コード | コード | コード | コード | |||
秒 | 1953年 | 1982年 | 1043 | 748 | 458 | 152 |
メモリMB | 40000 | 33217 | 27413 | 22161 | ||
% 節約されました | 16.96 | 31.47 | 44.60 |
1 T4 16GB | ハグフェイス | フラッシュアテンション | アンナマケモノオープン | Unsloth Pro 同等 | アンナマケモノプロ | ナマケモノマックス |
---|---|---|---|---|---|---|
アルパカ | 1x | 1.09倍 | 1.69倍 | 1.79倍 | 2.93倍 | 8.3倍 |
コード | コード | コード | コード | |||
秒 | 1599年 | 1468年 | 942 | 894 | 545 | 193 |
メモリMB | 7199 | 7059 | 6459 | 5443 | ||
% 節約されました | 1.94 | 10.28 | 24.39 |
2 T4 DDP | ハグフェイス | フラッシュアテンション | アンナマケモノオープン | ナマケモノの平等 | アンナマケモノプロ | ナマケモノマックス |
---|---|---|---|---|---|---|
アルパカ | 1x | 0.99倍 | 4.95倍 | 4.44倍 | 7.28倍 | 20.61倍 |
コード | コード | コード | ||||
秒 | 9882 | 9946 | 1996年 | 2227 | 1357 | 480 |
メモリMB | 9176 | 9128 | 6904 | 6782 | ||
% 節約されました | 0.52 | 24.76 | 9月26日 |
Google Colab 上の 1 台の Tesla T4 bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10
システム | GPU | アルパカ (52K) | ライオン・オイグ (210K) | オープンアシスタント (10K) | スリムオルカ (518K) |
---|---|---|---|---|---|
ハグフェイス | 1 T4 | 23時間15分 | 56時間28分 | 8時間38分 | 391時間41分 |
アンナマケモノオープン | 1 T4 | 13 時間 7 分 (1.8x) | 31 時間 47 分 (1.8x) | 4 時間 27 分 (1.9x) | 240時間4分(1.6倍) |
アンナマケモノプロ | 1 T4 | 3時間6分 (7.5倍) | 5時間17分 (10.7倍) | 1時間7分 (7.7倍) | 59時間53分 (6.5倍) |
ナマケモノマックス | 1 T4 | 2時間39分 (8.8倍) | 4 時間 31 分 (12.5 倍) | 0時間58分 (8.9倍) | 51時間30分 (7.6倍) |
ピーク時のメモリ使用量
システム | GPU | アルパカ (52K) | ライオン・オイグ (210K) | オープンアシスタント (10K) | スリムオルカ (518K) |
---|---|---|---|---|---|
ハグフェイス | 1 T4 | 7.3GB | 5.9GB | 14.0GB | 13.3GB |
アンナマケモノオープン | 1 T4 | 6.8GB | 5.7GB | 7.8GB | 7.7GB |
アンナマケモノプロ | 1 T4 | 6.4GB | 6.4GB | 6.4GB | 6.4GB |
ナマケモノマックス | 1 T4 | 11.4GB | 12.4GB | 11.9GB | 14.4GB |
Kaggle 上の 2 つの Tesla T4 bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10
システム | GPU | アルパカ (52K) | ライオン・オイグ (210K) | オープンアシスタント (10K) | スリムオルカ (518K) * |
---|---|---|---|---|---|
ハグフェイス | 2 T4 | 84時間47分 | 163時間48分 | 30時間51分 | 13時1分24分 * |
アンナマケモノプロ | 2 T4 | 3 時間 20 分 (25.4 倍) | 5時間43分 (28.7x) | 1 時間 12 分 (25.7 倍) | 71 時間 40 分 (18.1x) * |
ナマケモノマックス | 2 T4 | 3 時間 4 分 (27.6x) | 5時間14分 (31.3倍) | 1 時間 6 分 (28.1x) | 54 時間 20 分 (23.9x) * |
マルチ GPU システム (2 GPU) でのピーク メモリ使用量
システム | GPU | アルパカ (52K) | ライオン・オイグ (210K) | オープンアシスタント (10K) | スリムオルカ (518K) * |
---|---|---|---|---|---|
ハグフェイス | 2 T4 | 8.4GB | 6GB | 7.2GB | 5.3GB | 14.3GB | 6.6GB | 10.9GB | 5.9GB ※ |
アンナマケモノプロ | 2 T4 | 7.7GB | 4.9GB | 7.5GB | 4.9GB | 8.5GB | 4.9GB | 6.2GB | 4.7GB ※ |
ナマケモノマックス | 2 T4 | 10.5GB | 5GB | 10.6GB | 5GB | 10.6GB | 5GB | 10.5GB | 5GB * |
bsz=2
OOM 以降、すべてのベンチマークで Slim Orca bsz=1
。 bsz=2
処理できますが、一貫性を保つためにbsz=1
でベンチマークを実行します。
HuyNguyen-hust 氏、RoPE 埋め込みを 28% 高速化
WSL サポートを確認するための RandomInternetPreson
実験的な DPO サポートの場合は 152334H
atgctg (構文強調表示用)