2017-09-02 3 views
1

Je développe un type de réseau de neurones à apprentissage extrême dans Spark qui nécessite l'utilisation de la fonction pseudo-inverse de Moore-Penrose. Ceci n'est disponible dans aucune des bibliothèques Spark, donc j'utilise Breeze, qui a nécessité la conversion des structures de données Spark en matrices Breeze. Quand je suis aussi loin que beta = pinv(H) * T tout échoue avec une exception de MOO (ce que je ne pensais pas possible dans Spark). Des idées pourquoi?La fonction pseudo-inverse de Breeze pinv (Moore-Penrose) donne l'erreur OutOfMemory en utilisant Spark

pinv est le pseudo-inverse de Moore-Penrose dans Breeze. H est une matrice de 35 000 lignes et 10 colonnes. Le SVD devrait être capable de faire face à cela. Ce n'est pas un ensemble de données particulièrement volumineux, ne prend que 30Mb. Je cours tout localement sur mon ordinateur portable, rien dans le nuage. J'ai 8G de mémoire sur mon ordinateur portable (MacBook Air).

Je lis que vous pouvez augmenter la mémoire du pilote à l'aide d'une commande étincelle shell, mais je ne sais pas comment faire, ou comment il serait le lien avec le code dans mon IDE qui met en place le SparkSession

val spark: SparkSession = SparkSession 
    .builder() 
    .master("local[*]") 
    .appName("ELMPipelineTest") 
    .getOrCreate()` 
+0

OK merci ... alors qu'est-ce que vous en pensez? Voulez-vous dire que c'est trop grand pour travailler sur mon ordinateur portable? La SVD est essentielle à l'algorithme et sans elle, cela ne marchera pas. Pensez-vous que l'augmentation de la mémoire du conducteur fera la différence? Je ne sais vraiment pas comment changer la mémoire, les instructions sont assez opaques pour un débutant. Merci de votre aide! – LucieCBurgess

Répondre

0

J'ai corrigé ceci comme suit. Premièrement, l'application doit être exécutée sur la ligne de commande, et non via l'EDI, car la modification de la mémoire du pilote Spark doit être effectuée avant la construction de la JVM. J'utilise SBT comme mon outil de construction, donc du directeur de haut niveau de mon projet, via le shell Linux je courais:

sbt compile 
sbt package // this creates a jar file 
$SPARK_HOME/bin/spark-submit --class dev.elm.ELMPipeline --master local[4] --driver-memory 8G path/to/jar.jar 

I ensemble $ SPARK_HOME comme la variable d'accueil d'allumage en premier. Cela évite l'erreur Java OOM. Merci à @RafalKwasny pour l'avoir signalé.