Создание кода для сети глубокого обучения, предназначенной для графического процессора ARM Mali
cnncodegen( создает код C++ для указанного сетевого объекта с помощью графического процессора ARM ® Compute Library для Мали.net,'targetlib','arm-compute-mali')
Требуется графический процессор Coder™ и интерфейс кодера графического процессора для библиотек глубокого обучения.
cnncodegen( генерирует код C++ для указанного сетевого объекта с помощью вычислительной библиотеки ARM для графических процессоров Мали с дополнительными опциями генерации кода.net,'targetlib','arm-compute-mali',targetparams)
Использовать cnncodegen для генерации кода C++ для предварительно обученной сети для развертывания на графическом процессоре ARM Mali.
Получите предварительно подготовленную модель GoogLeNet с помощью googlenet (Deep Learning Toolbox). Для этой функции требуется модель Deep Learning Toolbox™ для сети GoogLeNet. Если этот пакет поддержки не установлен, функция предоставляет ссылку для загрузки. Кроме того, см. раздел https://www.mathworks.com/matlabcentral/fileexchange/64456-deep-learning-toolbox-model-for-googlenet-network.
net = googlenet;
Создание кода с помощью cnncodegen с 'targetlib' установить в значение 'arm-compute-mali'. По умолчанию генератор кода предназначен для версии '19.05' АРМ. Для назначения другой версии библиотеки вычислений используйте 'ArmComputeVersion' параметр.
cnncodegen(net,'targetlib','arm-compute-mali'... ,'targetparams',struct('ArmComputeVersion','19.02'));
------------------------------------------------------------------------ Compilation suppressed: generating code only. ------------------------------------------------------------------------ ### Codegen Successfully Generated for arm device
Генератор кода генерирует .cpp и заголовочные файлы в '/pwd/codegen' папка. Сеть DAG создается как класс C++ с именем CnnMain, содержащий массив из 87 классов слоев. Генератор кода уменьшает количество слоев за счет оптимизации слоевого слияния слоев сверточной и пакетной нормализации. setup() метод этого класса устанавливает дескрипторы и выделяет ресурсы для каждого объекта уровня. predict() способ вызывает прогнозирование для каждого из 87 уровней в сети. cleanup() освобождает все память и системные ресурсы, выделенные для каждого объекта уровня. Все бинарные веса (cnn_**_w) и файлы смещения (cnn_**_b) для уровней свертки сети хранятся в codegen папка.
Чтобы построить библиотеку, переместите созданный код на целевую платформу ARM и используйте созданный make-файл cnnbuild_rtw.mk.
net - Предварительно обученный объект сети глубокого обученияПредварительно обученный SeriesNetwork или DAGNetwork объект.
Примечание
cnncodegen не поддерживает dlnetwork объекты.
targetparams - Параметры, специфичные для библиотекиПараметры библиотеки вычислений ARM, указанные как 1около-1 структура, содержащая поля, описанные в этих таблицах.
Область | Описание |
|---|---|
ArmComputeVersion | Версия вычислительной библиотеки ARM на целевом оборудовании, указанная как |
Предупреждает, начиная с R2021a
В будущем выпуске, cnncodegen Функция (GPU Coder) генерирует код C++ и makefile для создания статической библиотеки только для процессора ARM Mali. Вы можете продолжать использовать 'arm-compute-mali' значение для 'targetlib' аргумент для нацеливания на графический процессор ARM Mali с помощью вычислительной библиотеки ARM для компьютерного зрения и машинного обучения.
Для всех других целей используйте codegen команда. Запишите функцию начального уровня в MATLAB ®, использующую coder.loadDeepLearningNetwork Функция (GPU Coder) для загрузки модели глубокого обучения и вызовов predict (Deep Learning Toolbox) для прогнозирования ответов. Например,
function out = googlenet_predict(in) %#codegen persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('googlenet'); end % pass in input out = predict(mynet,in);
В этой таблице показаны некоторые типичные виды использования cnncodegen и как обновить код для использования codegen вместо этого.
| Целевой рабочий процесс | Не рекомендуется | Рекомендуется |
|---|---|---|
Процессор процессора ARM с поддержкой | Установите cnncodegen(net,'targetlib'... ,'arm-compute','targetparams' ... ,struct('ArmComputeVersion'... ,'19.02','ArmArchitecture'... ,'armv8')) Другие поддерживаемые версии библиотеки вычислений ARM: Можно указать архитектуру ARM как | Создать cfg = coder.config('lib'); cfg.TargetLang = 'C++'; Создать dlcfg = coder.DeepLearningConfig ... ('arm-compute'); dlcfg.ArmArchitecture = 'armv8'; dlcfg.ArmComputeVersion = '19.02'; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')};
codegen -args arg ...
-config cfg googlenet_predict
Дополнительные сведения см. в разделе Создание кода для сетей глубокого обучения с помощью вычислительной библиотеки ARM. |
Графические процессоры NVIDIA ® с использованием библиотеки CUDA ® Deep Neural Network (cuDNN) | Установите cnncodegen(net,'targetlib'... ,'cudnn','ComputeCapability'... ,'7.0','targetparams' ... ,struct('AutoTuning',true ... ,'DataType','INT8'... ,'CalibrationResultFile' ... 'myInt8Cal.mat')) Функция автоматической настройки позволяет библиотеке cuDNN находить самые быстрые алгоритмы свертки. | Создать cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; Чтобы задать минимальную вычислительную способность для генерации кода, используйте cfg.GpuConfig.ComputeCapability = '7.0';
Создайте объект конфигурации глубокого обучения. Укажите специфичные для целевой библиотеки свойства объекта конфигурации глубокого обучения. Присвойте его dlcfg = coder.DeepLearningConfig('cudnn'); dlcfg.AutoTuning = true; dlcfg.DataType = 'int8'; dlcfg.CalibrationResultFile = 'myInt8Cal.mat'; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')};
codegen -args arg ...
-config cfg googlenet_predict
Дополнительные сведения см. в разделе Создание кода для сетей глубокого обучения с помощью cuDNN (GPU Coder). |
Процессор Intel ® CPU | Чтобы использовать библиотеку Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN) для процессоров Intel, установите cnncodegen(net,'targetlib'... ,'mkldnn'); | Создать cfg = coder.config('lib'); cfg.TargetLang = 'C++'; Создать dlcfg = coder.DeepLearningConfig... ('mkldnn'); cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')};
codegen -args arg ...
-config cfg googlenet_predict
Дополнительные сведения см. в разделе Создание кода для сетей глубокого обучения с MKL-DNN. |
Графические процессоры NVIDIA с помощью NVIDIA TensorRT™, высокопроизводительного оптимизатора выводов глубокого обучения и библиотеки времени выполнения | Установите cnncodegen(net,'targetlib'... ,'tensorrt','ComputeCapability'... ,'7.0','targetparams' ... ,struct('DataType','INT8' ... 'DataPath','image_dataset'... ,'NumCalibrationBatches',50)) | Создать cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; Чтобы задать минимальную вычислительную способность для генерации кода, используйте cfg.GpuConfig.ComputeCapability = '7.0';
Создать dlcfg = coder.DeepLearningConfig... ('cudnn'); dlcfg.DataType = 'int8'; dlcfg.DataPath = 'image_dataset'; dlcfg.NumCalibrationBatches = 50; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')};
codegen -args arg ...
-config cfg googlenet_predict
Дополнительные сведения см. в разделе Прогнозирование глубокого обучения с помощью NVIDIA TensorRT (GPU Coder). |
Общие параметры | Создание кода без создания make-файла. Например, cnncodegen(net,'targetlib' ... ,'mkldnn','codegenonly',1); | Чтобы создать исходный код без вызова команды make или кода объекта построения, используйте команду cfg = coder.codeConfig('lib');
cfg.GenCodeOnly = true;
|
Задание вычислительной способности графического процессора NVIDIA для компиляции. Аргумент принимает формат cnncodegen(net,'targetlib'... ,'cudnn','ComputeCapability','7.0'); | Чтобы задать минимальную вычислительную способность для генерации кода, используйте cfg = coder.gpuConfig('lib'); cfg.GpuConfig.ComputeCapability = '7.0'; |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.