Анализируйте и данные модели на графическом процессоре

Можно часто улучшать производительность кода с выполнением на графическом блоке обработки (GPU). Например, выполнение на графическом процессоре может улучшать производительность если:

  • Ваш код является в вычислительном отношении дорогим, где вычислительное время значительно превышает время, проведенное, передавая данные и из памяти графического процессора.

  • Ваш рабочий процесс использует функции с gpuArray (Parallel Computing Toolbox) поддержка с входными параметрами большого массива.

Когда написание кода для графического процессора, лучше запускаться с кода, который уже выполняет хорошо на центральном процессоре. Векторизация обычно очень важна для достижения высокой производительности на графическом процессоре. Преобразуйте код, чтобы использовать функции, которые поддерживают аргументы Array графического процессора и передают входные данные графическому процессору. Для получения дополнительной информации о функциях MATLAB с входными параметрами графического процессора массивов, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).

Много функций в Statistics and Machine Learning Toolbox™ автоматически выполняются на графическом процессоре, когда вы используете входные данные графического процессора массивов. Например, можно создать объект вероятностного распределения на графическом процессоре, где выход является массивом графического процессора.

pd = fitdist(gpuArray(x),"Normal")

Используя графический процессор требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для полного списка функций Statistics and Machine Learning Toolbox™, которые принимают массивы графического процессора, смотрите Функции.

Запросите свойства графического процессора

Можно запросить и выбрать устройство графического процессора с помощью gpuDevice функция. Если у вас есть несколько графических процессоров, можно исследовать свойства всех графических процессоров, обнаруженных в системе с gpuDeviceTable функция. Затем можно выбрать определенный графический процессор для выполнения одно графического процессора при помощи его индекса (gpuDevice(index)).

D = gpuDevice
D = 
  CUDADevice with properties:

                      Name: 'Tesla V100-PCIE-32GB'
                     Index: 1
         ComputeCapability: '7.0'
            SupportsDouble: 1
             DriverVersion: 11.2000
            ToolkitVersion: 11
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 3.4090e+10
           AvailableMemory: 3.3374e+10
       MultiprocessorCount: 80
              ClockRateKHz: 1380000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 0
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

Выполните функцию на графическом процессоре

Исследуйте распределение данных на графическом процессоре с помощью описательной статистики.

Сгенерируйте набор данных нормально распределенных случайных чисел на графическом процессоре.

dist = randn(1e5,1e4,"gpuArray");

Определите ли dist графический процессор array.

TF = isgpuarray(dist)
TF = logical
   1

Выполните функцию с входным параметром графического процессора массивов. Например, вычислите демонстрационную скошенность для каждого столбца в dist. Начиная с dist массив графического процессора, skewness функция выполняется на графическом процессоре и возвращает результат как массив графического процессора.

skew = skewness(dist);

Проверьте что выход skew массив графического процессора.

TF = isgpuarray(skew)
TF = logical
   1

Оцените ускорение выполнения графического процессора

Оцените функциональное время выполнения на графическом процессоре и сравните эффективность с выполнением на центральном процессоре.

Сравнение времени, потраченного, чтобы выполнить код на центральном процессоре и графическом процессоре, может быть полезным, чтобы выбрать среду выполнения. Например, если вы хотите вычислить описательную статистику из выборочных данных, рассматривая время выполнения, и время передачи данных важно для оценки общей производительности. Если функция имеет поддержку gpuArray, когда количество увеличений наблюдений, расчет на графическом процессоре обычно становится более производительным по сравнению с центральным процессором.

Измерьте функциональное время выполнения в секундах при помощи gputimeit (Parallel Computing Toolbox) функция. gputimeit предпочтительно для timeit для функций, которые используют графический процессор, потому что он гарантирует завершение операции и компенсирует издержки.

skew = @() skewness(dist);
t = gputimeit(skew)
t = 0.6270

Оцените различие в производительности между графическим процессором и центральным процессором путем независимого измерения времени выполнения центрального процессора. Для этого графического процессора подписание этого кода быстрее, чем выполнение на центральном процессоре.

Эффективность кода по графическому процессору в большой степени зависит от используемого графического процессора. Для получения дополнительной информации об измерении и улучшании производительности графического процессора, смотрите Меру и Улучшайте Производительность графического процессора (Parallel Computing Toolbox).

Одинарная точность на графическом процессоре

Можно улучшать производительность кода путем выполнения вычислений в одинарной точности вместо двойной точности.

Определите время выполнения skewness функция с входным параметром dist набор данных в одинарной точности.

dist_single = single(dist);
skew_single = @() skewness(dist_single);
t_single = gputimeit(skew_single)
t_single = 0.2206

Для этого графического процессора подписание этого кода с данными об одинарной точности быстрее, чем выполнение с данными о двойной точности.

Повышение производительности зависит от номера карты графического процессора и общего количества ядер. Для получения дополнительной информации об использовании одинарной точности с помощью графического процессора смотрите Меру и Улучшайте Производительность графического процессора (Parallel Computing Toolbox).

Сокращение размерности и модель, соответствующая на графическом процессоре

Реализуйте сокращение размерности и рабочие процессы классификации на графическом процессоре.

Функционирует, такие как pca и fitcensemble может использоваться вместе, чтобы эффективно обучить модель машинного обучения.

  • Функция анализа главных компонентов (PCA) уменьшает размерность данных, заменяя несколько коррелированых переменных на новый набор переменных, которые являются линейными комбинациями исходных переменных.

  • fitcensemble функционируйте соответствует многим ученикам классификации, чтобы сформировать модель ансамбля, которая может сделать лучшие предсказания, чем один ученик.

Обе функции в вычислительном отношении интенсивны и могут быть значительно ускорены с помощью графического процессора.

Для примера используйте humanactivity набор данных. Набор данных содержит 24 075 наблюдений за пятью различной физической деятельностью человека: нахождение, положение, обход, выполнение и танец. Каждое наблюдение имеет 60 функций, извлеченных из ускоряющих данных, измеренных датчиками акселерометра смартфона. Набор данных содержит следующие переменные:

  • actid — Вектор отклика, содержащий идентификаторы действия в целых числах: 1, 2, 3, 4, и 5 нахождений представления, положение, обход, выполнение и танец, соответственно

  • actnames — Имена действия, соответствующие целочисленным идентификаторам действия

  • feat — Матрица функции 60 функций 24 075 наблюдений

  • featlabels — Метки 60 функций

load humanactivity

Используйте 90% наблюдений, чтобы обучить модель, которая классифицирует пять типов деятельности человека, и используйте 10% наблюдений, чтобы подтвердить обученную модель. Используйте cvpartition задавать 10%-ю затяжку для набора тестов.

Partition = cvpartition(actid,"Holdout",0.10);
trainingInds = training(Partition); % Indices for the training set
testInds = test(Partition); % Indices for the test set

Передайте обучение и тестовые данные к графическому процессору.

XTrain = gpuArray(feat(trainingInds,:));
YTrain = gpuArray(actid(trainingInds));
XTest = gpuArray(feat(testInds,:));
YTest = gpuArray(actid(testInds));

Найдите основные компоненты для обучающего набора данных XTrain.

[coeff,score,~,~,explained,mu] = pca(XTrain);

Найдите количество компонентов требуемым объяснить по крайней мере 99% изменчивости.

idx = find(cumsum(explained)>99,1);

Определите баллы основного компонента, которые представляют X на пробеле основного компонента.

XTrainPCA = score(:,1:idx);

Соответствуйте ансамблю учеников для классификации.

template = templateTree("MaxNumSplits",20,"Reproducible",true);
classificationEnsemble = fitcensemble(XTrainPCA,YTrain, ...
    "Method","AdaBoostM2", ...
    "NumLearningCycles",30, ...
    "Learners",template, ...
    "LearnRate",0.1, ...
    "ClassNames",[1; 2; 3; 4; 5]);

Чтобы использовать обученную модель для набора тестов, необходимо преобразовать набор тестовых данных при помощи PCA, полученного из обучающего набора данных.

XTestPCA = (XTest-mu)*coeff(:,1:idx);

Оцените точность обученного классификатора с тестовыми данными.

classificationError = loss(classificationEnsemble,XTestPCA,YTest);

Передайте локальной рабочей области

Передайте данные или свойства модели от графического процессора до локальной рабочей области для использования с функцией, которая не поддерживает массивы графического процессора.

Передача массивов графического процессора может быть дорогостоящей и является обычно не необходимой, если вы не должны использовать свой результат с функциями, которые не поддерживают массивы графического процессора или в другой рабочей области, где графический процессор недоступен.

gather (Parallel Computing Toolbox) функция передает данные из графического процессора в локальную рабочую область. Соберите dist данные и подтверждают, что данные больше не являются массивом графического процессора.

dist = gather(dist);
TF = isgpuarray(dist)
TF = logical
   0

gather функция передает имущество модели машинного обучения от графического процессора в локальную рабочую область. Соберите classificationEnsemble модель и подтверждает, что свойства модели, которые были ранее массивом графического процессора, такой как X, больше не являются массивами графического процессора.

classificationEnsemble = gather(classificationEnsemble);
TF = isgpuarray(classificationEnsemble.X)
TF = logical
   0

Смотрите также

(Parallel Computing Toolbox) | (Parallel Computing Toolbox) | (Parallel Computing Toolbox)

Похожие темы