Сгенерируйте код для нейронной сети для глубокого обучения для целевого графического процессора ARM Mali
cnncodegen( генерирует код С++ для заданного сетевого объекта при помощи ARM® Вычислите библиотеку для графических процессоров Mali.net,'targetlib','arm-compute-mali')
Требуется продукт GPU Coder™ и интерфейс GPU Coder для библиотек глубокого обучения.
cnncodegen( генерирует код С++ для заданного сетевого объекта при помощи ARM Compute Library для графических процессоров Мали с дополнительными опциями генерации кода.net,'targetlib','arm-compute-mali',targetparams)
Использовать cnncodegen чтобы сгенерировать код С++ для предварительно обученной сети для развертывания на графическом процессоре 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 классов слоев. Генератор кода уменьшает количество слоев путем оптимизации слияния слоев сверточной и пакетной нормализации. The setup() метод этого класса настраивает указатели и выделяет ресурсы для каждого объекта слоя. The predict() способ вызывает предсказание для каждого из 87 слоев в сети. The cleanup() метод освобождает все ресурсы памяти и системы, выделенные для каждого объекта слоя. Все бинарные веса (cnn_**_w) и файлы смещения (cnn_**_b) для свертки слои сети хранятся в codegen папка.
Чтобы создать библиотеку, переместите сгенерированный код на целевую платформу ARM и используйте сгенерированный make-файл cnnbuild_rtw.mk.
net - Предварительно обученный объект нейронной сети для глубокого обученияПредварительно обученные SeriesNetwork или DAGNetwork объект.
Примечание
cnncodegen не поддерживает dlnetwork объекты.
targetparams - Специфичные для библиотеки параметрыПараметры ARM Compute Library заданы как 1-by- 1 структура, содержащая поля, описанные в этих таблицах.
Область | Описание |
|---|---|
ArmComputeVersion | Версия ARM Compute Library на целевом компьютере, заданная как |
Предупреждает, начиная с R2021a
В будущем релизе, cnncodegen функция сгенерирует код С++ и make-файлы для создания статической библиотеки только для процессора ARM Mali GPU. Можно продолжать использовать 'arm-compute-mali' значение для 'targetlib' аргумент для целевого графического процессора ARM Mali с помощью библиотеки ARM Compute Library для компьютерного зрения и машинного обучения.
Для всех других целей используйте codegen команда. Написание функции точки входа в MATLAB® который использует coder.loadDeepLearningNetwork функция для загрузки модели глубокого обучения и вызовов 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 CPU, поддерживающий | Установите cnncodegen(net,'targetlib'... ,'arm-compute','targetparams' ... ,struct('ArmComputeVersion'... ,'19.02','ArmArchitecture'... ,'armv8')) Другие поддерживаемые версии ARM Compute Library Вы можете задать архитектуру 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 Compute Library. |
NVIDIA® Графические процессоры при помощи CUDA® Библиотека глубоких нейронных сетей (cuDNN) | Установите cnncodegen(net,'targetlib'... ,'cudnn','ComputeCapability'... ,'7.0','targetparams' ... ,struct('AutoTuning',true ... ,'DataType','INT8'... ,'CalibrationResultFile' ... 'myInt8Cal.mat')) Функция автоматической настройки позволяет библиотеке cuDNN находить самые быстрые алгоритмы свертки. The | Создайте 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. |
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 с использованием TensorRT™ NVIDIA, оптимизатора вывода эффективности глубокого обучения и библиотеки во время выполнения | Установите 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. |
Общие опции | Сгенерируйте код, не генерируя и не создавая 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.