プロジェクト概要
GPTQはICLR 2023で発表された効率的な後訓練量子化手法を実装したライブラリです。継続的なコードベースの改善に伴い、本ガイドでは旧バージョンから最新バージョンへの移行方法を解説します。主要なAPI変更点、モジュール構造の進化、および移行時の注意点を体系的に整理して提供します。
モジュール構造の進化
最新版では明確なモジュール化設計が採用され、以下の構造変化が見られます:
- 量子化コアロジック:単一ファイルから
quant.py(アルゴリズム実装)とgptq.py(モデルラッパー)への分割 - モデル固有実装:各アーキテクチャ用に専用モジュール(
bloom.py,llama.py,opt.py)を提供 - 評価フレームワーク:新規
zero_shot/ディレクトリにタスク定義と評価ロジックを統合
主要API変更点
量子化インターフェースの再設計
旧バージョンのモデル内蔵メソッドから、GPTQクラスによる統一インターフェースへ移行:
# 移行前
model.quantize(...)
# 移行後
from gptq import GPTQ
quantizer = GPTQ(model)
quantizer.quantize(...)
モデルロード処理の分離
OPTモデルの例:
# 新規ロードフロー
from opt import load_opt_quantized
model = load_opt_quantized("model_path", "checkpoint_path")
量子化パラメータのバインディング処理を専用関数で実装し、柔軟な設定が可能に
クラス設計の改良
Quantizerクラスの初期化パラメータ改善:
# 旧実装
quantizer = Quantizer()
# 新実装
quantizer = Quantizer(tensor_shape=1) # 張り付き形状の明示的指定
複雑なモデル構造への適応性を向上させるため、テンソル形状パラメータを追加
評価モジュールの再編成
ゼロショット評価コードの新構造:
- データセット管理:
tasks/local_datasets/統一ディレクトリ - 評価フロー:
evaluator.pyによる統一エントリポイント - メトリクス:
metrics.pyモジュールで評価指標を集中管理
タスク登録の新方式
# 新規タスク登録
from zero_shot.tasks import register_task
register_task("sample", SampleTask)
移行時の課題と対応策
- 量子化精度問題:
quantize(x, scale, zero, quant_bits=16)で量子化ビット数を明示 - アーキテクチャ互換性:モデル固有ローダー(
from bloom import load_bloom_quantized)を使用 - 依存関係解決:README.md記載の最新依存バージョンを参照
移行手順まとめ
- 最新リポジトリの取得:
git clone https://gitcode.com/gh_mirrors/gp/gptq - インポートパスの更新:モジュール構造変化に合わせて修正
- 量子化フローの再実装:
GPTQクラスと新規ローダーを使用 - 評価フレームワークの統合:
zero_shot/モジュールへの移行 - 機能検証:
validate_quantization.py等でテスト