Sparsezoo ist ein ständig wachsendes Repository aus sparsifizierten (geschnittenen und geschnittenen) Modellen mit passenden Sparsifikationsrezepten für neuronale Netze. Es vereinfacht und beschleunigt Ihre Zeit-zu-Wert-Aufbau von Performant-Deep-Learning-Modellen mit einer Sammlung von inferenzoptimierten Modellen und Rezepten, von denen sie prototypen. Lesen Sie mehr über die Sparsifikation.
Das Sparsezoo ist über API erhältlich und in der Cloud gehostet. Sie enthält sowohl Baseline- als auch Modelle, die in unterschiedlichem Grade der Inferenzleistung im Vergleich zu Basislinienverlustwiederherstellung sparselten. Rezeptorientierte Ansätze, die um Sparsifizierungsalgorithmen basieren, ermöglichen es Ihnen, die Modelle wie angegeben zu verwenden, aus den Modellen auf private Datensätze zu übertragen oder die Rezepte auf Ihre Architekturen zu übertragen.
Das Github -Repository enthält den Python -API -Code, um die Verbindung und Authentifizierung zur Cloud zu verarbeiten.
Generative Ai
Dieses Repository wird auf Python 3.8-3.11 und Linux/Debian-Systemen getestet. Es wird empfohlen, in einer virtuellen Umgebung zu installieren, um Ihr System in Ordnung zu halten.
Installieren Sie mit PIP mit:
pip install sparsezooMit der Sparsezoo Python API können Sie sparsifizierte Modelle durchsuchen und herunterladen. Code -Beispiele finden Sie unten. Wir ermutigen Benutzer, Sparsezoo -Modelle zu laden, indem wir einen Stub direkt von einer Modellseite kopieren.
Das Model ist ein grundlegendes Objekt, das als Hauptschnittstelle zur Sparsezoo -Bibliothek dient. Es repräsentiert ein Sparsezoo -Modell zusammen mit all seinen Verzeichnissen und Dateien.
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 ) Sofern nicht anders angegeben, wird das aus dem Sparsezoo Stub erstellte Modell im lokalen Sparsezoo -Cache -Verzeichnis gespeichert. Dies kann durch Übergabe des optionalen Arguments download_path an den Konstruktor überschrieben werden:
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 ) Sobald das Modell aus einem Stub initialisiert wurde, kann es entweder durch die Aufruf der download() -Methode oder durch Aufrufen einer path heruntergeladen werden. Beide Wege sind für alle Dateien in Sparsezoo universell. Wenn Sie die path aufrufen, wird immer die Datei heruntergeladen, es sei denn, die Datei wurde bereits heruntergeladen.
# method 1
model . download ()
# method 2
model_path = model . path Wir rufen die Methode für available_files auf, um zu überprüfen, welche Dateien im Sparsezoo -Modell vorhanden sind. Anschließend wählen wir eine Datei aus, indem wir das entsprechende Attribut aufrufen:
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 )}Dann könnten wir uns den Inhalt des Sparsezoo -Modells genauer ansehen:
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 Im Allgemeinen teilt jede Datei im Sparsezoo -Modell eine Reihe von Attributen auf: name , path , URL und parent :
name dient als Kennung der Datei/des Verzeichnissespath zeigt auf den Speicherort der Datei/des VerzeichnissesURL gibt die Serveradresse des fraglichen Datei/des fraglichen Verzeichnisses anparent verweist auf den Ort des übergeordneten Verzeichnisses des fraglichen Datei/des fraglichen Verzeichnisses Ein Verzeichnis ist eine eindeutige Dateiart, die andere Dateien enthält. Aus diesem Grund hat es ein zusätzliches 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 cf38074acf0Ein Sparsezoo -Modell kann mehrere Checkpoints enthalten. Das Modell kann einen Kontrollpunkt enthalten, der vor der Quantisierung des Modells gespeichert wurde - dieser Kontrollpunkt würde zum Übertragungslernen verwendet. Ein weiterer Kontrollpunkt wurde möglicherweise nach dem Quantisierungsschritt gespeichert - dass man normalerweise direkt für die Inferenz verwendet wird.
Die Rezepte können auch je nach Anwendungsfall variieren. Möglicherweise möchten wir auf ein Rezept zugreifen, mit dem das dichte Modell ( recipe_original ) oder auf das, mit dem wir übertragen werden können, aus dem bereits sparsigen Modell ( recipe_transfer ) zu sparsen.
Es gibt zwei Möglichkeiten, auf diese spezifischen Dateien zuzugreifen.
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 Im Allgemeinen erwarten wir, dass die folgenden Kontrollpunkte in das Modell aufgenommen werden:
checkpoint_prepruningcheckpoint_postpruningcheckpoint_preqatcheckpoint_postqat Der Kontrollpunkt, an den das Modell standardmäßig ist, ist der preqat -Status (kurz vor dem Quantisierungsschritt).
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 Sie können auch einen bestimmten Rezept-/Checkpoint -Typ direkt anfordern, indem Sie die entsprechenden URL -Abfrageargumente an den Stub anhängen:
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 )Der Benutzer kann problemlos eine Beispiel -Datenstapel anfordern, die die Eingaben und Ausgaben des Modells darstellt.
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) Mit der search_models kann der Benutzer den Inhalt des Sparsezoo -Repositorys schnell filtern, um die interessierenden Stubs zu finden:
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 ) Benutzer können das Verzeichnis angeben, in dem Modelle (vorübergehend während des Downloads) und seine erforderlichen Anmeldeinformationen in Ihrem Arbeitsgerät gespeichert werden. SPARSEZOO_MODELS_PATH ist der Pfad, in dem die heruntergeladenen Modelle vorübergehend gespeichert werden. Standard ~/.cache/sparsezoo/ SPARSEZOO_CREDENTIALS_PATH ist der Pfad, auf dem credentials.yaml gespeichert werden. Standard ~/.cache/sparsezoo/
Zusätzlich zu den Python -APIs wird ein Einstiegspunkt der Konsolenskript mit dem sparsezoo installiert. Dies ermöglicht eine einfache Interaktion direkt von Ihrer Konsole/dem Terminal.
Download -Befehlshilfe
sparsezoo.download -h
Laden Sie das Resnet-50-Modell herunter
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/base-none
Laden Sie das beschnittene und quantisierte Resnet-50-Modell herunter
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned_quant-moderateSuchbefehlshilfe
sparsezoo search -h
Suche nach allen Klassifizierungsmobilenetv1 -Modellen in der Computer Vision Domain
sparsezoo search --domain cv --sub-domain classification --architecture mobilenet_v1
Suche nach allen Resnet-50-Modellen
sparsezoo search --domain cv --sub-domain classification
--architecture resnet_v1 --sub-architecture 50Eine ausführlichere Lektüre finden Sie in der Sparsezoo-Dokumentation.
Offizielle Builds werden auf PYPI veranstaltet
Zusätzlich finden Sie weitere Informationen über Github -Releases.
Das Projekt ist unter der Apache -Lizenzversion 2.0 lizenziert.
Wir schätzen Beiträge zu Code, Beispielen, Integrationen und Dokumentation sowie Fehlerberichten und Feature -Anfragen! Erfahren Sie, wie hier.
Für Benutzer Hilfe oder Fragen zu Sparsezoo melden Sie sich an, oder melden Sie sich bei unserer neuronalen Magic Community Slack an. Wir wachsen das Community -Mitglied von Mitglied und freuen uns, Sie dort zu sehen. Fehler, Feature -Anfragen oder zusätzliche Fragen können auch in unserer GitHub -Ausgabewarteschlange veröffentlicht werden.
Sie können die neuesten Nachrichten, Webinar- und Event -Einladungen, Forschungsarbeiten und andere ML -Performance -Tidbits erhalten, indem Sie sich die neuronale Magie -Community abonnieren.
Allgemeinere Fragen zu neuronaler Magie füllen Sie dieses Formular aus.