Google Colab上でQLoRAを作成してGGUFに変換してみた

AI・機械学習

はじめに

このコードは、Google Colab(無料版でOK)上でQLoRA (Quantized Low-Rank Adaptation)を使用して大規模言語モデルを訓練し、その後GGUF形式に変換するためのものです。それぞれの部分について詳しく解説していきます。


QLoRAをGUIで作成したい人はこちらがおすすめ

無料枠Google Colab で LLaMA-Factory をやってみた
はじめにGoogle Colabは、ブラウザ上でPythonを実行できる無料のサービスです。これを使って、LLaMA-Factoryを動かしてみましょう。LLaMA-Factoryは、大規模言語モデル(LLM)のファインチューニングを容易に...

セットアップとライブラリのインストール

PyTorchライブラリのインポート


import torch

PyTorchライブラリをインポートします。これは深層学習のための主要なライブラリです。

CUDAデバイスのバージョン確認


major_version, minor_version = torch.cuda.get_device_capability()

CUDAデバイス(GPU)のメジャーおよびマイナーバージョンを取得します。これは、使用するGPUの能力を確認するために必要です。

Unslothライブラリのインストール


if major_version >= 8:
    !pip install "unsloth[colab_ampere] @ git+https://github.com/unslothai/unsloth.git"
else:
    !pip install "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git"

使用しているGPUのアーキテクチャに応じて、適切なバージョンのUnslothライブラリをGitHubからインストールします。

Transformersライブラリのインストール


!pip install "git+https://github.com/huggingface/transformers.git"

Hugging FaceのTransformersライブラリをGitHubからインストールします。これは、多くの事前訓練済みモデルを提供するライブラリです。

モデルとトークナイザーの設定

FastLanguageModelのインポート


from unsloth import FastLanguageModel

UnslothライブラリからFastLanguageModelクラスをインポートします。

モデルとトークナイザーのロード


model, tokenizer = FastLanguageModel.from_pretrained(...)

FastLanguageModelを使用して、特定のモデルとトークナイザーをプリトレーニングからロードします。

LoRAアダプタの追加


model = FastLanguageModel.get_peft_model(model, ...)

LoRA(Low-Rank Adaptation)アダプタをモデルに追加して、訓練効率を向上させます。これにより、モデルの特定のパラメーターのみが更新されるようになります。

データ準備

データセットのロード


from datasets import load_dataset
dataset = load_dataset("yahma/alpaca-cleaned", split = "train")

Hugging Faceのdatasetsライブラリを使用して、アルパカデータセットをロードします。

データセットのフォーマット


dataset = dataset.map(formatting_prompts_func, batched = True,)

特定の関数を使用してデータセットをバッチでフォーマットします。

モデルの訓練

SFTTrainerの設定


from trl import SFTTrainer
trainer = SFTTrainer(...)

TRLライブラリからSFTTrainerを使用して、モデルの訓練を行います。

訓練の実行


trainer_stats = trainer.train()

訓練を開始し、訓練統計を取得します。

GGUFへの変換

変換関数の定義


def colab_quantize_to_gguf(...):
    ...

モデルをGGUF形式に変換する関数を定義します。

モデルの保存と変換の実行


unsloth_save_model(model, tokenizer, "output_model", ...)
colab_quantize_to_gguf("output_model", ...)

成果物

GGUF変換が完了するとこんな画面になります。

GGUF変換が完了するとこんな画面になります

生成されるファイルはこんな感じです。

生成されるファイル

ノートブック

Google Colaboratory

参考サイト

how to convert qlora trained model into a GGUF model? · ggerganov/llama.cpp · Discussion #3489
I am having issues with converting qlora trained model(4bit) into a GGUF model using this script ( mainly because qlora trai...
[Lora] Cannot convert baichuan2 qlora to GGUF · Issue #3519 · ggerganov/llama.cpp
Error: unrecognized sub-layer self_attn.W_pack in tensor base_model.model.model.layers.0.self_attn.W_pack.lora_A.weight
https://twitter.com/danielhanchen/status/1744374391826215087

モデルとトークナイザーを保存し、その後GGUF形式に変換します。

コメント

タイトルとURLをコピーしました