使用神经网络进行自动软件性能调整

时间:2014-03-20 17:58:57

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

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

常量:

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

期望的结果:

  • 每秒最大邮件数

变量:

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

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

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

我发现一些研究论文谈论这种事情,但找不到任何真正的实施。有人做过吗?有关如何进行的任何建议?我没有使用过神经网络,但是在大学里做过数学编程(优化),正常的优化方法需要很长时间来解决这个问题。

1 个答案:

答案 0 :(得分:3)

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

参数空间中存在组合爆炸问题。这种问题通常非常适合用进化算法求解。例如genetic algorithmssimulated annealing

通过遗传算法,问题解决转向发现

  • 一个很好的问题表示,可以让你做交叉和突变,
  • 合适的健身功能。

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

然而,您的问题似乎非常适合此方法:

  • 个别解决方案表示:参数列表i = [p_1, p_2, ..., p_n]
  • i_1i_2的交叉:选择1n之间的分割点并交换个人列表的各个部分
  • 变异:选择参数并进行调整
  • 适应度函数:每秒消息率

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