SPARSEZOO es un repositorio de crecimiento constante de modelos dispersos (podados y con cantidad podados) con recetas de dispersión coincidentes para redes neuronales. Simplifica y acelera su tiempo de valor en la construcción de modelos de aprendizaje profundo de performance con una colección de modelos y recetas optimizadas por inferencia para prototipos. Lea más sobre la dispersión.
Disponible a través de API y alojado en la nube, el SparseZoo contiene tanto la línea de base como los modelos dispersos a diferentes grados de rendimiento de inferencia frente a la recuperación de pérdidas de línea de base. Los enfoques basados en recetas construidos alrededor de los algoritmos de dispersión le permiten usar los modelos como se dan, transferir la aprendizaje de los modelos a conjuntos de datos privados o transferir las recetas a sus arquitecturas.
El repositorio de GitHub contiene el código de la API de Python para manejar la conexión y la autenticación en la nube.
IA generativa
Este repositorio se prueba en Python 3.8-3.11 y Linux/Debian Systems. Se recomienda instalar en un entorno virtual para mantener su sistema en orden.
Instale con PIP usando:
pip install sparsezooLa API Sparsezoo Python le permite buscar y descargar modelos dispersos. Los ejemplos de código se dan a continuación. Alentamos a los usuarios a cargar modelos SPARSEZOO copiando un trozo directamente desde una página de modelo.
El Model es un objeto fundamental que sirve como una interfaz principal con la biblioteca Sparsezoo. Representa un modelo SPARSEZOO, junto con todos sus directorios y archivos.
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 ) A menos que se especifique lo contrario, el modelo creado a partir del sparsezoo Stub se guarda en el directorio local de caché Sparsezoo. Esto se puede anular pasando el argumento opcional download_path al constructor:
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 ) Una vez que el modelo se inicializa desde un trozo, se puede descargar llamando al método download() o invocando una propiedad path . Ambas vías son universales para todos los archivos en Sparsezoo. Invocar la propiedad path siempre activará la descarga del archivo a menos que el archivo ya se haya descargado.
# method 1
model . download ()
# method 2
model_path = model . path Llamamos al método available_files para inspeccionar qué archivos están presentes en el modelo SPARSEZOO. Luego, seleccionamos un archivo llamando al atributo apropiado:
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 )}Luego, podríamos echar un vistazo más de cerca al contenido del modelo 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 general, cada archivo en el modelo SPARSEZOO comparte un conjunto de atributos: name , path , URL y parent :
name sirve como un identificador del archivo/directoriopath a la ubicación del archivo/directorioURL especifica la dirección del servidor del archivo/directorio en cuestiónparent a la ubicación del directorio principal del archivo/directorio en cuestión Un directorio es un tipo único de archivo que contiene otros archivos. Por esa razón, tiene un atributo files adicional.
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 modelo SPARSEZOO puede contener varios puntos de control. El modelo puede contener un punto de control que se había guardado antes de que se cuantifica el modelo; ese punto de control se utilizaría para el aprendizaje de transferencia. Es posible que se haya guardado otro punto de control después del paso de cuantización, que generalmente se usa directamente para la inferencia.
Las recetas también pueden variar según el caso de uso. Es posible que deseemos acceder a una receta que se usó para escolarizar el modelo denso ( recipe_original ) o la que nos permite transferir de forma escasa del modelo ya escasificado ( recipe_transfer ).
Hay dos formas de acceder a esos archivos específicos.
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 general, esperamos que se incluyan los siguientes puntos de control en el modelo:
checkpoint_prepruningcheckpoint_postpruningcheckpoint_preqatcheckpoint_postqat El punto de control al que el modelo está predeterminado es el estado preqat (justo antes del paso de cuantificación).
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 También puede solicitar directamente un tipo de receta/punto de control específico agregando los argumentos de consulta de URL apropiados al Trasto:
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 )El usuario puede solicitar fácilmente un lote de datos de muestra que represente las entradas y salidas del modelo.
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 función search_models permite al usuario filtrar rápidamente el contenido del repositorio de Sparsezoo para encontrar los trozos de interés:
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 ) Los usuarios pueden especificar el directorio donde los modelos (temporalmente durante la descarga) y sus credenciales requeridas se guardarán en su máquina de trabajo. SPARSEZOO_MODELS_PATH es la ruta donde los modelos descargados se guardarán temporalmente. Predeterminado ~/.cache/sparsezoo/ SPARSEZOO_CREDENTIALS_PATH es la ruta donde se guardará credentials.yaml . Valor predeterminado ~/.cache/sparsezoo/
Además de las API de Python, se instala un punto de entrada de script de la consola con el paquete sparsezoo . Esto permite una interacción fácil directamente desde su consola/terminal.
Descargar ayuda del comando
sparsezoo.download -h
Descargar el modelo Resnet-50
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/base-none
Descargar modelo podado y cuantificado Resnet-50
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned_quant-moderateAyuda del comando de búsqueda
sparsezoo search -h
Buscando todos los modelos de clasificación MobileNetv1 en el dominio de visión por computadora
sparsezoo search --domain cv --sub-domain classification --architecture mobilenet_v1
Buscando todos los modelos RESNET-50
sparsezoo search --domain cv --sub-domain classification
--architecture resnet_v1 --sub-architecture 50Para una lectura más profunda, consulte la documentación de Sparsezoo.
Las construcciones oficiales están alojadas en Pypi
Además, se puede encontrar más información a través de las versiones de GitHub.
El proyecto tiene licencia bajo la Licencia Apache Versión 2.0.
¡Apreciamos las contribuciones al código, ejemplos, integraciones y documentación, así como informes de errores y solicitudes de funciones! Aprende cómo aquí.
Para ayuda del usuario o preguntas sobre SPARSEZOO, regístrese o inicie sesión en nuestra comunidad de la comunidad de magia neural . Estamos haciendo crecer el miembro de la comunidad por miembro y felices de verte allí. Los errores, las solicitudes de funciones o las preguntas adicionales también se pueden publicar en nuestra cola de problemas de GitHub.
Puede obtener las últimas noticias, seminarios web y de eventos, trabajos de investigación y otros cositas de rendimiento de ML suscribiéndose a la comunidad de magia neural.
Para preguntas más generales sobre la magia neuronal, complete este formulario.