0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLM量子化 Day 21: プログレス表示

Last updated at Posted at 2025-12-20

科学と神々株式会社アドベントカレンダー 2025

LLM量子化 Day 21: プログレス表示

「待つ」体験をデザインする

大規模モデルの量子化は時間がかかります。その間、ユーザーは不安になります:

  • 「本当に動いているのか?」
  • 「あとどれくらいかかるのか?」
  • 「フリーズしていないか?」

プログレス表示は、この不安を解消し、「待つ」体験を改善します。

Richライブラリの活用

llm-quantizeは、Richライブラリを使用してリッチなターミナルUIを実現しています。

Richの特徴

  • カラフルなテキスト出力
  • プログレスバー
  • テーブル表示
  • マークダウンレンダリング
  • 自動的なターミナル幅対応

プログレスバーの設計

Quantizing to GGUF Q4_K_M...
Layer 15/32 [████████████████        ] 47%  ETA: 2:30
         ↑          ↑           ↑       ↑
         |          |           |       └── 残り時間の推定
         |          |           └── 進捗率
         |          └── 視覚的な進捗
         └── 現在の処理内容

プログレスバーは、以下の情報を伝えます:

  1. 現在何をしているか: Layer 15/32
  2. どれだけ進んだか: 47%
  3. あとどれくらいか: ETA 2:30
  4. 動いているか: バーのアニメーション

冗長性レベル(Verbosity)

ユーザーによって、欲しい情報量は異なります:

Quiet モード

$ llm-quantize --verbosity quiet quantize model gguf -q Q4_K_M

# 最小限の出力、エラーのみ表示

バッチ処理や大量のログを見たくない場合に。

Normal モード(デフォルト)

$ llm-quantize quantize model gguf -q Q4_K_M

Starting quantization...
[████████████████████████████████] 100%
✓ Complete: model-Q4_K_M.gguf (4.0 GB)

通常の使用に適した情報量。

Verbose モード

$ llm-quantize --verbosity verbose quantize model gguf -q Q4_K_M

Loading model: meta-llama/Llama-2-7b-hf
Architecture: LlamaForCausalLM
Parameters: 7,000,000,000
Quantizing to GGUF Q4_K_M (group_size=128)
Layer 1/32 [████████████████████████████████] 100%
Layer 2/32 [████████████████████████████████] 100%
...
Validating output...
✓ Complete: model-Q4_K_M.gguf (4.0 GB)
Compression ratio: 72%

詳細な進捗を確認したい場合に。

Debug モード

$ llm-quantize --verbosity debug quantize model gguf -q Q4_K_M

[DEBUG] Config: {"target_format": "gguf", "quantization_level": "Q4_K_M", ...}
[DEBUG] Loading tokenizer...
[DEBUG] Tokenizer loaded in 0.5s
[DEBUG] Loading model weights...
[DEBUG] Layer 0: 256MB, dtype=float16
...

トラブルシューティング用の詳細ログ。

適切なログレベルの選択

情報の種類              Quiet  Normal  Verbose  Debug
─────────────────────────────────────────────────────
致命的エラー             ✓      ✓       ✓        ✓
警告                     ✓      ✓       ✓        ✓
完了メッセージ                  ✓       ✓        ✓
進捗バー                        ✓       ✓        ✓
詳細ステップ                            ✓        ✓
内部状態                                         ✓

ProgressReporterクラス

llm-quantizeでは、ProgressReporterクラスがすべての進捗表示を担当します:

ProgressReporter
├── start(total, description)  # 新しい進捗を開始
├── update(advance, description)  # 進捗を更新
├── complete(message)  # 完了メッセージ
├── log_info(message)  # 情報ログ
├── log_warning(message)  # 警告ログ
├── log_error(message)  # エラーログ
└── log_debug(message)  # デバッグログ

スピナーの活用

進捗率が計算できない処理には、スピナーを使います:

Loading model... ⠋
                 ↑ 回転アニメーション

「動いている」ことは伝わりますが、「あとどれくらい」は不明な場合に使います。

時間推定の精度

ETAの計算は難しい問題です:

単純な推定:
ETA = 経過時間 × (残りレイヤー / 完了レイヤー)

問題:
├── 各レイヤーの処理時間が異なる
├── システム負荷が変動する
└── I/O待ちで大きくぶれる

llm-quantizeでは、最近N個のレイヤーの平均処理時間を使って、より正確なETAを計算しています。

メモリ使用量の表示

大規模モデルでは、メモリ使用量も重要な情報です:

Layer 15/32 [████████████] 47%  Memory: 12.5GB / 16GB

メモリが上限に近づいていることがわかれば、ユーザーは対策を取れます。

エラー時の表示

エラーが発生した場合も、適切にフィードバックします:

Layer 15/32 [████████████] 47%
✗ Error: Out of memory at layer 15

Suggestion:
- Reduce batch size with --batch-size 1
- Use a smaller model
- Free up system memory

単にエラーを表示するだけでなく、解決策も提示します。

Tips: プログレス表示のコツ

1. 嘘をつかない

# 悪い例: 99%で長時間止まる
[████████████████████████████████████] 99%  ← 最後の1%が10分

# 良い例: 正確な進捗
Layer 31/32 [████████████████████████████████████████] 97%

最後のレイヤーが重いなら、正直にそれを示す。

2. 適度な更新頻度

# 悪い例: 更新が多すぎる
# 毎ミリ秒更新 → ターミナルがちらつく

# 良い例: 人間が認識できる頻度
# 100ms〜500ms間隔で更新

3. 重要な情報を最後に

✓ Quantization complete!
Output: ./model-Q4_K_M.gguf
Size: 4.0 GB (72% compression)
Time: 15 minutes

完了時のサマリーは、コピペしやすい形式で。

4. カラーは意味を持って使う

緑: 成功 ✓
黄: 警告 ⚠
赤: エラー ✗
青: 情報

色に意味を持たせることで、一目で状況がわかります。

5. 非対話環境への配慮

# パイプやファイルリダイレクト時はシンプルに
llm-quantize quantize model gguf -q Q4_K_M > log.txt
# プログレスバーのエスケープシーケンスは出力しない

次回予告

Day 22では「エラーハンドリング」として、予期しない状況に対処する設計について解説します。


プログレス表示は「機能」ではなく「体験」です。技術的には不要でも、ユーザーの安心感と信頼を得るために欠かせません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?