生成 AI モデルの最適化：ファインチューニングと量子化



*作者：Farruh* 

![1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724645/306e7b73-adc0-2ee2-29f5-05c96fd5ff6d.jpeg)


人工知能は、流行語からビジネスアプリケーションとパーソナルアプリケーションの両方で重要なツールに飛躍を遂げました。 AI 分野が拡大するにつれて、より効率的でタスク固有のモデルが必要になります。 そこで、ファインチューニングと量子化を行い、事前に構築されたモデルを改善することによって、ニーズに合わせ、より効率的に行うことができます。 以下に、Python と Hugging Face `Transformers` ライブラリを使用して、言語モデルのファインチューニングと量子化のプロセスをご案内します。

## AI におけるファインチューニングと量子化の重要性

ファインチューニングは、幅広いスキルセットを特殊なスキルに磨くことに似ています。 事前学習済み言語モデルは、多くのトピックについて多くのことを知っているかもしれませんが、ファインチューニングによって、法律用語や医学用語などの特定の分野の専門家になることができます。

量子化は、これらの大規模モデルのリソースを効率化し、メモリ使用量を削減し、計算を高速化することによってこれを補完します。エッジデバイス上または計算能力が限られた環境でモデルを展開する場合に特に有益です。

![2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724645/d0e2c0e7-2180-1290-52f6-e8fac5f512dc.jpeg)


## 企業と個人に対する価値

企業は、ファインチューニングされ量子化されたモデルを活用して、リソースの制約のために実現不可能と思われる高度な AI アプリケーションを作成できます。 個人にとっては、これらの手法により、標準のハードウェアで高度な AI を実行できるようになり、個人のプロジェクトや研究をより利用しやすくすることができます。

![3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724645/19ad3b41-1290-b9b1-55be-cae585b4077f.jpeg)


## Hugging Face Account の設定

コードに取り組む前に、AI モデルとデータセットにアクセスする必要があります。 Hugging Face で始めます

1. [Hugging Face](https://huggingface.co/) にアクセスします。

2. **[Sign Up]** をクリックして、新しいアカウントを作成します。

3. 登録プロセスを完了します。

4. 電子メールを確認して、準備完了です。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724645/086bb9cf-67f7-1479-a6f1-0814733284b1.png)



### 環境の準備

まず、必要なライブラリがインポートされます。 PyTorch 機能用の `torch` ライブラリと、モデルアーキテクチャと事前学習済みの重み用に Hugging Face の`transformer` ライブラリが必要です。 その他のインポートには、データセットの読み込みと処理のための `datasets`、効率的なトレーニングルーチンと量子化サポートのための `pift` および `trl` があります。

```python
import torch
from datasets import load_dataset
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    TrainingArguments,
    pipeline,
    logging,
)
from peft import LoraConfig, PeftModel
from trl import SFTTrainer
```

### モデルとデータセットの選択

次に、ファインチューニングに重要なモデルとデータセットをコードで指定します。 `model_name` 変数には、ファインチューニングする事前学習済みモデルの識別子が格納され、`dataset_name` はトレーニングに使用するデータセットの識別子です。

```python
model_name = "Qwen/Qwen-7B-Chat"
dataset_name = "mlabonne/guanaco-llama2-1k"
new_model = "Qwen-7B-Chat-SFT"
```


### ファインチューニングパラメーター

ファインチューニングのパラメーターは、`TrainingArguments` を使用して設定されます。 パラメーターには、エポック数、バッチサイズ、学習速度などが含まれます。ファインチューニングプロセス中のモデルによる学習方法を決定します。

```python
training_arguments = TrainingArguments(
    output_dir="./results",
    num_train_epochs=1,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=1,
    learning_rate=2e-4,
    weight_decay=0.001,
    # ... other arguments
)
```


### BitsAndBytes による量子化

`BitsAndBytesConfig` で、量子化のモデルを設定します。 `load_in_4bit` を `True` に設定すると、モデルが 4 ビット量子化バージョンを使用できるようになり、サイズが縮小され、速度が向上する可能性があります。

```python
bnb_config = BitsAndBytesConfig(
    load_in_4bit=use_4bit,
    bnb_4bit_quant_type=bnb_4bit_quant_type,
    bnb_4bit_compute_dtype=compute_dtype,
    bnb_4bit_use_double_quant=use_nested_quant,
)
```


### モデルのファインチューニングとトレーニング

モデルは指定された設定で読み込まれ、トークナイザが準備されます。 次に、`SFTTrainer` を使用して、読み込まれたデータセットのモデルのファインチューニングを行います。 学習後、モデルは将来の使用のために保存されます。

```python
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    # ... other configurations
)

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    # ... other configurations
)

trainer.train()
trainer.model.save_pretrained(new_model)
```


### モデルの評価

モデルをファインチューニングして量子化することで、プロンプトに基づいてテキストを生成し、パフォーマンスを確認できるようになります。 これは、`transformers` からの `pipeline` 機能を使用して行われます。

```python
pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer, max_length=200)
result = pipe(f"

 {prompt} 
")
print(result[0]['generated_text'])
```


## チュートリアルの読者を惹きつける

このガイドでは、環境の設定から、最初のファインチューニングと量子化モデルの実行まで、段階的に説明します。 各ステップでは、コードのスニペットを用いて説明し、その目的を説明し、必要に応じて変更する方法を読者に説明します。



## 結論

このチュートリアルを終了することにより、読者は事前学習済みの言語モデルをファインチューニングおよび量子化する方法をしっかりと理解できるでしょう。 この知識により、AI アプリケーションの新しい可能性の世界を開き、モデルの専門性をと効率を高めることができます。

AI の分野は絶えず進化しており、最新の技術を最新の状態に保つことがその可能性を最大限に引き出すための鍵となることを忘れないでください。 積極的に取り組み、実験し、そして成果と学びをコミュニティと共有してください。

AI の専門性を高める準備を始めましょう。


<hr />

この記事は英語から翻訳されました。 元の記事は[こちら](https://www.alibabacloud.com/blog/genai-model-optimization-guide-to-fine-tuning-and-quantization_600954)からアクセスできます。