ホームページ >テクノロジー周辺機器 >AI >ニューラルネットワークの重量量子化
ますます大きな言語モデルと複雑なニューラルネットワークの時代において、モデルの効率を最適化することが最も重要になりました。重量の量子化は、モデルのサイズを縮小し、パフォーマンスの大幅な劣化なしに推論速度を改善するための重要な手法として際立っています。このガイドは、GPT-2を実際の例として使用して、体重量子化を実装および理解するための実践的なアプローチを提供します。
データサイエンスブログの一部として公開されました。 目次体重量子化の基礎
実用的な実装量子化プロセス:体重とモデル
ABSMAX量子化法は、テンソルの最大絶対値に基づいて重みをスケーリングします:
import seaborn as sns import torch import numpy as np from transformers import AutoModelForCausalLM, AutoTokenizer from copy import deepcopy import matplotlib.pyplot as plt import matplotlib.ticker as ticker import seaborn as sns
このメソッドは次のとおりです
単純な実装
# Define quantization functions def absmax_quantize(X): scale = 100 / torch.max(torch.abs(X)) # Adjusted scale X_quant = (scale * X).round() X_dequant = X_quant / scale return X_quant.to(torch.int8), X_dequantoutput:
この方法:
def zeropoint_quantize(X): x_range = torch.max(X) - torch.min(X) x_range = 1 if x_range == 0 else x_range scale = 200 / x_range zeropoint = (-scale * torch.min(X) - 128).round() X_quant = torch.clip((X * scale + zeropoint).round(), -128, 127) X_dequant = (X_quant - zeropoint) / scale return X_quant.to(torch.int8), X_dequant
値の全範囲を計算します
非対称分布のより良い取り扱い
Using device: cuda
量子化プロセス:重みとモデル
元の、ABSMAX量子化、およびゼロポイントの量子化されたモデルの重量分布を視覚化して比較します。これらのヒストグラムは、量子化が体重値と全体的な分布にどのように影響するかについての洞察を提供します。
# Load model and tokenizer model_id = 'gpt2' model = AutoModelForCausalLM.from_pretrained(model_id).to(device) tokenizer = AutoTokenizer.from_pretrained(model_id) # Print model size print(f"Model size: {model.get_memory_footprint():,} bytes")コードには、包括的な視覚化関数が含まれています:
元の重みを表示するグラフ対ABSMAX重み
# Quantize and visualize weights weights_abs_quant, _ = absmax_quantize(weights) weights_zp_quant, _ = zeropoint_quantize(weights) # Quantize the entire model model_abs = deepcopy(model) model_zp = deepcopy(model) for param in model_abs.parameters(): _, dequantized = absmax_quantize(param.data) param.data = dequantized for param in model_zp.parameters(): _, dequantized = zeropoint_quantize(param.data) param.data = dequantizedグラフは、元の重みとゼロポイントの重みを表示します
パフォーマンス評価
モデルのパフォーマンスに対する量子化の影響を評価することは、効率と精度を確保するために不可欠です。量子化されたモデルが元のモデルと比較してどれだけうまく機能するかを測定しましょう。
量子化されたモデルがテキストを生成する方法を探り、出力の品質を元のモデルの予測と比較します。
import seaborn as sns import torch import numpy as np from transformers import AutoModelForCausalLM, AutoTokenizer from copy import deepcopy import matplotlib.pyplot as plt import matplotlib.ticker as ticker import seaborn as snsこのコードは、3つのモデル、オリジナル、「absmax」量子化モデル、および「ゼロポイント」量子化モデルの3つのモデルからのテキスト生成出力を比較します。 Generate_Text関数を使用して、入力プロンプトに基づいてテキストを生成し、30のトップK値でサンプリングを適用します。最後に、3つのモデルすべての結果を印刷します。 output:
# Define quantization functions def absmax_quantize(X): scale = 100 / torch.max(torch.abs(X)) # Adjusted scale X_quant = (scale * X).round() X_dequant = X_quant / scale return X_quant.to(torch.int8), X_dequantoutput:
ここからcolabリンクにアクセスできます。
以上がニューラルネットワークの重量量子化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。