GridSearchCV-如何限制内存使用

时间:2018-10-29 12:13:16

标签: python linux memory-management scikit-learn grid-search

我正在GridSearchCVscikit-learn上使用SparkLinux)进行网格搜索。因此,我在nohup ./spark_python_shell.sh > output.log &外壳上运行bash来点燃Spark集群,并且我也使我的python脚本运行了(请参见spark-submit \ --master yarn 'grid_search.py'):

    SPARK_HOME=/u/users/******/spark-2.3.0 \
    Q_CORE_LOC=/u/users/******/q-core \
    ENV=local \
    HIVE_HOME=/usr/hdp/current/hive-client \
    SPARK2_HOME=/u/users/******/spark-2.3.0 \
    HADOOP_CONF_DIR=/etc/hadoop/conf \
    HIVE_CONF_DIR=/etc/hive/conf \
    HDFS_PREFIX=hdfs:// \
    PYTHONPATH=/u/users/******/q-core/python-lib:/u/users/******/three-queues/python-lib:/u/users/******/pyenv/prod_python_libs/lib/python2.7/site-packages/:$PYTHON_PATH \
    YARN_HOME=/usr/hdp/current/hadoop-yarn-client \
    SPARK_DIST_CLASSPATH=$(hadoop classpath):$(yarn classpath):/etc/hive/conf/hive-site.xml \
    PYSPARK_PYTHON=/usr/bin/python2.7 \
    QQQ_LOC=/u/users/******/three-queues \
    spark-submit \
    --master yarn 'grid_search.py' \
    --executor-memory 10g \
    --num-executors 8 \
    --executor-cores 10 \
    --conf spark.port.maxRetries=80 \
    --conf spark.dynamicAllocation.enabled=False \
    --conf spark.default.parallelism=6000 \
    --conf spark.sql.shuffle.partitions=6000 \
    --principal ************************ \
    --queue default \
    --name lets_get_starting \
    --keytab /u/users/******/.******.keytab \
    --driver-memory 10g

这是grid_search.py python脚本的一部分,该脚本将Grid Search连接到Spark集群并执行Grid Search:

# Spark configuration
from pyspark import SparkContext, SparkConf
conf = SparkConf()
sc = SparkContext(conf=conf)

# Execute grid search - using spark_sklearn library
from spark_sklearn import GridSearchCV
classifiers_grid = GridSearchCV(sc, estimator=classifier, param_grid=parameters, scoring='precision', cv=3,n_jobs=5, pre_dispatch=10)
classifiers_grid.fit(X, y)

此网格搜索显然在Linux上创建了多个进程,并且这些进程具有不同的PID。

我的问题如下:

如何限制此网格搜索的内存使用?

例如,如何将其最大内存使用量设置为10GB?

从理论上讲,遵循三种不同的路线:

  1. 在Scikit-Learn上限制内存使用量
  2. 限制Python上的内存使用量
  3. 限制Linux上的内存使用量

目前,我通过将n_jobs设置为不同的值来对(1)进行了实验  和pre_dispatch,然后检查Linux上相关进程(free -hps aux --sort-rss等)的内存使用情况。

但是,我认为这是非常低效的,因为您不能精确指定内存上限(例如10 GB),并且这些进程的内存使用量会随着时间的流逝而不断变化。结果,我必须不断关注内存使用情况,然后修改n_jobs的值  和pre_dispatch等。

0 个答案:

没有答案