Sparsezoo est un référentiel de croissance constante de modèles sparsifiés (élagués et élagués) avec des recettes de sparsification correspondantes pour les réseaux de neurones. Il simplifie et accélère votre temps de valeur dans la construction de modèles d'apprentissage en profondeur performants avec une collection de modèles et de recettes optimisées par inférence à partir de. En savoir plus sur la sparsification.
Disponible via API et hébergé dans le nuage, le Sparrsezoo contient à la fois la ligne de base et les modèles spardifiés à différents degrés de performance d'inférence par rapport à la récupération de la perte de base. Les approches axées sur les recettes construites autour des algorithmes de sparsification vous permettent d'utiliser les modèles comme indiqué, de transfert d'apprentissage des modèles sur des ensembles de données privés ou de transférer les recettes vers vos architectures.
Le référentiel GitHub contient le code API Python pour gérer la connexion et l'authentification au cloud.
AI génératif
Ce référentiel est testé sur Python 3.8-3.11 et les systèmes Linux / Debian. Il est recommandé d'installer dans un environnement virtuel pour maintenir votre système en ordre.
Installer avec PIP en utilisant:
pip install sparsezooL'API Sparsezoo Python vous permet de rechercher et de télécharger des modèles sparsifiés. Des exemples de code sont donnés ci-dessous. Nous encourageons les utilisateurs à charger des modèles sparsezoo en copiant un talon directement à partir d'une page de modèle.
Le Model est un objet fondamental qui sert d'interface principale avec la bibliothèque SparSezoo. Il représente un modèle Sparsezoo, ainsi que tous ses répertoires et fichiers.
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 ) Sauf indication contraire, le modèle créé à partir du stub de sparsezoo est enregistré dans le répertoire local de cache Sparsezoo. Cela peut être remplacé en passant l'argument en option download_path au constructeur:
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 ) Une fois le modèle initialisé à partir d'un talon, il peut être téléchargé soit en appelant la méthode download() , soit en invoquant une propriété path . Les deux voies sont universelles pour tous les fichiers de Sparsezoo. Invoquer la propriété path déclenchera toujours le téléchargement du fichier à moins que le fichier ait déjà été téléchargé.
# method 1
model . download ()
# method 2
model_path = model . path Nous appelons la méthode available_files pour inspecter quels fichiers sont présents dans le modèle SparSezoo. Ensuite, nous sélectionnons un fichier en appelant l'attribut approprié:
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 )}Ensuite, nous pourrions examiner de plus près le contenu du modèle 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 En général, chaque fichier du modèle SparSezoo partage un ensemble d'attributs: name , path , URL et parent :
name sert d'identifiant du fichier / répertoirepath vers l'emplacement du fichier / répertoireURL spécifie l'adresse du serveur du fichier / répertoire en questionparent pointe vers l'emplacement du répertoire parent du fichier / répertoire en question Un répertoire est un type de fichier unique qui contient d'autres fichiers. Pour cette raison, il a un attribut files supplémentaires.
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 cf38074acf0Un modèle Sparsezoo peut contenir plusieurs points de contrôle. Le modèle peut contenir un point de contrôle qui avait été enregistré avant la quantification du modèle - ce point de contrôle serait utilisé pour l'apprentissage du transfert. Un autre point de contrôle peut avoir été enregistré après l'étape de quantification - que l'on est généralement directement utilisé pour l'inférence.
Les recettes peuvent également varier en fonction du cas d'utilisation. Nous voulons peut-être accéder à une recette qui a été utilisée pour sparsifier le modèle dense ( recipe_original ) ou celui qui nous permet de transférer un transfert clairsemé du modèle déjà sparsifié ( recipe_transfer ).
Il existe deux façons d'accéder à ces fichiers spécifiques.
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 En général, nous nous attendons à ce que les points de contrôle suivants soient inclus dans le modèle:
checkpoint_prepruningcheckpoint_postpruningcheckpoint_preqatcheckpoint_postqat Le point de contrôle que le modèle par défaut est l'état preqat (juste avant l'étape de quantification).
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 Vous pouvez également demander directement un type de recette / point de contrôle spécifique en ajoutant les arguments de requête URL appropriés au talon:
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 )L'utilisateur peut facilement demander un exemple de données de données qui représentent les entrées et sorties du modèle.
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) La fonction search_models permet à l'utilisateur de filtrer rapidement le contenu du référentiel Sparsezoo pour trouver les talons d'intérêt:
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 ) Les utilisateurs peuvent spécifier le répertoire où les modèles (temporairement pendant le téléchargement) et ses informations d'identification requises seront enregistrées dans votre machine de travail. SPARSEZOO_MODELS_PATH est le chemin où les modèles téléchargés seront enregistrés temporairement. Par défaut ~/.cache/sparsezoo/ SPARSEZOO_CREDENTIALS_PATH est le chemin où credentials.yaml seront enregistrées. Par défaut ~/.cache/sparsezoo/
En plus des API Python, un point de saisie de script de console est installé avec le package sparsezoo . Cela permet une interaction facile directement de votre console / terminal.
Télécharger l'aide de la commande
sparsezoo.download -h
Télécharger le modèle Resnet-50
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/base-none
Télécharger le modèle Resnet-50 élagué et quantifié
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned_quant-moderateAide à la commande de recherche
sparsezoo search -h
Recherche de tous les modèles de classification MobileNetv1 dans le domaine de la vision informatique
sparsezoo search --domain cv --sub-domain classification --architecture mobilenet_v1
Recherche de tous les modèles RESNET-50
sparsezoo search --domain cv --sub-domain classification
--architecture resnet_v1 --sub-architecture 50Pour une lecture plus approfondie, consultez la documentation Sparsezoo.
Les constructions officielles sont hébergées sur PYPI
De plus, plus d'informations peuvent être trouvées via les versions GitHub.
Le projet est sous licence en vertu de la version 2.0 de la licence Apache.
Nous apprécions les contributions au code, aux exemples, aux intégrations et à la documentation ainsi qu'aux rapports de bogues et aux demandes de fonctionnalités! Apprenez comment ici.
Pour l'aide des utilisateurs ou des questions sur Sparrsezoo, inscrivez-vous ou connectez-vous à notre relâchement de la communauté magique neurale . Nous cultivons le membre de la communauté par membre et heureux de vous y voir. Les bogues, les demandes de fonctionnalités ou les questions supplémentaires peuvent également être publiés dans notre file d'attente GitHub.
Vous pouvez obtenir les dernières nouvelles, webinaires et invitations d'événements, articles de recherche et autres friandises de performance ML en abonnement à la communauté magique neuronale.
Pour des questions plus générales sur la magie neurale, veuillez remplir ce formulaire.