Skip to content

AutoGPTQ: ユーザーフレンドリーなLLMs量子化パッケージ

Updated on

AutoGPTQの紹介

AI分野において、より大規模な言語モデル(LLMs)が登場するにつれ、LLMsの効率を最適化することはより重要な取り組みとなっています。 AutoGPTQは、GPTQアルゴリズムに基づく使いやすいLLMs量子化パッケージを提供し、ユーザーフレンドリーなAPIを備えています。 AutoGPTQは、機械学習のワークフローで量子化タスクを処理する効率的なアプローチをもたらします。

AutoGPTQのGithubはこちら (opens in a new tab)からご確認ください。

AutoGPTQのアップデートと性能

AutoGPTQは動的なプロジェクトであり、機能と能力が常に向上しています。最新のアップデートでは、パフォーマンス最適化ライブラリとの統合、異なるタイプのモデルのサポート、およびCUDAカーネルの速度向上を実現しています。

AutoGPTQの最大の強みの1つは、推論速度です。GPU比較では、トークン/秒という印象的な速度指標を示し、AutoGPTQを使用した量子化モデルは他のモデルを上回っています。たとえば、入力バッチサイズを1、ビームサーチのデコード戦略を使用し、モデルが512トークンを生成するよう指定する場合、量子化されたLlama-7bモデルはオリジナルのモデルを推論速度で上回ります(25.53トークン/秒対18.87トークン/秒)。

# AutoGPTQパフォーマンス比較
performance_comparison = {
    "model": ["llama-7b", "moss-moon 16b", "gpt-j 6b"],
    "GPU": ["1xA100-40G", "1xA100-40G", "1xRTX3060-12G"],
    "num_beams": [1, 4, 1],
    "fp16": [18.87, 68.79, None],
    "gptq-int4": [25.53, 91.30, 29.55]
}

AutoGPTQのインストール方法

AutoGPTQの入門は簡単です。最新の安定版リリースはpipからインストールできます。

pip install auto-gptq

環境に合わせたあらかじめビルドされたバイナリ(wheel)を使用することもできます。

# ウィールを保存したディレクトリにcdしてから、以下のコマンドを実行します。
pip install auto_gptq-0.2.0+cu118-cp310-cp310-linux_x86_64.whl 
# python=3.10およびcuda=11.8の環境でlinux向けにビルドされたv0.2.0 auto_gptq pre-build wheelをインストール

また、CUDA拡張子の無効化オプションやLLaMaのような特定のモデルをサポートするオプションもあります。

# CUDA拡張機能を無効にするには
BUILD_CUDA_EXT=0 pip install auto-gptq
 
# LLaMaモデルをサポートするには
pip install auto-gptq[llama]

AutoGPTQの活用:量子化と推論

AutoGPTQの主な機能は、大規模言語モデルの量子化を可能にすることです。このプロセスは簡単で、わずか数行のコードで実行できます。以下は、事前学習済みモデルが4ビットに量子化され、推論に使用される例です。

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
import logging
 
# ロギングをセットアップ
logging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S")
 
# 事前学習済みモデルと量子化モデルのディレクトリを定義
pretrained_model_dir = "facebook/opt-125m"
quantized_model_dir = "opt-125m-4bit"
 
# Tokenizerと例を準備する
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True)
examples = [tokenizer("auto-gptqは、GPTQアルゴリズムに基づくユーザーフレンドリーなAPIを備えた、使いやすいモデル量子化ライブラリです。")]
 
# 量子化設定を準備する
quantize_config = BaseQuantizeConfig(bits=4, group_size=128, desc_act=False)
 
# モデルをロードして、量子化して保存する
model = AutoGPTQForCausalLM.from_pretrained(pretrained_model_dir, quantize_config)
model.quantize(examples)
model.save_quantized(quantized_model_dir)

モデルのカスタマイズ

AutoGPTQは、ユーザーが独自のモデルをサポートするための機能を拡張することもできます。このプロセスは簡単で、ユーザーは機械学習タスクに対するより多くの制御を得ることができます。このカスタマイズ性は、AutoGPTQを他の量子化パッケージと区別し、さまざまな用途により柔軟かつ適応的にするものです。

これは、OPTモデルをサポートするためにauto_gptqを拡張する例です。

# auto_gptqを拡張して、OPTモデルをサポートする(カスタムニーズに基づいてコードを提供します)

Downstream Tasksでの評価

AutoGPTQは、量子化前後でモデルの性能を特定のDownstreamタスクで評価することができます。これにより、量子化プロセスが、モデルが実行するタスクでのパフォーマンスに悪影響を与えないようにすることができます。例えば、EleutherAI/gpt-j-6bモデルを、cardiffnlp/tweet_sentiment_multilingualデータセットを使用してシーケンス分類タスクに評価できます。

これをさらに具体的に説明するため、EleutherAI/gpt-j-6bモデルとcardiffnlp/tweet_sentiment_multilingualデータセットを使用したシンプルな評価例を示します。この場合、私たちは、4号量子化モデルのシーケンス分類タスク、より具体的には感情分析のパフォーマンスを評価しています。

from transformers import pipeline, AutoTokenizer
from auto_gptq import AutoGPTQForSequenceClassification
from datasets import load_dataset
# 事前学習済みと量子化されたモデルディレクトリを定義する
pretrained_model_dir = "EleutherAI/gpt-j-6b"
quantized_model_dir = "gpt-j-6b-4bit"
 
# モデルをロードし量子化する
model = AutoGPTQForSequenceClassification.from_pretrained(pretrained_model_dir)
model.quantize()
model.save_quantized(quantized_model_dir)
 
# トークナイザーと感情分析パイプラインをロードする
tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)
sentiment_analysis = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
 
# データセットをロードする
dataset = load_dataset("cardiffnlp/tweet_sentiment_multilingual", split="test")
 
# テストデータセットでモデルを評価する
correct, total = 0, 0
for example in dataset:
    prediction = sentiment_analysis(example["text"])[0]
    if prediction["label"].lower() == example["label"].lower():
        correct += 1
    total += 1
 
# テストデータセットでモデルの精度を出力する
print(f"Accuracy: {correct / total:.2f}")

上記のコードは、量子化、保存、および量子化されたモデルの評価を示しています。これにより、モデルのパフォーマンスを評価し、量子化プロセスがシーケンス分類タスクの結果にどのように影響を与えるかを評価できます。

FAQ

1. AutoGPTQはGPTベースのモデルのみを処理できますか?

AutoGPTQは最初はGPTベースのモデルを想定して設計されましたが、開発者はより広範なトランスフォーマーモデルに対応するためにその機能を拡張しました。この柔軟性は、ライブラリのモジュラーな設計に由来し、他のモデルにも適用することができます。

2. 特定のユースケースにAutoGPTQをカスタマイズする方法はありますか?

AutoGPTQでは、クラスやメソッドを拡張することでカスタマイズが可能です。AutoGPTQが提供する基本クラスを継承し、必要なメソッドをオーバーライドすることで、特定のニーズに合わせたカスタムクラスを作成することができます。

3. モデルの量子化はパフォーマンスに影響しますか?

モデルの量子化は、モデルのパフォーマンスとモデルのサイズや計算効率とのトレードオフを伴います。しかし、AutoGPTQはこの影響を最小限に抑えることを目指しています。量子化前後でモデルをダウンストリームのタスクで評価するオプションを提供し、パフォーマンスの低下が使用するケースにおいて許容範囲内かどうかを確認することができます。

結論

まとめると、AutoGPTQはトランスフォーマーモデルを量子化し、特定のタスクにおいてパフォーマンス基準を維持する効果的で効率的な手法を提供します。ユーザーフレンドリーなAPIとカスタマイズ機能により、モデルの最適化を目指す機械学習の専門家にとって、非常に重要なツールとなります。モデルのストレージ要件を削減したり推論速度を向上させたりする場合、AutoGPTQはツールキットの重要な一部となるでしょう。