Skip to content

Latest commit

 

History

History
365 lines (256 loc) · 19.7 KB

README_ja.md

File metadata and controls

365 lines (256 loc) · 19.7 KB

llmc: 正確で効率的なLLM圧縮に向けて

llmc

ライセンス arXiv GitHub スター 訪問者 Discord バナー QQ Doc Doc

[ English | 中文 | 日本語 ]

llmc は、最先端の圧縮アルゴリズムを活用して、パフォーマンスを損なうことなく効率を向上させ、モデルサイズを削減することを目的とした、オフ・ザ・シェルフのツールです。

英語のドキュメントこちらです。

中国語のドキュメントこちらです。

docker hubこちらです。

コミュニティ:

ニュース

  • 2024年9月24日: 🔥 LLMCを使用して量子化されたLlama-3.1-405BのINT4およびINT8モデルをリリースしました。モデルパラメータはこちらからダウンロードできます。

  • 2024年9月23日: 🔥 私たちは、LLMC実際の量子化 モデルを SGLangAutoAWQ、および MLC-LLM などの高度な推論バックエンドにエクスポートし、量子化推論のデプロイメントをサポートしました。これにより、メモリ使用量の削減推論速度の向上 が可能になります。詳細な使用方法については、SGLang ドキュメントAutoAWQ ドキュメント、および MLC-LLM ドキュメント をご参照ください。

  • 2024年9月9日: 🔥 量子化された LLM の vLLM へのエクスポートを修正しました (こちら を参照)。さらに、優れたパフォーマンスに向けた ベスト プラクティスの構成 もいくつか提供しています (ベスト プラクティスは こちら を参照)。

  • 2024年9月3日: 🚀 私たちはOpenCompassの精度評価をサポートしました。ドキュメントはこちらを参照してください。ぜひご利用ください!

  • 2024年8月22日: 🔥私たちは、現在の最先端技術であるSmolLMサポートされているモデルリストを参照)を含む多くの小型言語モデルをサポートしています。さらに、改良されたlm-evaluation-harness 🤗 を通じてダウンストリームタスクの評価もサポートしています。具体的には、まず save_trans モード(設定save 部分を参照)を使用して、変更されたモデルの重みを保存します。変換後のモデルを取得した後、run_lm_eval.shを参照して量子化モデルを直接評価することができます。詳細はこちらで確認できます。

  • 2024年7月23日: 🍺🍺🍺 新しいバージョンのベンチマーク ペーパーをリリースします:

    LLMC: 多用途の圧縮ツールキットを使用した大規模言語モデル量子化のベンチマーク

    Ruihao Gong*Yang Yong*Shiqiao Gu*Yushi Huang*Chengtao LvYunchen ZhangXianglong Liu📧Dacheng Tao

    (* は同等の貢献、📧 は対応する貢献を表します著者。)

    comp

    ベストプラクティスに焦点を当てるのではなく、キャリブレーションデータ、アルゴリズム、データ形式を考慮して、LLM量子化をモジュール式かつ公平にベンチマークします。詳細な観察と分析により、さまざまな構成でパフォーマンスと方法を改善するためのさまざまなタイプの新しいポイントを提供します。強力なツールキットLLMCと包括的な洞察により、将来のLLM研究者は、アプリケーションに適したアルゴリズムと低ビット形式を効率的に統合し、大規模な言語モデルの圧縮を民主化できます。

  • 2024年7月16日: 🔥現在、llmのスパース化と層間混合ビット量子化のためのWanda/Naive(Magnitude)をサポートしています!

  • 2024年7月14日: 🔥現在、回転ベースの量子化QuaRotをサポートしています!

  • 2024年7月4日: 📱 ディスカッションチャンネルを開設しました。質問がある場合は、コミュニティに参加してください:

  • 2024年5月17日: 🚀 現在、LLaVA、Mixtral、LLaMA V3、Qwen V2などの高度な大規模モデルをサポートしています。試してみてください!

  • 2024年5月13日: 🍺🍺🍺 量子化ベンチマーク論文を発表しました:

    LLM-QBench: 大規模言語モデルのポストトレーニング量子化のベストプラクティスに向けたベンチマーク.

    Ruihao Gong*, Yang Yong*, Shiqiao Gu*, Yushi Huang*, Yunchen Zhang, Xianglong Liu📧, Dacheng Tao

    (* は同等の貢献を示し、📧 は対応する著者を示します。)

    comp

    校正コスト、推論効率、および量子化精度を考慮して、量子化技術をモジュール化し、公平にベンチマークしました。多様なモデルとデータセットでの約600の実験が、校正データ、アルゴリズムパイプライン、および量子化構成の選択に関する3つの洞察を提供します。これらの洞察に基づいて、LLM PTQパイプラインのベストプラクティスが設計され、さまざまなシナリオで最高の精度と効率のパフォーマンスバランスを実現します。

  • 2024年3月7日: 🚀 強力で効率的なLLM圧縮ツールの量子化部分をリリースしました。注目すべきは、ベンチマーク論文が近日公開予定です😊。

ハイライト機能

  • LLMs(例:Llama2-70B、OPT-175B)を量子化し、1つのA100/H100/H800 GPUでPPLを評価します💥。
  • ユーザーが選択できる最先端の圧縮アルゴリズムが元のリポジトリと一致し、ユーザーは1つのLLMで複数のアルゴリズムを順次使用できます💥。
  • 特定の圧縮アルゴリズムでツールによってエクスポートされた変換モデル(構成quant部分のsave_transモード)は、複数のバックエンド(例:LightllmTensorRT-LLM)によって単純な量子化を行い、特定の圧縮アルゴリズムで最適化されたモデルを取得できます。対応するバックエンドが推論できます💥。
  • 浅いメモリフットプリントを持つ圧縮モデル(構成quant部分のsave_lightllmモード)は、Lightllmによって直接推論できます💥。

使用方法

  1. このリポジトリをクローンし、パッケージをインストールします:

    # パッケージをインストール
    cd llmc
    pip install -r requirements.txt
  2. モデルとデータを準備します。

    # huggingfaceからLLMをダウンロードした後、次のように校正データと評価データを準備します:
    cd tools
    python download_calib_dataset.py --save_path [校正データパス]
    python download_eval_dataset.py --save_path [評価データパス]
  3. アルゴリズムを選択してモデルを量子化します:

    # これはAwqに関する例です:
    cd scripts
    # bashファイル内のllmcのパス``llmc_path``を変更します。``llmc/configs/quantization/Awq/``に配置された構成の1つを選択してモデルを量子化するか、run_awq_llama.shの``--config``引数を変更して提供された構成を使用します。
    bash run_awq_llama.sh

構成

ユーザーが構成を設計するのを支援するために、llmc/configs/の下に提供されているすべての構成のいくつかの一般的な構成を説明します:

  • model:

    model:
        # ``llmc/models/*.py``のクラス名に置き換えます。
        type: Llama
        # モデルのパスに置き換えます。
        path: model path
        torch_dtype: auto
  • calib:

    # 注意:一部のアルゴリズムには``calib``が必要ありません。例:naive... したがって、この部分を削除できます。
    calib:
        # 以前にダウンロードした校正データ名に置き換えます。例:pileval、c4、wikitext2、またはptb。
        name: pileval
        download: False
        # 以前にダウンロードした校正データの1つのパスに置き換えます。例:pileval、c4、wikitext2、またはptb。
        path: calib data path
        n_samples: 128
        bs: -1
        seq_len: 512
        # ``llmc/data/dataset/specified_preproc.py``の関数名に置き換えます。
        preproc: general
        seed: *seed
  • eval:

    # 事前トレーニング/変換/偽量子化モデルのPPLを評価したい場合。
    eval:
        # 事前トレーニング、変換、偽量子化モデルを評価し、評価したい位置を設定できます。
        eval_pos: [pretrain, transformed, fake_quant]
        # 以前にダウンロードした評価データの名前に置き換えます。例:c4、wikitext2、ptb、または[c4, wikitext2]。
        name: wikitext2
        download: False
        path: eval data path
        # 70Bモデルの評価の場合、bsを20に設定し、inference_per_blockをTrueに設定できます。
        # 7B / 13Bモデルの評価の場合、bsを1に設定し、inference_per_blockをFalseに設定できます。
        bs: 1
        inference_per_block: False
        seq_len: 2048
  • save:

    save:
        # ``save_trans``がTrueの場合、変換モデル(例:パラメータが変更されたモデル)をエクスポートしたいことを意味します。パフォーマンスと構造は元のモデルと同じであり、ユーザーは単純な量子化を使用して、特定のアルゴリズムで量子化されたモデルと同じパフォーマンスを得ることができます。
        save_trans: False
        # ``save_lightllm``または ``save_trtllm`` がTrueの場合、実際の量子化モデル(例:低ビットの重みと重みおよびアクティベーションの量子化パラメータ)をエクスポートしたいことを意味します。
        save_lightllm: False
        # ``save_fake``がTrueの場合、偽量子化モデル(例:量子化解除された重みとアクティベーションの量子化パラメータ)をエクスポートしたいことを意味します。
        save_fake: False
        save_path: ./save
  • quant:

    quant:
        # ``llmc/compression/quantization/*.py``のクラス名に置き換えます。
        method: OmniQuant
        # 重みのみの量子化には``act``部分がありません。
        weight:
            bit: 8
            symmetric: True
            # 量子化の粒度:per_channel、per_tensor、per_head(推奨されません)。
            granularity: per_channel
            group_size: -1
            # 校正アルゴリズム:learnble、mse、およびminmax(デフォルト)。
            calib_algo: learnable
            # ストレートスルー推定を使用します。これは、学習可能な校正アルゴリズムに必要です。
            ste: True
        act:
            bit: 8
            symmetric: True
            # 量子化の粒度:per_token、per_tensor
            granularity: per_token
            ste: True
            # 静的量子化(校正中の量子化)または動的量子化(推論中の量子化)。
            static: True
        # この部分は特定のアルゴリズム用に設計されており、提供されているものを参考にして独自のアルゴリズムを設計できます。
        special:
            let: True
            lwc_lr: 0.01
            let_lr: 0.005
            use_shift: False
            alpha: 0.5
            deactive_amp: True
            epochs: 20
            wd: 0
        # quant_outがTrueの場合、前の量子化ブロックの出力を次のブロックの校正データとして使用します。
        quant_out: True

サポートされているモデルリスト

BLOOM

LLaMA

LLaMA V2

StarCoder

OPT

Falcon

InternLM2

Mistral

LLaMA V3

Mixtral

Qwen V2

LLaVA

Mixtral

Qwen V2

LLaVA

InternLM2.5

StableLM

Gemma2

Phi2

Phi 1.5

MiniCPM

SmolLM

llmc/models/*.pyの下のファイルを参照して、独自のモデルタイプを追加できます。

サポートされているアルゴリズムリスト

量子化

✅ Naive

AWQ

GPTQ

SmoothQuant

OS+

OmniQuant

NormTweaking

AdaDim

QUIK

SpQR

DGQ

OWQ

LLM.int8()

HQQ

QuaRot

剪定

✅ Naive(Magnitude)

Wanda

ShortGPT

謝辞

以下のリポジトリを参考にしてコードを開発しました:

スター履歴

スター履歴チャート

引用

LLM-QBench論文/llmcツールキットが研究に役立つまたは関連している場合は、論文を引用してください:

@misc{llmc,
   author = {llmc contributors},
   title = {llmc: Towards Accurate and Efficient LLM Compression},
   year = {2024},
   publisher = {GitHub},
   journal = {GitHub repository},
   howpublished = {\url{https://github.com/ModelTC/llmc}},
}

@misc{gong2024llmqbench,
      title={LLM-QBench: A Benchmark Towards the Best Practice for Post-training Quantization of Large Language Models},
      author={Ruihao Gong and Yang Yong and Shiqiao Gu and Yushi Huang and Yunchen Zhang and Xianglong Liu and Dacheng Tao},
      year={2024},
      eprint={2405.06001},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}

@misc{gong2024llmcbenchmarkinglargelanguage,
      title={LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit},
      author={Ruihao Gong and Yang Yong and Shiqiao Gu and Yushi Huang and Chentao Lv and Yunchen Zhang and Xianglong Liu and Dacheng Tao},
      year={2024},
      eprint={2405.06001},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2405.06001},
}