近年の大規模言語モデル (LLM) の進化は目覚ましいものですが、その性能と引き換えに、莫大な計算資源とメモリが必要となる点が課題となっています。AutoRoundは、この課題を解決するべく開発された、LLMのための高度な量子化アルゴリズムです。
この記事では、AutoRoundの概要から、インストール方法、使用方法、そして他の量子化手法との比較まで、初心者の方にも分かりやすく解説していきます。
AutoRoundとは?
AutoRoundは、Intelが開発した、低ビットLLM推論のための高度な重みのみの量子化アルゴリズムです。多様なモデルに合わせた調整が可能で、重みの量子化値と最小値・最大値をわずか200ステップの符号付き勾配降下法で微調整します。これにより、他の最新手法に匹敵する性能を、推論のオーバーヘッドなしで実現します。
ポイント
- 重みのみの量子化: モデルの重みのみを量子化し、活性化は量子化しません。
- 符号付き勾配降下法: 量子化パラメータの最適化に勾配降下法を用いることで、高い精度を実現します。
- 低オーバーヘッド: 推論時に追加の計算コストをほとんど発生させません。
AutoRoundでできること
AutoRoundを使用することで、LLMモデルのメモリ使用量を削減し、推論速度を向上させることができます。
- メモリ使用量の削減: 量子化により、モデルの重みを表現するために必要なビット数を減らすことができます。
- 推論速度の向上: 量子化されたモデルは、元のモデルよりも高速に推論を実行できます。
- 幅広いモデルへの対応: AutoRoundは、様々なLLMモデルに対して効果を発揮します。
AutoRoundのインストール
AutoRoundを使用するには、以下の手順でインストールを行います。
前提条件
- Python 3.9以降
ソースコードからのビルド
pip install -vvv --no-build-isolation -e .
または
pip install -r requirements.txt
python setup.py install
PyPIからのインストール
pip install auto-round
AutoRoundの使い方
AutoRoundを用いたモデルの量子化と、量子化済みモデルを用いた推論の実行方法を解説します。
モデルの量子化
ここでは、AutoRoundを用いて、Hugging Face Transformersのモデルを量子化する手順を解説します。
-
モデルとトークナイザーのロード
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "meta-llama/Llama-2-7b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", trust_remote_code=True) tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
-
AutoRoundの初期化と量子化の実行
from auto_round import AutoRound bits = 4 # 量子化ビット数 group_size = 128 # 量子化グループサイズ sym = False # 対称量子化を行うか否か device = None # デバイス ("auto", None, "hpu", "cpu", "cuda") autoround = AutoRound(model, tokenizer, bits=bits, group_size=group_size, sym=sym, device=device) autoround.quantize()
-
量子化済みモデルの保存
output_dir = "./tmp_autoround" autoround.save_quantized(output_dir)
量子化パラメータの説明
bits
: 量子化ビット数。値が小さいほどモデルのサイズは小さくなりますが、精度も低下します。group_size
: 量子化グループサイズ。値が大きいほど量子化の精度が向上しますが、メモリ使用量も増加します。sym
: 対称量子化を行うか否か。Trueに設定すると、重みの正負を区別しない対称量子化が実行されます。
4.2. 量子化済みモデルを用いた推論
量子化されたモデルは、Transformers APIを使用して簡単にロードし、推論を実行することができます。
CPUでの推論
from intel_extension_for_transformers.transformers import AutoModelForCausalLM
from transformers import AutoTokenizer
quantized_model_path = "./tmp_autoround"
model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)
text = "冒険が好きな女の子がいます"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
GPUでの推論
from transformers import AutoModelForCausalLM, AutoTokenizer
quantized_model_path = "./tmp_autoround"
model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)
text = "冒険が好きな女の子がいます"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
AutoRoundの利点
- 高い精度: 他の量子化手法と比較して、高い精度を達成しています。
- 使いやすさ: Hugging Face Transformersとの統合により、簡単に使用できます。
- 柔軟性: 様々な量子化ビット数やグループサイズを選択できます。
まとめ
この記事では、LLM量子化ツールAutoRoundの概要、インストール方法、使用方法、そして利点について解説しました。AutoRoundは、LLMのメモリ使用量削減と推論速度向上を実現する強力なツールです。ぜひ、あなたのLLMアプリケーションにもAutoRoundを導入してみてください。
コメント