install.packages("reticulate")
Как начать использование инструментов машинного обучения в R? Разумеется, путь начинается с установки нужных инструментов.
Основные популярные инструменты
В R для применения алгоритмов машинного обучения существует множество пакетов на любой вкус. Самыми популярными “универсальными” пакетами являются:
- tidymodels – курируемая компанией Posit экосистема пакетов для ML
- tensorflow – курируемая Google библиотека для ML
- keras – высокоуровневая обертка над tensorflow
- torch – курируемая не-буду-писать-какой-компанией-а-то-роскомнадзор… экосистема библиотек для ML
Как установить
Tidymodels
Тут все просто – устанавливается через install.packages("tidymodels")
. Tidymodels – это метапакет, в ходе его установки будут установлено множество входящих в него пакетов.
Tensorflow
На сайте пакета есть инструкция, но есть нюансы, которые и подтолкнули написание этой статьи.
- Убеждаемся, что у нас установлена библиотека, позволяющая нам взаимодействовать с Python из R
- Ставим* python для пакета reticulate, которым будет пользоваться R
::install_python() reticulate
- Ставим пакет tensorflow. Официальная инструкция рекомендует произвести установку не из CRAN, а из Github
install.packages("tensorflow")
- Устанавливаем компоненты tensorflow выполняя команду
::install_tensorflow(envname = "r-tf215") tensorflow
- Проверяем:
- Смотрим версию
::tf_version() tensorflow
- Тестируем
Hello world
$constant("Hello TensorFlow!") tf
Документация подсказывает что можно установить компоненты Tensorflow путем установки Keras keras::install_keras()
о которой мы поговорим ниже. Но я этот способ не тестировал.
Поддержка GPU
Во многом, развитие сферы ML в последнее десятилетие обусловлено развитием средств вычислительной техники – а именно, возможностью задействования ресурсов специализированных устройств. Одними из них стали графические ускорители, также известные как GPU – Graphics Proccessing Unit.
Если мы хотим ускорить процесс обучения наших моделей, хорошо бы было задействовать использование графического ускорителя. В настоящее время наиболее просто это делается с графическими картами от Nvidia.
По умолчанию, функция install_tensorflow()
устанавливает пакет с поддержкой GPU, но о части зависимостей, которые ускорят процесс обучения (например TensorRT) нам придется установить самим.
- Ставим TensorRT
::py_install("tensorrt", envname = "r-tf215") reticulate
- Убеждаемся что у нас подключена 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
- Проверяем
$constant("Hello TensorFlow!") tf
Если предупреждающие надписи пропали, значит мы все сделали верно!
Использование
Перед использованием нужно правильно инициализировать окружение. Я делаю это так:
library(reticulate)
virtualenv_list()
use_virtualenv("r-tf215")
library(tensorflow)
::tf_version()
tensorflow$constant("Hello TensorFlow!") tf
Не забываем своевременно взводить нолик для NUMA
sudo echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node
Keras
Ставится весьма просто
- Ставим пакет
install.packages("keras")
- Ставим компоненты Python для Keras
::install_keras() keras
Не рекомендую ставить Keras и последний Tensorflow в одно виртуальное окружение поскольку Keras опирается обычно на более старую версию Tensorflow (старше на 1-2 минорные версии)!