Sparsezoo-это постоянно растущий хранилище редактифицированных (обрезка и обрезка) моделей с соответствующими рецептами спарсификации для нейронных сетей. Он упрощает и ускоряет ваше время для создания моделей глубокого обучения в области эффективности с набором выводов, оптимизированных моделей и рецептов для прототипа. Узнайте больше о спорсификации.
Sparsezoo, доступный через API и размещенный в облаке, содержит как базовые, так и модели, редактированные в разных степени производительности вывода по сравнению с базовыми потерями потерь. Подходы, управляемые рецептами, построенные вокруг алгоритмов спарсификации, позволяют вам использовать приведенные модели, переносные из моделей на частные наборы данных или передавать рецепты в ваши архитектуры.
Репозиторий GitHub содержит код API Python для обработки соединения и аутентификации с облаком.
Генеративный ИИ
Этот репозиторий проверяется на Python 3.8-3.11 и Linux/Debian Systems. Рекомендуется установить в виртуальной среде, чтобы ваша система в порядке.
Установите с помощью PIP, используя:
pip install sparsezooAPI Sparsezoo Python позволяет вам искать и загружать 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 Мы называем метод available_files , чтобы проверить, какие файлы присутствуют в модели Sparsezoo. Затем мы выбираем файл, вызывая соответствующий атрибут:
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 cf38074acf0Модель Sparsezoo может содержать несколько контрольных точек. Модель может содержать контрольную точку, которая была сохранена до квантовой модели - эта контрольная точка будет использоваться для обучения передачи. Другая контрольная точка могла быть сохранена после шага квантования - что один обычно используется непосредственно для вывода.
Рецепты также могут варьироваться в зависимости от валята использования. Мы можем захотеть получить доступ к рецепту, который использовался для редактирования плотной модели ( recipe_original ), или тот, который позволяет нам разыграть передачу учиться у уже разреженной модели ( recipe_transfer ).
Есть два способа получить доступ к этим конкретным файлам.
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) Функция 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/
В дополнение к API Python, с пакетом 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.
Вы можете получить последние новости, приглашения на вебинар и мероприятия, исследовательские работы и другие лакомые кусочки ML Performance, подписываясь на сообщество нейронной магии.
Для более общих вопросов о нейронной магии, пожалуйста, заполните эту форму.