Установка пакетов для машинного обучения в R

R
ML
tensorflow
keras
tidymodels
Author

i2z1@ddslab.ru

Published

February 3, 2024

Как начать использование инструментов машинного обучения в R? Разумеется, путь начинается с установки нужных инструментов.

Основные популярные инструменты

В R для применения алгоритмов машинного обучения существует множество пакетов на любой вкус. Самыми популярными “универсальными” пакетами являются:

  1. tidymodels – курируемая компанией Posit экосистема пакетов для ML
  2. tensorflow – курируемая Google библиотека для ML
  3. keras – высокоуровневая обертка над tensorflow
  4. torch – курируемая не-буду-писать-какой-компанией-а-то-роскомнадзор… экосистема библиотек для ML

Как установить

Tidymodels

Тут все просто – устанавливается через install.packages("tidymodels"). Tidymodels – это метапакет, в ходе его установки будут установлено множество входящих в него пакетов.

Tensorflow

На сайте пакета есть инструкция, но есть нюансы, которые и подтолкнули написание этой статьи.

  1. Убеждаемся, что у нас установлена библиотека, позволяющая нам взаимодействовать с Python из R
install.packages("reticulate")
  1. Ставим* python для пакета reticulate, которым будет пользоваться R
reticulate::install_python()
  1. Ставим пакет tensorflow. Официальная инструкция рекомендует произвести установку не из CRAN, а из Github
install.packages("tensorflow")
  1. Устанавливаем компоненты tensorflow выполняя команду
tensorflow::install_tensorflow(envname = "r-tf215")
  1. Проверяем:
  • Смотрим версию
tensorflow::tf_version()
  • Тестируем Hello world
tf$constant("Hello TensorFlow!")

 

… есть другой вариант

Документация подсказывает что можно установить компоненты Tensorflow путем установки Keras keras::install_keras() о которой мы поговорим ниже. Но я этот способ не тестировал.

Поддержка GPU

Во многом, развитие сферы ML в последнее десятилетие обусловлено развитием средств вычислительной техники – а именно, возможностью задействования ресурсов специализированных устройств. Одними из них стали графические ускорители, также известные как GPU – Graphics Proccessing Unit.

Если мы хотим ускорить процесс обучения наших моделей, хорошо бы было задействовать использование графического ускорителя. В настоящее время наиболее просто это делается с графическими картами от Nvidia.

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

  1. Ставим TensorRT
reticulate::py_install("tensorrt", envname = "r-tf215")
  1. Убеждаемся что у нас подключена NUMA.

На Linux это делается так:

ls /sys/bus/pci/devices/

0000:00:00.0@  0000:00:07.0@  0000:00:0d.0@  0000:00:12.0@  0000:00:15.0@  0000:00:1f.3@  10000:e0:06.0@
0000:00:02.0@  0000:00:07.2@  0000:00:0d.2@  0000:00:14.0@  0000:00:15.1@  0000:00:1f.4@  10000:e0:06.2@
0000:00:04.0@  0000:00:08.0@  0000:00:0d.3@  0000:00:14.2@  0000:00:16.0@  0000:00:1f.5@  10000:e1:00.0@
0000:00:06.0@  0000:00:0a.0@  0000:00:0e.0@  0000:00:14.3@  0000:00:1f.0@  0000:01:00.0@

Ищем первое устройство, где после первого двоеточия у нас сменился номер – 0000:01:00.0@ (стал :01:).

Проверяем кандидата

cat /sys/bus/pci/devices/0000\:01\:00.0/numa_node

Если -1, то значит NUMA не подключена. Нам нужно чтобы значение стало 0. Для этого выполним команду

sudo echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node
  1. Проверяем
tf$constant("Hello TensorFlow!")

Если предупреждающие надписи пропали, значит мы все сделали верно!

Использование

Перед использованием нужно правильно инициализировать окружение. Я делаю это так:

library(reticulate)
virtualenv_list()
use_virtualenv("r-tf215")

library(tensorflow)
tensorflow::tf_version()
tf$constant("Hello TensorFlow!")

Не забываем своевременно взводить нолик для NUMA

sudo echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node

Keras

Ставится весьма просто

  1. Ставим пакет
install.packages("keras")
  1. Ставим компоненты Python для Keras
keras::install_keras()
Tensorflow vs Keras

Не рекомендую ставить Keras и последний Tensorflow в одно виртуальное окружение поскольку Keras опирается обычно на более старую версию Tensorflow (старше на 1-2 минорные версии)!