大規模言語モデル (LLM) は過去 1 年間で急速に進化しており、この記事では (量子化) へのいくつかのアプローチを検討するとともに、シャーディングとさまざまなストレージおよび圧縮戦略を紹介します。 注: 各 LLM サンプルがロードされた後、OutOfMemory エラーを防ぐためにキャッシュをクリアすることをお勧めします。 Jupyter でビデオメモリを解放できない場合は、Jupyter ノートブックを再起動してください。 モデルの読み込みLLM をロードする最も直接的で一般的な方法は、Transformer を使用することです。 HuggingFaceは直接使用できるパッケージを作成しました
インストールが完了すると、次のパイプラインを使用して LLM を簡単にロードできます。 ここではzephyr-7b-betaを例として使用します。 LLM をロードするこの方法では、通常、圧縮トリックは実行されません。使用例を見てみましょう
内部プロンプト テンプレートを使用して生成されるプロンプトは、次のように構成されます。 次に、ヒントを LLM に渡して答えを生成します。 これは最も簡単なワークフローですが、純粋な推論の場合、モデル全体が圧縮や量子化戦略なしでロードされるため、このアプローチは最も効率が低くなります。 シャーディング定量的な戦略に入る前に、まず前提条件となる方法であるシャーディングを紹介しましょう。シャーディングを使用すると、モデルを小さな部分に分割し、各シャードにモデルの小さな部分を含めることができます。これにより、モデルの重みをさまざまなデバイスに分散することで、GPU メモリの制限に対処できます。 圧縮や量子化はありませんが、この方法は大規模なモデルをロードするための最も簡単なソリューションです。 たとえば、Zephyr-7B-β は実際にシャード化されています。モデルに移動して「ファイルとバージョン」リンクをクリックすると、モデルが 8 つの部分に分割されていることがわかります。 モデルのシャーディングは非常に簡単で、Accelerate パッケージを使用して直接実行できます。 これにより、モデルは4GBのシャードに分割されます 定量化大規模な言語モデルは、一連の重みとアクティベーションによって表されます。これらの値は通常、通常の 32 ビット浮動小数点 (float32) データ型で表されます。 ビット数は、いくつの値を表現できるかを示します。 Float32 は 1.18e-38 から 3.4e38 までの値を表すことができますが、これは非常に多くの値です。ビット数が少ないほど、表せる値も少なくなります。 より低いビット サイズを選択すると、モデルの精度は低下しますが、表される値が少なくなるため、サイズとメモリ要件が削減されます。 量子化とは、LLM を元の Float32 表現からより小さな表現に変換することを指します。単純に小さいビットのバリアントを使用するのではなく、あまり多くの情報を失うことなく、大きいビット表現を小さいビット表現にマッピングしたいと考えています。 したがって、一般的には、これを実現するために 4bit-NormalFloat (NF4) と呼ばれる新しい形式がよく使用されます。このデータ型は、より大きなビットのデータ型を効率的に表現するためにいくつかの特別なトリックを実行します。次の 3 つのステップで構成されます。 正規化: モデルの重みを正規化して、重みが特定の範囲内に収まるようにします。これにより、より一般的な値をより効率的に表現できるようになります。 量子化: 重みを 4 ビットに量子化します。 NF4 では、量子化レベルは正規化された重みに対して均等に配置され、元の 32 ビットの重みを効果的に表します。 逆量子化: 重みは 4 ビットで保存されますが、計算中に逆量子化されるため、推論中のパフォーマンスが向上します。 量子化操作には Bitsandbytes ライブラリを直接使用できます。 上記の設定は、使用する量子化レベルを指定します。たとえば、重みを量子化するには 4 ビットが使用されますが、推論には 16 ビットが使用されます。 パイプラインにモデルをロードするのは簡単です。 次に、前と同じプロンプトを使用します。 量子化は、パフォーマンスを同様に保ちながらモデルのメモリ要件を削減できる強力な手法です。これにより、小型の GPU でも LLM の読み込み、使用、微調整を高速化できます。 事前量子化 (GPTQ、AWQ、GGUF)シャーディングと量子化の技術を検討しました。しかし、モデルをロードするたびに量子化が実行され、非常に時間のかかる操作になります。量子化されたモデルを直接保存し、使用時に直接ロードする方法はありますか? TheBloke は HuggingFace のユーザーです。一連の量子化操作を実行してくれます。大規模なモデルを使用したことがある人なら、きっとよくご存知だと思います。 これらの定量モデルには、GPTQ、GGUF、AWQ など多くの形式が含まれます。それらを紹介しましょう。 1. GPTQ: GPTモデルのトレーニング後の量子化GPTQ は、GPU 推論とパフォーマンスに重点を置いた 4 ビットのトレーニング後量子化 (PTQ) 方式です。 この方法の背後にある考え方は、重みの平均二乗誤差を最小限に抑えることで、すべての重みを 4 ビットに圧縮することです。推論中は、メモリを低く抑えながらパフォーマンスを向上させるために、重みを float16 に動的に逆量子化します。 HuggingFace Transformers に gptq クラス モデルをロードする必要があります。 次に、「TheBloke/zephyr-7B-beta-GPTQ」などのロードする必要があるモデルを見つけてロードします。 いくつかの追加の依存関係をインストールしましたが、以前と同じパイプラインを使用できるため、コードを変更する必要がなく、これが GPTQ を使用する大きな利点です。 GPTQ は GPU の使用に最適化されているため、最も一般的に使用される圧縮方法です。しかし、GPU がこのような大規模なモデルを処理できない場合は、GPTQ から始めて、GGUF などの CPU 中心の方法に切り替える価値は間違いなくあります。 2. GPT生成の統合フォーマットGPTQ は圧縮に優れていますが、それを実行するためのハードウェアがない場合は、他の方法を使用する必要があります。 GGUF (旧称 GGML) は、CPU を使用して LLM を実行できるだけでなく、一部のレイヤーを GPU にロードして速度を向上させる量子化方法です。 CPU を使用した推論は一般に GPU を使用するよりも遅くなりますが、CPU または Apple デバイスでモデルを実行したい場合には非常に適した形式です。 GGUF の使い方は非常に簡単です。まず ctransformers パッケージをインストールする必要があります。 次にモデル「TheBloke/zephyr-7B-beta-GGUF」をロードします。 モデルをロードした後、次のプロンプトを実行できます。 CPU と GPU の両方を活用したい場合、GGUF は非常に優れた形式です。 3. AWQ: アクティベーションを考慮した重み量子化上記 2 つに加えて、GPTQ に似た量子化方式である AWQ (Activation-Aware Weight Quantization) という新しい形式があります。 AWQ と GPTQ には手法としていくつかの違いがありますが、最も重要なのは、AWQ ではすべての重みが LLM のパフォーマンスに対して同等に重要であるとは限らないと想定していることです。 つまり、量子化プロセス中に重みの小さな部分がスキップされ、量子化損失を軽減するのに役立ちます。そのため、彼らの論文では、GPTQ と比較して、同様の、場合によってはそれ以上のパフォーマンスを維持しながら、大幅な高速化が実現されていると述べています。 この方法はまだ比較的新しいため、GPTQ や GGUF ほどには採用されていません。 AWQ では vLLM パッケージを使用します。 vLLM を使用すると、モデルを直接ロードできます。 次に、.generate を使用してモデルを実行します。 それでおしまい。 |
<<: ChatGPTは、すべての過去のチャットの学習、記憶のリセット、および「読んだ後の書き込み」という新機能をテストするために公開されました。
RWKV ポッドキャストからの私の考えの一部を要約すると次のようになります: https://www...
AI によって人々の働き方が変化する中、企業は従業員が自動化された職場環境に能力を適応できるように支...
マーク・アンドリーセンはかつてウォール・ストリート・ジャーナルに「なぜソフトウェアが世界を席巻してい...
人工知能 (AI) 対応ソリューションの機能からスマート デバイスによるモビリティの向上まで、コネク...
人工知能(AI)はAIと略されます。これは、人間の知能をシミュレート、拡張、拡大するための理論、方法...
シーケンスモデルにおけるHMM(隠れマルコフモデル)を習得した後は、別のシーケンスモデルであるCRF...
2017年は人工知能技術(AI)において画期的な発展があった年でした。過去 1 年間の大きな宣伝にも...
機械学習はここしばらく話題になっていますが、それには十分な理由があります。機械学習は、将来の行動を予...
k-means アルゴリズムは比較的単純です。 k-means アルゴリズムでは、クラスターはクラ...
近年、モバイルインターネットの発展とスマートフォンの普及により、さまざまなモバイルゲームが急速に普及...
レノボ・エンタープライズ・テクノロジー・グループは12月8日、「レノボ・インテリジェント・トランスフ...
Google Gemini、またもやスキャンダル!昨日の朝、ネットユーザーたちは、ジェミニが中国語コ...