H2O не работает параллельно
Я создал DF и хочу преобразовать его в кадр H2O.
Для этого я делаю:
library(h2o)
h2o.init(nthreads=-1)
df<-data.table(matrix(0,ncol=46,nrow=30000))
df<-as.h2o(df)
Когда я делаю htop в командной строке, я вижу, что работает только один процессор из 4 доступных. Не возможно сделать по-другому?
Спасибо!
1 ответ
Здесь работают два фактора.
1) во-первых, вы используете as.h2o()
, который является не очень эффективным методом "push" (когда клиент отправляет данные на сервер) приема данных.
Это предназначено для небольших данных и для удобства (что хорошо для этого случая, потому что вы создали набор данных с 30000 строк, который является маленькими данными).
Если вы хотите, чтобы H2O эффективно загружал данные, вам нужно использовать метод "pull", при котором H2O извлекает данные из хранилища данных в память H2O. В R это будет h2o.importFile()
,
2) Вторым фактором является то, что H2O использует фрагментирование данных (смежные строки в наборе данных) для получения параллелизма данных. Количество чанков на столбец напрямую влияет на количество потоков, которые работают параллельно. После считывания набора данных, если он содержит только 1 блок на столбец, он сможет использовать только 1 поток (и, следовательно, 1 ядро). Вы можете увидеть количество блоков в столбце, посмотрев, как данные были проанализированы в веб-интерфейсе Flow H2O.
Я запустил вашу программу выше; Посмотрите, как Сводка распределения кадров для результирующего кадра H2O показывает, что количество порций в столбце равно 1:
Повторное выполнение той же программы с 3 000 000 строк дает 66 блоков на столбец:
Это намного лучше, потому что теперь, когда вы попытаетесь поработать с данными в H2O (например, обучить модель), вы получите до 66 потоков, работающих параллельно в распределенном кластере.
[Обратите внимание на более крупный случай, сам прием данных занял несколько минут на моем ноутбуке и все еще был медленным и однопоточным, потому что он использует неэффективный as.h2o()
"толчок" подход. Если вы записали набор данных в файл CSV, и H2O проанализировала его с h2o.importFile()
"тянуть" подход, это было бы намного быстрее. ]