根据 CPU 上的批量大小、哈希桶大小、内存等调整 Tensorflow 估计器?

Posted

技术标签:

【中文标题】根据 CPU 上的批量大小、哈希桶大小、内存等调整 Tensorflow 估计器?【英文标题】:Tuning Tensorflow Estimators based on batch size, hash bucket size, memory etc on CPU? 【发布时间】:2019-08-07 03:11:03 【问题描述】:

我们正在测试各种估计器,例如 LinearEstimator、DNNClassifier 等。现在我们仅限于使用 CPU 进行训练,并且我们正在测试参数和杠杆,例如

CPU: 8~32 cpu's 内存:16~48 GB 批处理/缓冲区大小(dataset.batch(n)):n=128~512 哈希bucket_size:10,000 ~ 500,000 线程数:Tensorflow 默认值,应该是逻辑核心数 优化器:GradientDescent、FtrlOptimizer

结果:每秒全局步数 * batch_size 约为 20~50

所以我们通过 Tensorboard 每秒的全局步数 * bucket_size 大约为 20~50,增加 CPU 和内存有其限制。

关于优化器及其配置,我们看到了类似的结果。

我们是否做错了什么,还有其他我们可以使用的杠杆吗?您可以优化模型训练方法的程度是否有限制,我们是否应该转向 GPU 并利用其矩阵乘法效率?

【问题讨论】:

【参考方案1】:

您可以尝试使用 Dataset API 优化您的输入管道。考虑将您的数据转换为 tfrecord,它可以带来实质性的改进。如果您有多个 CPU,则可以设置一个集群。但这在很大程度上取决于您拥有的数据。看看吧

https://www.tensorflow.org/guide/performance/datasets

https://www.tensorflow.org/guide/performance/overview

【讨论】:

以上是关于根据 CPU 上的批量大小、哈希桶大小、内存等调整 Tensorflow 估计器?的主要内容,如果未能解决你的问题,请参考以下文章

Eg挨蒙—Zabbix监控进程占cpu和内存大小及批量监控端口

为啥哈希表在存储桶的数组上使用链表?

你何时会重新连接一个链表?

纯干货 | ES性能调优策略

基于LinkedList实现桶排序

有哪些算法可用于调整哈希表的大小?