大規模な言語モデル(LLM)はスケールで成長し続けるため、低リソースデバイスでそれらを保存、展開、および実行するための効率的な方法が必要になります。これらのモデルは強力な機能を提供しますが、そのサイズとメモリの要求は、特に消費者ハードウェアで展開を課題にすることができます。これは、GGUF(Generic GPT Unified Format)などのモデルの量子化と特殊なストレージ形式が登場する場所です。
このガイドでは、GGUF形式を掘り下げ、その利点を調査し、モデルをGGUFに変換する段階的なチュートリアルを提供します。途中で、モデルの量子化の歴史と、最新のLLMをサポートするためにGGUFがどのように進化したかについて触れます。最後に、GGUFが重要な理由と、独自のモデルに使用する方法を深く理解できます。
この記事は、データサイエンスブログソンの一部として公開されました。
GGUFへの旅は、モデル量子化の進化を理解することから始まります。量子化により、モデルパラメーターの精度が低下し、それらを効果的に圧縮してメモリと計算の需要を減らします。これが簡単な概要です:
初期の時代には、深い学習モデルは、TensorflowやPytorchなどのフレームワークのネイティブ形式に保存されていました。 Tensorflowモデルは.pbファイルを使用しましたが、Pytorchは.ptまたは.pthを使用しました。これらの形式は、より小さなモデルで機能しましたが、制限を提示しました。
フレームワーク全体の相互運用性の上昇により、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)
大規模な言語モデルを使用する場合、元のバージョンと量子化されたバージョンのサイズの違いを理解することが重要です。この比較は、モデル圧縮の利点を強調するだけでなく、効率的なリソースの使用に関する展開戦略も通知します。
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}%")
ただし、8ビットの精度でさえ、GPT-3やLlamaなどの非常に大きな言語モデルでは不十分であり、GGMLや最終的にはGGUFなどの新しい形式の開発に拍車をかけました。
GGUF、または一般的なGPT統合形式は、さらに大きなモデルをサポートするためにGGMLの拡張として開発されました。これは、GGMLおよびGGMLに基づいてGGMLおよびエグゼクティブを使用するためのモデルを保存するためのファイル形式です。 GGUFは、モデルの迅速な読み込みと保存、および読みやすさのために設計されたバイナリ形式です。モデルは伝統的にPytorchまたは別のフレームワークを使用して開発され、GGMLで使用するためにGGUFに変換されました。
GGUFは、GGML、GGMF、およびGGJTの後継者ファイル形式であり、モデルをロードするために必要なすべての情報を含めることで明確になるように設計されています。また、互換性を破ることなくモデルに新しい情報を追加できるように、拡張可能になるように設計されています。 3つの目標を念頭に置いて設計されました。
GGUF形式は、パフォーマンスを犠牲にすることなく、限られたハードウェアに大規模なリソースが多いモデルを展開する必要がある開発者に輝いています。ここにいくつかのコアの利点があります:
GGUF形式は、特定の命名規則を採用して、一目で重要なモデル情報を提供します。このコンベンションは、ユーザーがアーキテクチャ、パラメーターサイズ、微調整タイプ、バージョン、エンコードタイプ、およびシャードデータなどの重要なモデル特性を特定するのに役立ちます。
GGUFネーミング条約は、この構造に従います。
名前の各コンポーネントは、モデルの洞察を提供します。
命名例
コンバージョンに飛び込む前に、次の前提条件があることを確認してください。
量子化技術は、サイズと計算要件を削減することにより、ニューラルネットワークを最適化する上で極めて重要な役割を果たします。高精度の重みとアクティベーションをビット表現を低下させることにより、これらの方法により、パフォーマンスを大幅に損なうことなくモデルを効率的に展開できます。
以下は、モデルをGGUF形式に変換する方法です。
この場合、量子化するGoogleのFlan-T5モデルを選択しています。コマンドに従って、Huggingfaceからモデルを直接ダウンロードできます
!PIPインストールHuggingface-Hub huggingface_hubからインポートsnapshot_downloadから Model_#ダウンロードするモデルのIDに置き換えます snapshot_download(repo_id = model_id、local_dir = "t5")
llama.cppを使用してモデルをgguf形式に量子化しています
!gitクローンhttps://github.com/ggerganov/llama.cpp
Google Collaboratoryの場合は、以下のコードに従ってください。それ以外の場合は、要件ディレクトリに移動して「RepactionsConvert_HF_TO_GGUF.TXT」をインストールできます。
!pip install -r /content/llama.cpp/requirements/requirements convert_hf_to_gguf.txt
量子化レベルは、モデルサイズと精度の間のトレードオフを決定します。低ビットの量子化(4ビットなど)はメモリを保存しますが、精度を低下させる可能性があります。たとえば、CPUのみの展開をターゲットにしており、最大の精度を必要としない場合、INT4が良い選択かもしれません。ここでは、「Q8_0」を選択しています。
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
機械学習モデルを展開するとき、元のバージョンと量子化されたバージョンのサイズの違いを理解することが重要です。この比較は、量子化がモデルサイズを大幅に削減することができる方法を強調し、精度を大幅に失うことなく、効率の向上と推論時間が速くなります。
#元のモデルと量子化されたモデルのサイズを確認します 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量子化技術を使用して、驚異的な73.39%のサイズが縮小することができました。
最良の結果を得るには、これらのヒントを念頭に置いてください。
モデルが成長し続けるにつれて、GGUFのようなフォーマットは、大規模なAIをアクセスできるようにする上でますます重要な役割を果たします。メモリの要件をさらに削減しながら、さらに精度を維持するより高度な量子化技術がすぐに表示される場合があります。今のところ、GGUFは最前線にとどまり、CPUおよびEdgeデバイス上の大規模な言語モデルの効率的な展開を可能にします。
GGUF形式は、限られたリソースデバイスに大規模な言語モデルを効率的に展開するためのゲームチェンジャーです。モデルの量子化の初期の努力からGGUFの開発まで、AIモデルストレージの景観は進化し、より多くの視聴者が強力なモデルにアクセスできるようにしました。このガイドに従うことにより、モデルをGGUF形式に変換できるようになり、実際のアプリケーション用にそれらを簡単に展開できます。
量子化は進化し続けますが、GGUFのさまざまな精密レベルと効率的なメタデータ管理をサポートする能力により、関連性のあるままになります。モデルをGGUFに変換して、直接メリットを調べてみてください!
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 サイトの他の関連記事を参照してください。