Отсутствует ошибка -symbol.json при попытке скомпилировать модель семантической сегментации SageMaker (встроенный алгоритм) с помощью SageMaker Neo

Я обучил модель семантической сегментации SageMaker, используя встроенный алгоритм семантической сегментации sagemaker. Это нормально развертывается на конечной точке SageMaker, и я могу успешно выполнить вывод в облаке из нее. Я хотел бы использовать модель на периферийном устройстве (AWS Panorama Appliance), что должно означать просто компиляцию модели с помощью SageMaker Neo в соответствии со спецификациями целевого устройства.

Однако, независимо от того, какое у меня целевое устройство (настройки Neo), я не могу скомпилировать модель с Neo, поскольку получаю следующую ошибку:

ClientError: InputConfiguration: No valid Mxnet model file -symbol.json found

Файл model.tar.gz для моделей семантической сегментации содержит hyperparams.json, model_algo-1, model_best.params. Согласно документам, model_algo-1 — это сериализованная модель mxnet. Разве Neo не поддерживает глюонные модели?

Между прочим, я столкнулся с точно такой же проблемой с другим встроенным алгоритмом SageMaker, k-Nearest Neighbor (k-NN). Кажется, он тоже скомпилирован без -symbol.json.

Есть ли какие-нибудь сценарии, которые я могу запустить, чтобы воссоздать файл -symbol.json или преобразовать скомпилированную модель sagemaker?

После построения моей модели с помощью Estimator я скомпилировал ее в SageMaker Neo с кодом:

optimized_ic = my_estimator.compile_model(
 target_instance_family = "ml_c5",
 target_platform_os = "LINUX",
 target_platform_arch = "ARM64",
 input_shape = {"data": [1,3,512,512]},  
 output_path=s3_optimized_output_location,
 framework = "mxnet",
 framework_version = "1.8", 
)

Я бы ожидал, что это скомпилируется нормально, но именно здесь я получаю сообщение об ошибке, говорящее о том, что в модели отсутствует файл *-symbol.json.

Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По какой-то причине AWS решила не делать свои встроенные алгоритмы напрямую совместимыми с Neo... Однако вы можете перепроектировать сетевые параметры, используя выходной файл model.tar.gz, а затем скомпилировать.

Шаг 1: Извлеките модель из tar-файла

import tarfile
#path to local tar file
model = 'ss_model.tar.gz'

#extract tar file 
t = tarfile.open(model, 'r:gz')
t.extractall()

Это должно вывести два файла: model_algo-1, model_best.params

  1. Загрузите веса в сеть из зоопарка глюонных моделей для выбранной вами архитектуры.

В этом случае я использовал DeepLabv3 с resnet50.

import gluoncv
import mxnet as mx
from gluoncv import model_zoo
from gluoncv.data.transforms.presets.segmentation import test_transform

model = model_zoo.DeepLabV3(nclass=2, backbone='resnet50', pretrained_base=False, height=800, width=1280, crop_size=240)
model.load_parameters("model_algo-1")
  1. Убедитесь, что параметры загружены правильно, сделав прогноз с новой моделью.

Используйте изображение, которое использовалось для обучения.

#use cpu
ctx = mx.cpu(0)
#decode image bytes of loaded file
img = image.imdecode(imbytes)

#transform image
img = test_transform(img, ctx)
img = img.astype('float32')
print('tranformed image shape: ', img.shape)

#get prediction
output = model.predict(img)
  1. Гибридизация модели в выходные данные, требуемые Sagemaker Neo

Дополнительная проверка на совместимость формы изображения

model.hybridize()
model(mx.nd.ones((1,3,800,1280)))
export_block('deeplabv3-res50', model, data_shape=(3,800,1280), preprocess=None, layout='CHW')
  1. Перекомпилировать модель в формат tar.gz

Он содержит параметры и файл json, которые ищет Нео.

tar = tarfile.open("comp_model.tar.gz", "w:gz")
for name in ["deeplabv3-res50-0000.params", "deeplabv3-res50-symbol.json"]:
    tar.add(name)
tar.close()
  1. Сохраните файл tar.gz в s3, а затем скомпилируйте с помощью Neo GUI.

Чемпион! Это сработало. Я также делал несколько глупостей, но в конце концов придумал, как заставить его работать с вашим кодом. Для начала при компиляции алгоритма SS в SageMaker укажите алгоритм в гиперпараметре "algorithm" на "deeplab" иначе он будет компилироваться совсем по другой модели и не будет соответствовать размеру при "load_parameters". Также «img = image.imdecode(imbytes)» относится к mx.image (не cv2...), который по умолчанию использовал неправильную библиотеку. Предлагаю добавить импорт в топ для... from gluoncv import utils. Спасибо за помощь. удивительно!

Dcoder 24.03.2022 07:00

Другие вопросы по теме