Machine learning – от модели PyTorch до Kubeflow в облаке для BigData. Евгений Сергеевич Штольц
Чтение книги онлайн.

Читать онлайн книгу Machine learning – от модели PyTorch до Kubeflow в облаке для BigData - Евгений Сергеевич Штольц страница 5

СКАЧАТЬ * -1

      tensor([[ -1., -2., -3.],

      [ -5., -6., -7.],

      [ -8., -9., -10.]])

      a.abs()

      tensor([[ 1., 2., 3.],

      [ 5., 6., 7.],

      [ 8., 9., 10.]])

      Также имеются операции свёрки, такие как sum, min, max, которые на входе дают сумму всех элементов, самый маленький или самый большой элемент матрицы:

      a.sum()

      tensor(51.)

      a.min()

      tensor(1.)

      a.max()

      tensor(10.)

      Но, нам больше интересны будут постолбцевые операции (операция будет произодиться над каждым столбцом):

      a.sum(0)

      tensor([14., 17., 20.])

      a.min(0)

      torch.return_types.min(values=tensor([1., 2., 3.]), indices=tensor([0, 0, 0]))

      a.max(0)

      torch.return_types.max(values=tensor([ 8., 9., 10.]), indices=tensor([2, 2, 2]))

      Как мы помним нейронная сеть состоит зи слоёв, слой из нейронов, а нейрон содержит на входе связи с весами в виде простых чисел. Вес задаётся обычным числом, тогда входящие связи в нейрон можно описать последовательностью чисел – вектором (одномерным массивом или списком), длина которого и есть количество связей. Так как сеть полносвязная, то все нейроны этого слоя связаны со предыдущим, а следовательно демонстрирующие их вектора имеют тоже одинаковую длину, создавая список равных по длине векторов – матрицу. Это удобное и компактное представление слоя, оптимизированное для использования на компьютере. На выходе нейрона имеется функция активации (сигмойда или, ReLU для глубоких и сверхглубоких сетей), которая определяет, выдаст на выходе нейрон значение или нет. Для этого необходимо применить её к каждому нейрону, то есть к каждому столбцу: мы уже видели операцию к столбцам.

      Ускорение обучения

      Эти операции используются при свёртках, которые берут на себя более 99% времени и поэтому имеются специализированные средства по их оптимизации. Сами вычисления производятся не на Python, а на C – Python лишь вызывает API низкоуровневых математический библиотек. Так как такие вычисление легко распараллеливаются, то вместо процессоров общего назначения (CPU) применяются процессора предназначенные для параллельной обработки изображений (GPU). Так, если у ПК в процессоре от 2 до 8 ядер, а у сервера от 10 до 20 ядер, то в GPU это сотни или тысячи узкоспециализированных под обработку матриц и векторов. Наиболее популярен стандарт группы драйверов, предоставляющих доступ к GPU NVidia имеет название CUDA (Computed Unified Device Architecture). Для большей оптимизации в процессорах для ML используются специальные инструкции, которые задействуется в специальных библиотеках. Например, процессоры Intel Xeon SCalate в восьмибитными числами и специальными конвейерами, которые активируются при использовании OpenVINO, что даёт прирост в скорости до 3,7 раза для PyTorch. Для ускорения классического ML (классификации) XGboost дащий прирост до 15 раз. Пока нам достаточно маломощного CPU.

      Другим типом специализированных процессором является перепрограммируемый процессор. Так в 2018 году Intel представила процессор со встроенным FPGA (field-programmable gate array) модулем, разработанной купленной компанией Altera, в своём Intel Xeon SP-6138P. Другим крупным производителем FPGA является Xilinx, создавшую Altera. Идея программируемых логических блоков (программируемые пользователем вентильные матрицы) не нова и появилась задолго до универсальных процессоров. Смысл заключается не в выполнении программы на универсальном процессоре, который кажды СКАЧАТЬ