关于CaffeOnSpark 集群效率低下的问题解决方案
来源:互联网 发布:培训java三个月靠谱吗 编辑:程序博客网 时间:2024/06/06 18:59
在我之前的文章上可以看到关于CaffeOnSpark的搭建教程。
这里假设大家已经把整个集群启动。
我的配置:
node: 四台计算机: 三台Ubuntu 16.04 8Gb内存 Gtx1080 一台 CentOs 7 8Gb 内存 Gtx970 作为master 不参与工作
配置的节点数量不应该过大,否则集群之间的数据传递是一个很大的问题。
Executor数量造成数据倾斜
在官方的Git上用的这样的命令:
export SPARK_WORKER_INSTANCES=2 export DEVICES=1spark-submit --master yarn --deploy-mode cluster \ --num-executors ${SPARK_WORKER_INSTANCES} \ --files ${CAFFE_ON_SPARK}/data/lenet_memory_solver.prototxt,${CAFFE_ON_SPARK}/data/lenet_memory_train_test.prototxt \ --conf spark.driver.extraLibraryPath="${LD_LIBRARY_PATH}" \ --conf spark.executorEnv.LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" \ --class com.yahoo.ml.caffe.CaffeOnSpark \ ${CAFFE_ON_SPARK}/caffe-grid/target/caffe-grid-0.1-SNAPSHOT-jar-with-dependencies.jar \ -train \ -features accuracy,loss -label label \ -conf lenet_memory_solver.prototxt \ -devices ${DEVICES} \ -connection ethernet \ -model hdfs:///mnist.model \ -output hdfs:///mnist_features_result
在命令中定义了 num-executors 并且使他等于二,这是因为设定的集群中节点的数量是大于等于二的。
你设定的 num-executors 数值应该小于等于你自己集群当中工作节点的数量才可以,否则会发生数据倾斜,运行的时间会加一倍。Git上关于它的讨论
BatchSize批处理数量造成效率低下
在训练模型当中有对应的批处理 batch_size 数目的设置,比如在官方的 lenet_memory_train_test.prototxt 默认数值是 100 。 在单机运行的时候,批处理的计算是这样的:
total batch size = num-executors * batch size = 1 * 100 = 100
而对于集群来说,就拿上面那个官方的命令:
total batch size = 2 * 100 = 200
所以运行时间在同样迭代次数的情况下会比单机的长,一个公平的比较应该把 batch_size 调成 50
total batch size = 2 * 50= 100
这样才可以作为一个公平对比。
一下是我对几种情况做的测试:
executor 迭代次数 Jobs 时间 batch_size batch_size = 1281 10000 60 3min 2s 128 * 1 = 128 batch_size2 10000 89 1min 49s 64 * 2 = 128 batch_size3 10000 63 1min 33s 43 * 3 = 129 batch_size4 10000 62 7min 06s 32 * 4 = 128 batch_size batch_size = 2561 10000 114 5min 37s 256 * 1 = 256 batch_size2 10000 116 3min 9s 128 * 2 = 256 batch_size3 10000 116 1min 26s 85 * 3 = 255 batch_size4 10000 116 6min 28s 64 * 4 = 256 batch_size 其他1 10000 33 1min 29s 64 * 1 = 64 batch_size3 10000 89 2min 0s 64 * 3 = 192 batch_size4 10000 151 6min 59s 85 * 4 = 340 batch_size3 10000 170 3min 26s 128 * 3 = 384 batch_size5 10000 187 6min 34s 85 * 5 = 425 batch_size6 10000 223 6min 38s 85 * 6 = 510 batch_size4 10000 223 6min 25s 128 * 4 = 512 batch_size5 10000 227 8min 1s 128 * 5 = 640 batch_size6 10000 331 9min 21s 128 * 6 = 768 batch_size
拿最明显的比较,同样是 128 batch_size 3个 execotor 比一个速度提升了很多,但是 4 个的时候就明显慢下来了,这是由于我的工作节点就三个,发生了数据倾斜。Git上关于速度的问题探讨
做这个东西真的还是挺麻烦的,遇到很多坑,不过这个过程也学习了很多,^_^
阅读全文
0 0
- 关于CaffeOnSpark 集群效率低下的问题解决方案
- 关于昨天和今天自己效率低下的总结
- 效率低下的七大习惯
- NSLog效率低下的原因
- 关于"&"运算符效率低下的问题,有什么好的解决办法?
- 一个效率低下的Map实现:AbstractMap
- 效率低下的一天又过去了,悲哀
- 效率低下的不良习惯与解决办法
- java 抛异常引起效率的低下
- 找出执行效率低下的sql语句
- 拿到新项目时,效率低下的原因
- 找到SQL2005运行效率低下的原因
- 关于sed命令去除文本当中每个字段前后空格及tab效率低下的解决办法
- CaffeOnSpark安装和使用教程系列三:集群环境下使用CaffeOnSpark进行MNIST数据集的测试
- 效率低下之根源
- 从效率低下说起
- 效率低下的组织是怎么产生的?
- Android 系统 UI 效率低下的框架设计的问题
- (译)从全卷积网络到大型卷积核:深度学习的语义分割全指南
- EXTENDED LIGHTS OUT POJ
- 某项目网站频繁出现503问题解决
- VC生成不依赖高版本msvcrtXX.dll程序之方法一——完全抛弃CRT库
- 正则表达式及爬虫小案例
- 关于CaffeOnSpark 集群效率低下的问题解决方案
- 最小的K个数
- 实用框架收藏
- LInux设备驱动之按键轮询方式的
- 上机练习2 类与对象(3)
- Java中的八种锁
- nginx+keepalived实现主备服务器的高可用
- 记笔记--orm
- 孙志刚:程序员必修的中文MOOC汇总