provider.quantizations を送ると、テストした精度でモデルを提供しているプロバイダーにだけリクエストをルーティングできます。
量子化で何が変わるか
量子化は、モデルの重みをより小さい数値型で保存します。同じモデルが少ないメモリで動き、より速く応答するようになる代わりに、出力の品質がある程度下がります。量子化されたモデルは 2 つの要素で表されます。形式(FP8 や INT4 などの数値型)と、手法(AWQ や GPTQ など、重みをその型に変換した方法)です。
ビット数が半分になるごとに、重みに必要なメモリも半分になります。700 億パラメーターのモデルでは、重みだけでおおよそ次のサイズになります。
これらの数値は単純な計算(パラメーター数 × 重みあたりのバイト数)によるもので、プロバイダーが別途メモリを必要とするアクティベーションと KV キャッシュは含まれていません。
精度形式を比較する
精度形式は、プロバイダーがモデルの重みを保存するのに使う数値型です。精度が低いほどメモリの使用量が少なく応答も速くなりますが、出力の品質へのリスクが高くなります。BF16 か FP16 か
どちらも 16 ビットです。BF16 は指数の範囲が広いため安定しています。FP16 は一般的で高速ですが、一部のワークロードでは安定性が劣ります。プロバイダーが BF16 を提供している場合、品質が重要なトラフィックにはそちらが安全です。
FP8 と FP4
FP8 は効率を大きく改善しつつ、ほとんどのタスクで実用的な品質を保ちます。FP4 はさらに効率を高めますが、特に微妙な推論、長いコンテキスト、厳密な構造化出力で、品質が下がることが多くなります。
INT8 と INT4
整数形式は、推論のスループットとメモリのために作られています。品質をどれだけ保てるかは、量子化手法、キャリブレーションデータ、モデルのアーキテクチャによって決まります。INT8 は INT4 より安全にデプロイしやすい形式です。
モデルのラベルを読む
プロバイダーはバリアントにbf16、fp16、fp8、int8、q4、4bit、8bit などのラベルを付けます。命名は標準化されておらず、4bit が FP4 を指すことも INT4 を指すこともあります。正確なバリアントはプロバイダーのドキュメントで確認してください。
量子化手法を比較する
INT4 のような形式は精度の目標で、AWQ や GPTQ のような手法は重みをその形式に変換した方法です。AWQ INT4 と GPTQ INT4 は同じ目標に異なる方法で到達するため、動作が大きく異なることがあります。手法は、精度がどれだけ保たれるか、どのランタイムでモデルを提供できるか、メモリのレイアウトと提供速度、キャリブレーションデータが必要だったかどうかに影響します。
自分のワークロードで手法を比較するには、次のようにします。
- まず、確実にデプロイできるランタイムを選びます。
- そのランタイムが対応している手法の系統だけを残します。
- 同じ精度の目標で、複数の手法をベンチマークします。
- ベンチマークの平均スコアだけでなく、失敗の傾向も追跡します。構造化出力の正確さ、長いコンテキストへの忠実さ、ツール呼び出しの信頼性、安全性とモデレーションの挙動、負荷時のテールレイテンシなどです。
1 つの精度にルーティングする
provider.quantizations フィルターは、プロバイダー名だけでなく、各プロバイダーのそのモデルのオファーを確認します。
- 照合では大文字と小文字、空白、
-、_を区別しません。 曖昧さのないエイリアスも一致します。BF16にはbfloat16、FP16にはfloat16、FP8にはfloat8です。4bitのようなラベルはFP4ともINT4とも扱われません。 - 量子化のメタデータがないオファーは一致しません。
- 別の精度へのフォールバックはありません。 一致するオファーがない場合、リクエストは
400 unsupported_model_or_endpoint(理由quantization_not_available)で失敗します。エラーには利用可能な精度と、routing_diagnostics.quantizationの下に除外されたプロバイダーとその理由が示されます。 provider.quantizationsの代わりにrouting.quantizationsも受け付けられます。
精度を選ぶ
すべてに 1 つの精度を使う必要はありません。カスタマーサポートや重要な判断には高い精度を使い、大量の分類や要約には低い精度を受け入れる、という使い分けができます。
1
成功の基準を決める
品質のしきい値(タスクの正確さ、合格率、構造化出力の妥当性)、レイテンシとコストの目標、受け入れられない失敗の傾向を決めます。
2
高精度の基準を測定する
BF16 または FP16 から始めます。出力の品質、レイテンシの中央値とテール、トークンのコストを記録します。低い精度はすべてこれと比較します。3
1 段階ずつ精度を下げる
次に
FP8 または INT8 を試します。コストやスループットをさらに削減する必要がある場合にのみ、FP4 または INT4 に進みます。自分のワークロードで機能するという根拠がすでにない限り、いきなり最も小さいバリアントに進まないでください。4
本番に近いプロンプトでテストする
長いプロンプト、複数ステップの推論、ツール呼び出し、サポートチケットにあるエッジケースを含めます。
5
展開して監視を続ける
一致するオファーがない場合に備えて、自分のクライアントにフォールバックのモデルまたは精度を用意し、展開後も品質を監視して、プロバイダーのランタイムやモデルのリビジョンが変わったら再テストしてください。精度が決まったら、その上で推論パラメーターを調整します。