Sparsezooは、ニューラルネットワークの一致するスパース化レシピを備えた、スパース化された(剪定および剪定された積極化された)モデルの絶えず成長しているリポジトリです。プロトタイプからプロトタイプへの推論が最適化されたモデルとレシピのコレクションを使用して、パフォーマンスの深い学習モデルを構築する際の時間の時間を簡素化および加速します。 Sparsificationの詳細を読んでください。
APIを介して利用可能でクラウドでホストされているSparsezooには、ベースラインとモデルの両方が、異なる程度の推論パフォーマンスとベースライン損失回復にまで及びました。 Sparsification Algorithmsを中心に構築されたレシピ駆動型アプローチを使用すると、与えられたモデルを使用したり、モデルからプライベートデータセットに転送したり、レシピをアーキテクチャに転送したりすることができます。
GitHubリポジトリには、クラウドへの接続と認証を処理するPython APIコードが含まれています。
生成AI
このリポジトリは、Python 3.8-3.11およびLinux/Debianシステムでテストされています。システムを順番に保つために、仮想環境にインストールすることをお勧めします。
PIPを使用してインストールしてください。
pip install sparsezooSparsezoo Python APIを使用すると、Sparsified Modelsを検索およびダウンロードできます。コードの例を以下に示します。モデルページからスタブを直接コピーすることにより、ユーザーがSparsezooモデルをロードすることをお勧めします。
このModel 、Sparsezooライブラリを使用したメインインターフェイスとして機能する基本的なオブジェクトです。すべてのディレクトリとファイルとともに、Sparsezooモデルを表します。
from sparsezoo import Model
stub = "zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned95_quant-none"
model = Model ( stub )
print ( str ( model ))
>> Model ( stub = zoo : cv / classification / resnet_v1 - 50 / pytorch / sparseml / imagenet / pruned95_quant - none ) from sparsezoo import Model
directory = ".../.cache/sparsezoo/eb977dae-2454-471b-9870-4cf38074acf0"
model = Model ( directory )
print ( str ( model ))
>> Model ( directory = ... / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 )特に指定されていない限り、Sparsezooスタブから作成されたモデルは、ローカルSparsezooキャッシュディレクトリに保存されます。これは、オプションのdownload_path引数をコンストラクターに渡すことでオーバーライドできます。
from sparsezoo import Model
stub = "zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned95_quant-none"
download_directory = "./model_download_directory"
model = Model ( stub , download_path = download_directory )モデルがスタブから初期化されると、 download()メソッドを呼び出すか、 pathプロパティを呼び出すことにより、ダウンロードできます。両方の経路は、Sparsezooのすべてのファイルに対して普遍的です。 pathプロパティを呼び出すと、ファイルが既にダウンロードされていない限り、常にファイルのダウンロードがトリガーされます。
# method 1
model . download ()
# method 2
model_path = model . path sparsezooモデルに存在するファイルを検査するために、 available_filesメソッドを呼び出します。次に、適切な属性を呼び出してファイルを選択します。
model . available_files
>> { 'training' : Directory ( name = training ),
>> 'deployment' : Directory ( name = deployment ),
>> 'sample_inputs' : Directory ( name = sample_inputs . tar . gz ),
>> 'sample_outputs' : { 'framework' : Directory ( name = sample_outputs . tar . gz )},
>> 'sample_labels' : Directory ( name = sample_labels . tar . gz ),
>> 'model_card' : File ( name = model . md ),
>> 'recipes' : Directory ( name = recipe ),
>> 'onnx_model' : File ( name = model . onnx )}次に、Sparsezooモデルの内容を詳しく見ることができます。
model_card = model . model_card
print ( model_card )
>> File ( name = model . md ) model_card_path = model . model_card . path
print ( model_card_path )
>> ... / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 / model . md一般に、Sparsezooモデルのすべてのファイルは、一連の属性を共有しています。 name 、 path 、 URL 、およびparent :
name 、ファイル/ディレクトリの識別子として機能しますpathはファイル/ディレクトリの場所を指しますURL問題のファイル/ディレクトリのサーバーアドレスを指定しますparent 、問題のファイル/ディレクトリの親ディレクトリの場所を指しますディレクトリは、他のファイルを含む一意のタイプのファイルです。そのため、追加のfiles属性があります。
print ( model . onnx_model )
>> File ( name = model . onnx )
print ( f"File name: { model . onnx_model . name } n "
f"File path: { model . onnx_model . path } n "
f"File URL: { model . onnx_model . url } n "
f"Parent directory: { model . onnx_model . parent_directory } " )
>> File name : model . onnx
>> File path : ... / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 / model . onnx
>> File URL : https : // models . neuralmagic . com / cv - classification / ...
>> Parent directory : ... / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 print ( model . recipes )
>> Directory ( name = recipe )
print ( f"File name: { model . recipes . name } n "
f"Contains: { [ file . name for file in model . recipes . files ] } n "
f"File path: { model . recipes . path } n "
f"File URL: { model . recipes . url } n "
f"Parent directory: { model . recipes . parent_directory } " )
>> File name : recipe
>> Contains : [ 'recipe_original.md' , 'recipe_transfer-classification.md' ]
>> File path : / home / user / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 / recipe
>> File URL : None
>> Parent directory : / home / user / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0Sparsezooモデルにはいくつかのチェックポイントが含まれている場合があります。モデルには、モデルが量子化される前に保存されていたチェックポイントが含まれている場合があります。そのチェックポイントは、転送学習に使用されます。別のチェックポイントは、量子化ステップの後に保存された可能性があります - それは通常、推論に直接使用されます。
レシピは、ユースケースによって異なる場合があります。密なモデル( recipe_original )をスパースするために使用されたレシピまたは、すでにスパースされたモデル( recipe_transfer )からのスパース転送学習を可能にするレシピにアクセスすることをお勧めします。
これらの特定のファイルにアクセスするには、2つの方法があります。
available_recipes = model . recipes . available
print ( available_recipes )
>> [ 'original' , 'transfer-classification' ]
transfer_recipe = model . recipes [ "transfer-classification" ]
print ( transfer_recipe )
>> File ( name = recipe_transfer - classification . md )
original_recipe = model . recipes . default # recipe defaults to `original`
original_recipe_path = original_recipe . path # downloads the recipe and returns its path
print ( original_recipe_path )
>> ... / . cache / sparsezoo / eb977dae - 2454 - 471 b - 9870 - 4 cf38074acf0 / recipe / recipe_original . md 一般に、次のチェックポイントがモデルに含まれることを期待しています。
checkpoint_prepruningcheckpoint_postpruningcheckpoint_preqatcheckpoint_postqatモデルがデフォルトであるチェックポイントは、 preqat状態です(量子化ステップの直前)。
from sparsezoo import Model
stub = "zoo:nlp/question_answering/bert-base/pytorch/huggingface/squad/pruned_quant_3layers-aggressive_84"
model = Model ( stub )
available_checkpoints = model . training . available
print ( available_checkpoints )
>> [ 'preqat' ]
preqat_checkpoint = model . training . default # recipe defaults to `preqat`
preqat_checkpoint_path = preqat_checkpoint . path # downloads the checkpoint and returns its path
print ( preqat_checkpoint_path )
>> ... / . cache / sparsezoo / 0857 c6f2 - 13 c1 - 43 c9 - 8 db8 - 8 f89a548dccd / training
[ print ( file . name ) for file in preqat_checkpoint . files ]
>> vocab . txt
>> special_tokens_map . json
>> pytorch_model . bin
>> config . json
>> training_args . bin
>> tokenizer_config . json
>> trainer_state . json
>> tokenizer . json また、適切なURLクエリ引数をスタブに追加することにより、特定のレシピ/チェックポイントタイプを直接リクエストすることもできます。
from sparsezoo import Model
stub = "zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned95_quant-none?recipe=transfer"
model = Model ( stub )
# Inspect which files are present.
# Note that the available recipes are restricted
# according to the specified URL query arguments
print ( model . recipes . available )
>> [ 'transfer-classification' ]
transfer_recipe = model . recipes . default # Now the recipes default to the one selected by the stub string arguments
print ( transfer_recipe )
>> File ( name = recipe_transfer - classification . md )ユーザーは、モデルの入力と出力を表すデータのサンプルバッチを簡単に要求できます。
sample_data = model . sample_batch ( batch_size = 10 )
print ( sample_data [ 'sample_inputs' ][ 0 ]. shape )
>> ( 10 , 3 , 224 , 224 ) # (batch_size, num_channels, image_dim, image_dim)
print ( sample_data [ 'sample_outputs' ][ 0 ]. shape )
>> ( 10 , 1000 ) # (batch_size, num_classes)function search_models使用すると、ユーザーはSparsezooリポジトリの内容をすばやくフィルタリングして、関心のあるスタブを見つけます。
from sparsezoo import search_models
args = {
"domain" : "cv" ,
"sub_domain" : "segmentation" ,
"architecture" : "yolact" ,
}
models = search_models ( ** args )
[ print ( model ) for model in models ]
>> Model ( stub = zoo : cv / segmentation / yolact - darknet53 / pytorch / dbolya / coco / pruned82_quant - none )
>> Model ( stub = zoo : cv / segmentation / yolact - darknet53 / pytorch / dbolya / coco / pruned90 - none )
>> Model ( stub = zoo : cv / segmentation / yolact - darknet53 / pytorch / dbolya / coco / base - none )ユーザーは、モデル(ダウンロード中に一時的に)とその必要な資格情報が作業マシンに保存されるディレクトリを指定できます。 SPARSEZOO_MODELS_PATHは、ダウンロードされたモデルが一時的に保存されるパスです。デフォルト~/.cache/sparsezoo/ SPARSEZOO_CREDENTIALS_PATHは、 credentials.yamlを保存するパスです。デフォルト~/.cache/sparsezoo/
Python APIに加えて、パッケージsparsezooでコンソールスクリプトエントリポイントがインストールされています。これにより、コンソール/端末から簡単に対話することができます。
コマンドヘルプをダウンロードしてください
sparsezoo.download -h
ResNet-50モデルをダウンロードします
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/base-none
剪定および量子化されたResNet-50モデルをダウンロードします
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned_quant-moderateコマンドヘルプを検索します
sparsezoo search -h
コンピュータービジョンドメインですべての分類MobileNETV1モデルを検索する
sparsezoo search --domain cv --sub-domain classification --architecture mobilenet_v1
すべてのRESNET-50モデルの検索
sparsezoo search --domain cv --sub-domain classification
--architecture resnet_v1 --sub-architecture 50詳細な読み取りについては、Sparsezooのドキュメントをご覧ください。
公式ビルドはPypiでホストされています
さらに、GitHubリリースを介して詳細を確認できます。
このプロジェクトは、Apacheライセンスバージョン2.0に基づいてライセンスされています。
コード、例、統合、ドキュメントへの貢献、バグレポートと機能リクエストに感謝します!ここでどのように学びましょう。
Sparsezooに関するユーザーのヘルプや質問については、サインアップまたはニューラルマジックコミュニティSlackにログインしてください。私たちはメンバーによってコミュニティメンバーを成長させており、そこでお会いできてうれしいです。バグ、機能リクエスト、または追加の質問は、GitHub発行キューにも投稿できます。
Neural Magic Communityを購読することにより、最新のニュース、ウェビナー、イベントの招待状、研究論文、その他のMLパフォーマンスの情報を入手できます。
ニューラルマジックに関するより一般的な質問については、このフォームに記入してください。