使用MCMC进行基准测试分析

benchmcmc的Python项目详细描述


benchmcc-使用MCMC进行基准分析

安装

安装一如既往

pip install benchmcmc

它取决于^{}^{},所以这些也是 安装。在

快速启动

快速入门:

^{pr2}$

第一个命令生成200个合成数据点并将它们放入 bench.txt,第二个命令对数据运行benchmcmc, 显示MCMC的trace plot。在

简介

这个包允许您进行一系列基准数据分析 在某种程度上表现出了变化。在

假设您对每个提交运行基准测试 (例如,循环git-rev-list), 你看到你的表现数据 是(例如每秒请求数或秒数,或其他度量) 具体如下:

13.64
12.82
11.69
15.12
12.30
18.46
13.51
14.33
13.84
12.77
... (180 rows omitted)
10.93
11.02
12.45
11.78
12.12
13.51
10.66
10.18
10.81
12.19

在这个数据中,一开始似乎以13+ε为中心, 就这样结束了 以12+ε为中心,或可视化:

scatterplot of performance over time

在第100点之前,数值似乎略有下降,但是 要准确地确定变化发生在哪里并不容易。在

假设你想知道一开始的表演 最后很可能来自两个不同的分布,如果是这样的话, 其中开关点在哪里。在

traceplot

分析

在数据上运行benchmcmc得到了上面的图,它表明 很可能是从13.5到12.25 第69或75个数据点。在

这有助于您确定性能更改可能发生的时间。在

使用

$ benchmcmc bench.txt --draws 1000 --tune 1000 --cores 4 --target-accept 0.8

可用的选项是上述示例和 所有的东西都被取走和输入 ^{}。在

  • draws-要绘制的样本数。默认值为1000。号码 默认情况下,将丢弃已优化的采样数。在
  • tune-要优化的迭代次数,默认值为1000。采样器 在调谐过程中调整步长、刻度或类似值。调谐 除图纸中指定的数量外,还将抽取样本 参数,将被丢弃。在
  • cores-要并行运行的的数目。如果None,则设置 系统中CPU的数量,但最多4个。在
  • target_accept:float-in[0,1]-步长被调整为 我们估计这个接受率。更高的值,如0.9或0.95 通常对有问题的后人更有效。在

生成合成数据

您可以运行benchmcmc --generate来生成合成基准 数据。在

$ benchmcmc --generate 100153100143[--beta] > benchmarkfile.txt

这将生成200个样本,100个来自N(mu=15, sigma=3),然后是100个 来自N(mu=14, sigma=3)。在

如果使用--beta,则使用 下界,尤其是mu的下限值。在

在历史上运行脚本

假设您想在中的脚本上运行python script.py 你的圣诞树。在

LOGFILE=/tmp/timescript
echo"" > $LOGFILEfor commit in $(git rev-list master)do
    git checkout $commitprintf"%s,""`(git rev-parse --short HEAD)`" >> $LOGFILE
    /usr/bin/time -a -o $LOGFILE --format=%e python script.py
done
tac $LOGFILE

在存储库中运行时,它将以格式输出时间数据

commit,time

以下是输出示例:

484fde8,0.04
58a1cdb,0.04
d26b797,0.04
81f4b9a,0.04
3ae1e11,0.04
7689ca2,0.04
8c76b29,0.04
43db50c,0.04
b34b146,0.04
4c56a54,0.04
9c08050,0.07
b22278d,0.07
7a9c111,0.07
065b6a5,0.07
6cc7cdd,0.07
ec7f042,0.07
b3ba887,0.08
a32ce81,0.07
9136914,0.07
b456714,0.07
504cf73,0.07
8002774,0.07
e1f5f9f,0.09

例如,您可以创建一个脚本gitrun,如下所示:

#!/usr/bin/bashGITRUN_EXEC=$1shiftGITRUN_ARGS=$@for commit in $(git rev-list master)do
  git checkout --quiet $commitprintf"%s,""`(git rev-parse --short HEAD)`"
  sh -c "$GITRUN_EXEC$GITRUN_ARGS"done

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
CentOS上的java Spring Boot简易应用程序需要很长时间才能启动   java如何检查字符串值是否等于null?   收集器中的java映射值。分组方式()   java需要支持Azure AD B2C webapp集成   java如何加入线程以停止它?   java如何使用意图传递类的对象?   java如何在战争环境中发现CDI生产者?   多模块项目中java奇怪的编译器行为   java如何在web应用程序中管理密码?   java从http服务器、filehandler中删除冗余代码   java使用反射来获取泛型类的字段   java Spring MVC/Hibernate/MySQL 400错误请求错误   给定正整数a的java幂为3   在Java中将元素拆分为不同数量的列表?   java展开折叠窗格