Сгенерируйте код для нейронной сети для глубокого обучения для целевого графического процессора 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
(GPU Coder) функция сгенерирует код С++ и make-файлы для создания статической библиотеки только для процессора ARM Mali GPU. Можно продолжать использовать 'arm-compute-mali'
значение для 'targetlib'
аргумент для целевого графического процессора ARM Mali с помощью библиотеки ARM Compute Library для компьютерного зрения и машинного обучения.
Для всех других целей используйте 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 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 (GPU Coder). |
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 (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.