Общая идея заключается в том, что PySpark создает столько java-процессов, сколько есть исполнителей, а затем отправляет данные в каждый процесс. Если слишком мало процессов, узкое место памяти происходит в области кучи java.
В вашем случае особая ошибка заключается в том, что RDD, созданный с помощью sc.parallelize([...])
, не указывал количество разделов ( аргумент numSlices
, см. docs ). И RDD по умолчанию имеет несколько разделов, которые слишком малы (возможно, он состоит из одного раздела).
Чтобы решить эту проблему, просто укажите количество желаемых разделов:
a = sc.parallelize([...], numSlices=1000) # and likewise for b
. Когда вы указываете большее и большее количество срезов, вы увидите уменьшение размера, указанного в предупреждение. Увеличьте количество срезов, пока не получите больше предупреждающего сообщения. Например, получение
Stage 0 contains a task of very large size (696 KB). The maximum recommended task size is 100 KB
означает, что вам нужно указать больше фрагментов.
Еще один совет, который может быть полезен при решении проблем памяти (но это не связано с предупреждение): по умолчанию память, доступная каждому исполнителю, составляет 1 ГБ или около того. Вы можете указать большие суммы через командную строку, например, с помощью --executor-memory 64G
.
Вам необходимо:
npm install @tensorflow/tfjs-node
// Load the binding: require('@tensorflow/tfjs-node'); // Use '@tensorflow/tfjs-node-gpu' if running with GPU.
Прямо там, в комментариях к коду. Вы можете использовать@tensorflow/tfjs-node
, или если вы используете GPU с CUDA, вы можете использовать@tensorflow/tfjs-node-gpu
- установить approriate. Они взаимоисключающие. – Hawkeye64 9 August 2018 в 13:14