Machine learning – от модели PyTorch до Kubeflow в облаке для BigData. Евгений Сергеевич Штольц
Чтение книги онлайн.
Читать онлайн книгу Machine learning – от модели PyTorch до Kubeflow в облаке для BigData - Евгений Сергеевич Штольц страница 5
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. Идея программируемых логических блоков (программируемые пользователем вентильные матрицы) не нова и появилась задолго до универсальных процессоров. Смысл заключается не в выполнении программы на универсальном процессоре, который кажды