ホームページ > テクノロジー周辺機器 > AI > モデルをGGUF形式に変換する方法は?

モデルをGGUF形式に変換する方法は?

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-03-20 11:04:13
オリジナル
832 人が閲覧しました

大規模な言語モデル(LLM)はスケールで成長し続けるため、低リソースデバイスでそれらを保存、展開、および実行するための効率的な方法が必要になります。これらのモデルは強力な機能を提供しますが、そのサイズとメモリの要求は、特に消費者ハードウェアで展開を課題にすることができます。これは、GGUF(Generic GPT Unified Format)などのモデルの量子化と特殊なストレージ形式が登場する場所です。

このガイドでは、GGUF形式を掘り下げ、その利点を調査し、モデルをGGUFに変換する段階的なチュートリアルを提供します。途中で、モデルの量子化の歴史と、最新のLLMをサポートするためにGGUFがどのように進化したかについて触れます。最後に、GGUFが重要な理由と、独自のモデルに使用する方法を深く理解できます。

学習目標

  • GGUF形式の目的と構造と、GGMLからのその進化を理解します。
  • 量子化を定義し、モデルサイズを削減し、展開効率を改善する上でその重要性を説明します。
  • GGUFネーミング条約のコンポーネントと、モデルの識別と管理の支援方法を認識します。
  • llama.cppを使用して、モデルをGGUF形式に量子化します。
  • GGUFと量子化の概念を実際のユースケースに関連付け、リソースに制約のある環境でAIモデルの効果的な展開を可能にします。

この記事は、データサイエンスブログソンの一部として公開されました

目次

  • モデル量子化の進化
  • GGUFとは何ですか?
  • なぜGGUFを使用するのですか?
  • GGUF形式の構造と命名規則
  • GGUF形式への変換用のセットアップ
  • モデルをGGUFに変換します
  • GGUF変換のベストプラクティス
  • GGUFおよびモデルストレージ形式の将来
  • 結論
  • よくある質問

モデル量子化の進化

GGUFへの旅は、モデル量子化の進化を理解することから始まります。量子化により、モデルパラメーターの精度が低下し、それらを効果的に圧縮してメモリと計算の需要を減らします。これが簡単な概要です:

初期の形式と課題

初期の時代には、深い学習モデルは、TensorflowやPytorchなどのフレームワークのネイティブ形式に保存されていました。 Tensorflowモデルは.pbファイルを使用しましたが、Pytorchは.ptまたは.pthを使用しました。これらの形式は、より小さなモデルで機能しましたが、制限を提示しました。

  • サイズ:モデルは32ビットのフローティングポイント形式で保存され、ファイルサイズが大きくなりました。
  • メモリの使用:全精度の重みがかなりのメモリを要求し、RAMが制限されていないデバイスの展開を非現実的にしました。

onnx(オープンニューラルネットワーク交換)

フレームワーク全体の相互運用性の上昇により、ONNXが開発され、モデルが環境間を移動できました。ただし、ONNXはいくつかの最適化を提供しましたが、それは主に全精度の重みを中心に構築され、限られた量子化サポートを提供していました。

量子化の必要性

モデルが大きくなるにつれて、研究者は量子化に変わり、32ビットのフロート(FP32)から16ビット(FP16)または8ビットの整数(INT8)のようにさらに低い重量を圧縮します。このアプローチは、メモリの要件を大幅に削減し、より多くのハードウェアタイプでモデルを実行できるようにします。例えば:

 #必要なライブラリをインポートします
トーチをインポートします
torch.nnをnnとしてインポートします
torch.quantizationをQuantとしてインポートします

#ステップ1:Pytorchで単純なニューラルネットワークモデルを定義する
クラスsimplemodel(nn.module):
    def __init __(self):
        super(simplemodel、self).__ init __()
        self.fc1 = nn.linear(10、50)#最初に完全に接続されたレイヤー
        self.fc2 = nn.linear(50、20)#秒完全に接続されたレイヤー
        self.fc3 = nn.linear(20、5)#出力層

    def worward(self、x):
        x = torch.relu(self.fc1(x))#最初の層の後のRelu activation
        x = torch.relu(self.fc2(x))#relu activation onfer decourd layer
        x = self.fc3(x)#出力層
        xを返します

#ステップ2:モデルを初期化し、評価モードに切り替えます
Model = simpleModel()
model.eval()

#基準のために量子化する前にモデルを保存します
torch.save(model、 "simple_model.pth")

#ステップ3:モデルに動的量子化を適用します
#ここでは、線形層のみを量子化し、その重みをINT8に変更します
Quantized_Model = Quant.Quantize_Dynamic(
    モデル、{nn.linear}、dtype = torch.qint8
))

#量子化されたモデルを保存します
torch.save(quantized_model、 "quantized_simple_model.pth")

#ダミーデータを使用した量子化モデルの使用例
dummy_input = torch.randn(1、10)#例10の機能を備えた入力テンソルの例
output = quantized_model(dummy_input)
print( "Quantized Model output:"、output)
ログイン後にコピー

モデルをGGUF形式に変換する方法は?

元のモデルと量子化されたモデルのサイズを確認します

大規模な言語モデルを使用する場合、元のバージョンと量子化されたバージョンのサイズの違いを理解することが重要です。この比較は、モデル圧縮の利点を強調するだけでなく、効率的なリソースの使用に関する展開戦略も通知します。

 OSをインポートします

#保存されたモデルへのパス
original_model_path = "simple_model.pth"
Quantized_model_path = "Quantized_simple_model.pth"

#KBでファイルサイズを取得する機能
def get_file_size(path):
    size_bytes = os.path.getSize(path)
    size_kb = size_bytes / 1024#kbに変換します
    size_kbを返します

#元のモデルと量子化されたモデルのサイズを確認します
original_size = get_file_size(original_model_path)
Quantized_size = get_file_size(quantized_model_path)

印刷(f "オリジナルモデルサイズ:{original_size:.2f} kb")
印刷(f "Quantized Model Size:{Quantized_size:.2f} kb")
print(f "size reduction:{(original_size -quantized_size) / original_size) * 100:.2f}%")
ログイン後にコピー

モデルをGGUF形式に変換する方法は?

ただし、8ビットの精度でさえ、GPT-3やLlamaなどの非常に大きな言語モデルでは不十分であり、GGMLや最終的にはGGUFなどの新しい形式の開発に拍車をかけました。

GGUFとは何ですか?

GGUF、または一般的なGPT統合形式は、さらに大きなモデルをサポートするためにGGMLの拡張として開発されました。これは、GGMLおよびGGMLに基づいてGGMLおよびエグゼクティブを使用するためのモデルを保存するためのファイル形式です。 GGUFは、モデルの迅速な読み込みと保存、および読みやすさのために設計されたバイナリ形式です。モデルは伝統的にPytorchまたは別のフレームワークを使用して開発され、GGMLで使用するためにGGUFに変換されました。

GGUFは、GGML、GGMF、およびGGJTの後継者ファイル形式であり、モデルをロードするために必要なすべての情報を含めることで明確になるように設計されています。また、互換性を破ることなくモデルに新しい情報を追加できるように、拡張可能になるように設計されています。 3つの目標を念頭に置いて設計されました。

  • 効率:大規模なモデルがCPUおよび消費者グレードのハードウェアで効率的に実行できるようにします。
  • スケーラビリティ:多くの場合100GB以上、非常に大きなモデルをサポートします。
  • 柔軟性:開発者は、モデルのサイズと精度のバランスをとるさまざまな量子化レベルを選択できます。

なぜGGUFを使用するのですか?

GGUF形式は、パフォーマンスを犠牲にすることなく、限られたハードウェアに大規模なリソースが多いモデルを展開する必要がある開発者に輝いています。ここにいくつかのコアの利点があります:

  • 量子化サポート: GGUFは、さまざまな量子化レベル(4ビット、8ビット)をサポートし、モデルの精度を維持しながら大幅なメモリの節約を可能にします。
  • メタデータストレージ: GGUFは、モデルアーキテクチャ、トークン化スキーム、量子化レベルなどの詳細なメタデータを保存できます。このメタデータにより、モデルの読み込みと構成が容易になります。
  • 推論の最適化: GGUFはメモリの使用を最適化し、CPUベースのシステムのより速い推論を可能にします。

GGUF形式の構造と命名規則

GGUF形式は、特定の命名規則を採用して、一目で重要なモデル情報を提供します。このコンベンションは、ユーザーがアーキテクチャ、パラメーターサイズ、微調整タイプ、バージョン、エンコードタイプ、およびシャードデータなどの重要なモデル特性を特定するのに役立ちます。

GGUFネーミング条約は、この構造に従います。

モデルをGGUF形式に変換する方法は?

名前の各コンポーネントは、モデルの洞察を提供します。

  • Basename:メタデータ(例:llamaまたはmixtral)から派生したモデルベースタイプまたはアーキテクチャの記述名。
  • サイゼラベル: x形式を使用してモデルサイズを示します。つまり、:専門家の数(例:8)、 :モデルパラメータースケール、quadrillionのq、10兆のt、10億のb、100万のm、1000パラメーターのk。
  • Finetune: 「チャット」や「指示」などのモデル微調整目標。
  • バージョン: v 形式のモデルバージョン番号。
  • エンコーディング:プロジェクトごとにカスタマイズ可能な重量エンコーディングスキーム。
  • タイプ:アダプター用のLORAや語彙データ用のVocabなどのGGUFファイルタイプを示します。
  • シャード:パーツに分割されたモデルを示し、 -of- としてフォーマットされています。

命名例

モデルをGGUF形式に変換する方法は?

GGUF形式への変換用のセットアップ

コンバージョンに飛び込む前に、次の前提条件があることを確認してください。

  • Python 3.8はシステムにインストールされています。
  • モデルソースファイル:通常、PytorchまたはTensorflowモデル(Llama、Falconなど)または抱きしめのモデル。
  • GGUF変換ツール:これらのツールは、多くの場合、GGMLライブラリまたは特定のモデル構成スクリプトに基づいています。

いくつかの注目すべき量子化技術

量子化技術は、サイズと計算要件を削減することにより、ニューラルネットワークを最適化する上で極めて重要な役割を果たします。高精度の重みとアクティベーションをビット表現を低下させることにより、これらの方法により、パフォーマンスを大幅に損なうことなくモデルを効率的に展開できます。

モデルをGGUF形式に変換する方法は?

モデルをGGUFに変換します

以下は、モデルをGGUF形式に変換する方法です。

ステップ1:量子化するモデルを選択します

この場合、量子化するGoogleのFlan-T5モデルを選択しています。コマンドに従って、Huggingfaceからモデルを直接ダウンロードできます

!PIPインストールHuggingface-Hub

huggingface_hubからインポートsnapshot_downloadから

Model_#ダウンロードするモデルのIDに置き換えます
snapshot_download(repo_id = model_id、local_dir = "t5")
ログイン後にコピー

ステップ2:llama.cppリポジトリをクローンします

llama.cppを使用してモデルをgguf形式に量子化しています

!gitクローンhttps://github.com/ggerganov/llama.cpp
ログイン後にコピー

ステップ3:必要な依存関係をインストールします

Google Collaboratoryの場合は、以下のコードに従ってください。それ以外の場合は、要件ディレクトリに移動して「RepactionsConvert_HF_TO_GGUF.TXT」をインストールできます。

 !pip install -r /content/llama.cpp/requirements/requirements convert_hf_to_gguf.txt
ログイン後にコピー

ステップ4:量子化レベルを選択します

量子化レベルは、モデルサイズと精度の間のトレードオフを決定します。低ビットの量子化(4ビットなど)はメモリを保存しますが、精度を低下させる可能性があります。たとえば、CPUのみの展開をターゲットにしており、最大の精度を必要としない場合、INT4が良い選択かもしれません。ここでは、「Q8_0」を選択しています。

ステップ5:変換スクリプトを実行します

Google Collabで、以下のスクリプトを実行する場合は、コメントに従ってください。

 #!python {convert_hf_to_gguf.py}へのパス{hf_modelへのパス} -outfile {name_of_outputfile.gguf} -outtype {Quantization Type}

!python /content/llama.cpp/convert_hf_to_gguf.py/content/t5 -outfile t5.gguf -outtype q8_0
ログイン後にコピー
  • hf_modelへのパス:モデルディレクトリへのパス。
  • name_of_outputfile.gguf:GGUFモデルが保存される出力ファイルの名前。量子化モデルを抱きしめて顔に戻す場合は、GGUFネーミング条約を使用します。
  • 量子化タイプ:量子化タイプ(この場合、量子化された8ビット整数)を指定します。

オリジナルと量子化されたモデルのサイズを比較します

機械学習モデルを展開するとき、元のバージョンと量子化されたバージョンのサイズの違いを理解することが重要です。この比較は、量子化がモデルサイズを大幅に削減することができる方法を強調し、精度を大幅に失うことなく、効率の向上と推論時間が速くなります。

 #元のモデルと量子化されたモデルのサイズを確認します
original_model_path = "/content/t5/model.safetensors"
Quantized_model_path = "t5.gguf"
original_size = get_file_size(original_model_path)
Quantized_size = get_file_size(quantized_model_path)

印刷(f "オリジナルモデルサイズ:{original_size:.2f} kb")
印刷(f "Quantized Model Size:{Quantized_size:.2f} kb")
print(f "size reduction:{(original_size -quantized_size) / original_size) * 100:.2f}%")
ログイン後にコピー

モデルをGGUF形式に変換する方法は?

GGUF量子化技術を使用して、驚異的な73.39%のサイズが縮小することができました。

GGUF変換のベストプラクティス

最良の結果を得るには、これらのヒントを念頭に置いてください。

  • 量子化レベルを試してください。複数のレベル(4ビット、8ビットなど)をテストして、モデルの精度とメモリ効率の最適なバランスを見つけます。
  • メタデータを使用して、GGUFの広範なメタデータストレージにより、モデルの読み込みを簡素化し、ランタイム構成のニーズを削減できます。
  • ベンチマークの推論:ターゲットハードウェアのGGUFモデルを常にベンチマークして、速度と精度の要件を満たしていることを確認してください。

GGUFおよびモデルストレージ形式の将来

モデルが成長し続けるにつれて、GGUFのようなフォーマットは、大規模なAIをアクセスできるようにする上でますます重要な役割を果たします。メモリの要件をさらに削減しながら、さらに精度を維持するより高度な量子化技術がすぐに表示される場合があります。今のところ、GGUFは最前線にとどまり、CPUおよびEdgeデバイス上の大規模な言語モデルの効率的な展開を可能にします。

結論

GGUF形式は、限られたリソースデバイスに大規模な言語モデルを効率的に展開するためのゲームチェンジャーです。モデルの量子化の初期の努力からGGUFの開発まで、AIモデルストレージの景観は進化し、より多くの視聴者が強力なモデルにアクセスできるようにしました。このガイドに従うことにより、モデルをGGUF形式に変換できるようになり、実際のアプリケーション用にそれらを簡単に展開できます。

量子化は進化し続けますが、GGUFのさまざまな精密レベルと効率的なメタデータ管理をサポートする能力により、関連性のあるままになります。モデルをGGUFに変換して、直接メリットを調べてみてください!

キーテイクアウト

  • 一般的なGPTユニファイドフォーマット(GGUF)は、低リソースデバイス上の大規模な言語モデル(LLM)の効率的なストレージと展開を可能にし、モデルのサイズとメモリの要求に関連する課題に対処します。
  • 量子化は、パラメーターを圧縮することによりモデルサイズを大幅に削減し、必須のパフォーマンスレベルを維持しながら、消費者グレードのハードウェアでモデルを実行できるようにします。
  • GGUF形式は、主要なモデルの特性を特定し、管理と展開を促進するのに役立つ構造化された命名規則を備えています。
  • llama.cppなどのツールを使用して、ユーザーはモデルをGGUF形式に簡単に変換し、精度を犠牲にすることなく展開用に最適化できます。
  • GGUFは、高度な量子化レベルと広範なメタデータストレージをサポートしているため、ますます大規模なAIモデルを効率的に展開するための将来の見通しソリューションになります。

よくある質問

Q1。 GGUFとは何ですか?また、GGMLとどのように違いますか?

A. GGUF(Generic GPT Unified Format)は、量子化された大規模な言語モデルを効率的に保存および実行するように設計された高度なモデルストレージ形式です。前身であるGGMLは、100GBを超えるモデルのスケーラビリティが限られているGGMLとは異なり、GGUFは広範な4ビットおよび8ビットの量子化オプションをサポートし、豊富なメタデータストレージ機能を提供し、モデル管理と展開を強化します。

Q2。量子化はモデルのパフォーマンスにどのように影響しますか?

A.量子化により、モデルのパラメーターの精度が低下し、サイズとメモリの使用量が大幅に減少します。精度のわずかな低下につながる可能性がありますが、適切に設計された量子化技術(GGUFのような)は、許容可能なパフォーマンスレベルを維持することができ、リソースに制約のあるデバイスに大きなモデルを展開することが可能になります。

Q3。 GGUFネーミング条約の主なコンポーネントは何ですか?

A. GGUFネーミング条約は、ベースネーム(モデルアーキテクチャ)、サイゼラベル(パラメーター重量クラス)、Finetune(微調整目標)、バージョン(モデルバージョン番号)、エンコード(重量エンコーディングスキーム)、タイプ(ファイル目的)、SHARD(スプリットモデルの場合)を含むいくつかのコンポーネントで構成されています。一緒に、これらのコンポーネントはモデルに関する重要な情報を提供します。

Q4。 GGUFファイル名を検証するにはどうすればよいですか?

A.少なくともBasename、Sizelabel、およびバージョンの存在を正しい順序でチェックする正規表現を使用して、GGUFファイル名を検証できます。これにより、ファイルが命名規則に準拠し、モデル識別に必要な情報が含まれています。

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。

以上がモデルをGGUF形式に変換する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート