O Sparsezoo é um repositório em constante crescimento de modelos Sparsificados (podados e podizados com poda) com receitas de escarsificação correspondentes para redes neurais. Ele simplifica e acelera seu tempo de valor na construção de modelos de aprendizado profundo com uma coleção de modelos e receitas otimizados para inferência para protótipo. Leia mais sobre escarsificação.
Disponível via API e hospedado na nuvem, o Sparsezoo contém a linha de base e os modelos escarsificados a diferentes graus de desempenho de inferência versus recuperação de perda de linha de base. As abordagens orientadas por receitas construídas em torno dos algoritmos de escarificação permitem que você use os modelos conforme fornecido, transfera-lear dos modelos para conjuntos de dados privados ou transfira as receitas para suas arquiteturas.
O repositório GitHub contém o código da API Python para lidar com a conexão e a autenticação à nuvem.
AI generativa
Este repositório é testado nos sistemas Python 3.8-3.11 e Linux/Debian. Recomenda -se instalar em um ambiente virtual para manter seu sistema em ordem.
Instale com PIP usando:
pip install sparsezooA API Sparsezoo Python permite pesquisar e baixar modelos Sparsificados. Exemplos de código são fornecidos abaixo. Incentivamos os usuários a carregar modelos Sparsezoo, copiando um stub diretamente de uma página de modelo.
O Model é um objeto fundamental que serve como uma interface principal com a biblioteca Sparsezoo. Representa um modelo Sparsezoo, juntamente com todos os seus diretórios e arquivos.
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 especificado de outra forma, o modelo criado a partir do stub Sparsezoo é salvo no diretório local do cache Sparsezoo. Isso pode ser substituído ao passar o argumento opcional download_path para o construtor:
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 ) Depois que o modelo é inicializado a partir de um stub, ele pode ser baixado chamando o método download() ou invocando uma propriedade path . Ambas as vias são universais para todos os arquivos no Sparsezoo. A invocação da propriedade path sempre acionará o download do arquivo, a menos que o arquivo já tenha sido baixado.
# method 1
model . download ()
# method 2
model_path = model . path Chamamos o método available_files para inspecionar quais arquivos estão presentes no modelo Sparsezoo. Em seguida, selecionamos um arquivo chamando o atributo apropriado:
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 )}Então, podemos dar uma olhada mais de perto no conteúdo do 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 Em geral, todos os arquivos do modelo Sparsezoo compartilha um conjunto de atributos: name , path , URL e parent :
name serve como um identificador do arquivo/diretóriopath aponta para a localização do arquivo/diretórioURL especifica o endereço do servidor do arquivo/diretório em questãoparent aponta para a localização do diretório pai do arquivo/diretório em questão Um diretório é um tipo exclusivo de arquivo que contém outros arquivos. Por esse motivo, ele possui um 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 cf38074acf0Um modelo Sparsezoo pode conter vários pontos de verificação. O modelo pode conter um ponto de verificação que havia sido salvo antes que o modelo fosse quantizado - esse ponto de verificação seria usado para o aprendizado de transferência. Outro ponto de verificação pode ter sido salvo após a etapa de quantização - que geralmente é usado diretamente para inferência.
As receitas também podem variar dependendo do caso de uso. Podemos querer acessar uma receita usada para esparsificar o modelo denso ( recipe_original ) ou a que nos permite transferir a transferência escassa aprender com o modelo já escarado ( recipe_transfer ).
Existem duas maneiras de acessar esses arquivos 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 Em geral, esperamos que os seguintes pontos de verificação sejam incluídos no modelo:
checkpoint_prepruningcheckpoint_postpruningcheckpoint_preqatcheckpoint_postqat O ponto de verificação que o modelo é o padrão é o estado preqat (pouco antes da etapa de quantização).
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 Você também pode solicitar diretamente um tipo de receita/ponto de verificação específico, anexando os argumentos de consulta URL apropriados ao stub:
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 )O usuário pode solicitar facilmente um lote de dados de amostra que represente as entradas e saídas do 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) A função search_models permite ao usuário filtrar rapidamente o conteúdo do repositório Sparsezoo para encontrar os stubs de interesse:
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 ) Os usuários podem especificar o diretório onde os modelos (temporariamente durante o download) e suas credenciais necessárias serão salvas em sua máquina de trabalho. SPARSEZOO_MODELS_PATH é o caminho em que os modelos baixados serão salvos temporariamente. Padrão ~/.cache/sparsezoo/ SPARSEZOO_CREDENTIALS_PATH é o caminho onde credentials.yaml serão salvas. ~/.cache/sparsezoo/
Além das APIs do Python, um ponto de entrada de script do console é instalado com o pacote sparsezoo . Isso permite uma interação fácil diretamente do seu console/terminal.
Baixar ajuda de comando
sparsezoo.download -h
Baixe o modelo Resnet-50
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/base-none
Baixe o modelo de Resnet-50 podado e quantizado
sparsezoo.download zoo:cv/classification/resnet_v1-50/pytorch/sparseml/imagenet/pruned_quant-moderateAjuda do comando de pesquisa
sparsezoo search -h
Procurando todos os modelos de classificação MobileNetv1 no domínio da visão computacional
sparsezoo search --domain cv --sub-domain classification --architecture mobilenet_v1
Procurando todos os modelos Resnet-50
sparsezoo search --domain cv --sub-domain classification
--architecture resnet_v1 --sub-architecture 50Para uma leitura mais aprofundada, consulte a documentação Sparsezoo.
Construções oficiais estão hospedadas no Pypi
Além disso, mais informações podem ser encontradas através de lançamentos do GitHub.
O projeto está licenciado no Apache License versão 2.0.
Agradecemos contribuições para o código, exemplos, integrações e documentação, bem como relatórios de bugs e solicitações de recursos! Saiba como aqui.
Para obter ajuda ou perguntas sobre usuários sobre Sparsezoo, inscreva -se ou faça login em nossa folga da comunidade mágica neural . Estamos cultivando o membro da comunidade por membro e felizes em vê -lo lá. Bugs, solicitações de recursos ou perguntas adicionais também podem ser publicadas em nossa fila de problemas do GitHub.
Você pode receber as últimas notícias, webinar e convites de eventos, trabalhos de pesquisa e outros boatos de desempenho de ML, assinando a comunidade mágica neural.
Para perguntas mais gerais sobre magia neural, preencha este formulário.