【问题标题】:Using neural network for automatic software performance tuning使用神经网络进行自动软件性能调整
【发布时间】:2014-03-20 17:58:56
【问题描述】:

我目前正在测试两个不同消息传递系统的性能,并且有许多独立的调整和负载参数会影响消息速率。我想开发一种自动化方法,可以在给定的硬件上产生最大的每秒消息速率。

常数:

  • # of CPUs、内存、网络和其他硬件参数是一个常数(或至少有一个已知的最大值)。
  • 操作系统和消息传递产品的版本是一个常量(例如 WebSphere MQ 7.5)
  • 消息大小
  • 3 分钟完成一次测试测量

期望的结果:

  • 每秒消息的最大速率

变量:

  • 操作系统调整选项(内核、TCP 和其他网络和内存)
  • 消息传递软件调整设置 - 其中有几十个(各种缓冲区大小、线程数、队列管理器数、队列数、客户端的不同类型绑定、安全设置、日志类型、数量和大小日志和数据文件等......)
  • 消息生产者和消费者的数量(例如从 1 到 10,000)

目前,性能调整是作为一个迭代过程完成的 - 一次更改一个变量,测量 msg/sec,冲洗并重复。

我已经开发了一个可以迭代不同设置的脚本框架,但是如果我将其作为一个 50 层深的嵌套循环并迭代每个变量的每个可能值,这个过程将需要数百年才能完成。包括一个随机因素可能会有所帮助,但我想做的是使用神经网络为我的调整变量找到最佳设置。

我发现一些研究论文谈论这种事情,但找不到任何真正的实现。有人做过吗?关于如何进行的任何建议?我没有接触过神经网络,但在大学里做过数学规划(优化),正常的优化方法会花费太长时间来解决这个问题。

【问题讨论】:

  • 我在这里发布了我对 WebSphere MQ 和 ActiveMQ 的性能测试结果,但这还没有实现这种“自动”性能调优的想法——所有调优都是手动完成的:whywebsphere.com/2014/04/02/…跨度>

标签: performance optimization neural-network messaging ibm-mq


【解决方案1】:

这类问题听起来不太适合神经网络。神经网络可能最常用作监督学习的分类器。通常,您必须拥有一个包含已分类示例的训练集。还有一些无监督的方法,最近最引人注目的可能是deep neural networks。但这是一个活跃的研究领域,我怀疑是否有现成的工具可以满足您的需求。

您在参数空间中遇到了组合爆炸的问题。这类问题通常很适合用进化算法来解决。例如genetic algorithmssimulated annealing

借助遗传算法,问题的解决转向寻找

  • 一个很好的问题表示,允许您进行交叉和突变,
  • 一个合适的适应度函数。

这通常被证明是非常困难的。

不过,你的问题似乎很适合这种方法:

  • 个别解决方案表示:参数列表i = [p_1, p_2, ..., p_n]
  • i_1i_2的交叉点:在1n之间选择一个分裂点,交换个人列表的各个部分
  • mutation:选择一个参数并调整它
  • fitness 函数:每秒消息的速率

虽然不能保证您会通过这种方式获得最佳解决方案,但它可以帮助您非常有效地对抗组合爆炸。

【讨论】:

    最近更新 更多