微观基准框架。可扩展,支持分布式/集群。
microbench的Python项目详细描述
微生物群落
microbench是一个小的python包,用于对python函数进行基准测试,并且 可以选择捕获额外的运行时/环境信息。它在 集群/分布式环境,其中相同的功能在不同的 环境,并设计为可扩展 功能。除了基准测试,这还可以通过 例如,记录关键python包的版本,甚至记录加载的所有包 进入全球环境。
要求
默认情况下,microbench在python标准之外没有依赖项 库,尽管建议 检查结果。但是,有些mixin(扩展)有特定的要求:
- 测线探查器 需要为逐行代码基准测试安装程序包。
mbinstalledpackages
需要setuptools
,它不是 标准库,但通常可用。- CPU核心和总RAM扩展需要 psutil
- nvidia gpu插件需要
nvidia SMI
实用程序,通常与nvidia图形卡驱动程序一起提供。它需要
在您的
路径上
安装
要使用pip安装:
pip install microbench
用法
microbench是为基准测试python函数而设计的。这些例子将 假设您已经定义了一个python函数 基准:
defmyfunction(arg1,arg2,...):...
最小示例
首先,创建一个基准测试套件,它指定配置和 要捕获的信息。
下面是一个简单、完整的示例:
frommicrobenchimportMicroBenchbasic_bench=MicroBench()
要将基准附加到函数,只需使用 装饰工,像这样:
@basic_benchdefmyfunction(arg1,arg2,...):...
就这样!基准信息将附加到中指定的文件
输出文件
。此示例捕获字段开始时间
,完成时间
和
函数名
。有关详细信息,请参见"检查结果"部分。
扩展示例
下面是一个使用mixin的更完整的示例(前缀类
名称)以扩展功能。注意,可以提供关键字参数
到构造函数(在本例中some_info=123
)来指定附加的
要捕获的信息。此示例还指定了outfile
选项,
其中写入conda
frommicrobenchimport*importnumpy,pandasclassMyBench(MicroBench,MBFunctionCall,MBPythonVersion,MBHostInfo):outfile='/home/user/my-benchmarks'capture_versions=(numpy,pandas)# Or use MBGlobalPackages/MBInstalledPackagesenv_vars=('SLURM_ARRAY_TASK_ID',)benchmark=MyBench(some_info=123)
上面示例中的env_vars
选项指定一个环境列表
要捕获为env<;variable name>;
的变量。在这个例子中,
数组任务id将存储为
env_slurm_array_task_id
。如果未设置环境变量,则
值将为null
要捕获包版本,可以单独指定它们(如上所述),也可以捕获
全球环境中的每一个包裹。在下面的示例中,我们将捕获microbench
的版本,
numpy
和pandas
自动。
frommicrobenchimport*importnumpy,pandasclassBench2(MicroBench,MBGlobalPackages):outfile='/home/user/bench2'bench2=Bench2()
如果您想更进一步,并捕获可用于导入的每个包的版本,那么 混音:
frommicrobenchimport*classBench3(MicroBench,MBInstalledPackages):passbench3=Bench3()<表><广告>
开始时间
完成时间
函数名
软件包版本
,其中包含全局环境中每个软件包的条目包装e_版本
,每个可供导入的包都有条目参数
(位置参数)kwargs
(关键字参数)python_version
(例如3.6.0)和python_executable
(例如/usr/bin/python
,应指示任何活动的虚拟环境)主机名
操作系统
CPU核心逻辑
(核心数,需要psutil
)ram_total
(总ram字节数,需要psutil
)行配置文件器
包含逐行配置文件(请参见下面的部分)检查结果
每个结果都是一个json对象。使用时
outfile
选项,每个@benchmark
调用的json对象存储在
在文件中分开一行。上述最小示例的输出
单次运行将类似于以下操作:
{"start_time":"2018-08-06T10:28:24.806493","finish_time":"2018-08-06T10:28:24.867456","function_name":"my_function"}
详细检查结果的最简单方法是将结果加载到 熊猫数据框:
importpandasresults=pandas.read_json('/home/user/my-benchmarks',lines=True)
熊猫有强大的数据处理能力。例如,计算 python版本的平均运行时间:
pip install microbench
0
有许多更高级的操作可用。这个 熊猫教程 建议使用。
测线轮廓仪支持
microbench还支持显示执行时间的line profiler
每行python代码。请注意,这会减慢代码的速度,因此只有在需要时才使用它,但它对于
发现函数中的瓶颈。需要安装line\u profiler
包
(例如pip install line\u profiler
)。
pip install microbench
1
上一个示例的最后一行将打印LineProfiler报告,显示 代码。例子:
pip install microbench
2
NVIDIA GPU支持
有关nvidia gpu的属性可以使用mbnvidiasmi
插件捕获。
这需要在当前路径中提供nvidia smi实用程序。
默认情况下,GPU名称(型号)和内存属性为
捕获。可以使用类或对象级别指定额外的属性
变量nvidia属性。要查看哪些属性可用,请运行
nvidia smi--帮助查询GPU
默认情况下,将轮询所有已安装的GPU。要限制到特定的GPU,
将nvidia-gpu属性指定为gpu id的元组,可以是
基于零的GPU索引(可以在重新启动之间更改,不建议这样做)
GPU Uuid或PCI总线ID。你可以通过运行
nvidia smi-l
下面是一个指定可选的nvidia属性的示例
nvidia\u GPU
字段:
pip install microbench
3
扩展微生物群落
microbench包含一些用于基本功能的mixin,如 上面的扩展示例。
您还可以将函数添加到基准测试套件中以捕获
运行时的额外信息。这些函数的前缀必须是capture
使它们在函数启动之前自动运行。他们采取
一个参数,
bm_data
,一个要用额外数据扩展的字典。
应注意避免覆盖现有的密钥名。
下面是一个捕获机器类型的示例(i386
,x86_64
等):
pip install microbench
4
redis支持
默认情况下,microbench将输出附加到文件,但输出可以定向 在其他地方,例如,redis-内存中的网络数据源。 当共享文件系统不可用时,此选项非常有用。
redis支持需要redis py
要使用此功能,请从microbenchredis而不是microbench继承, 并指定redis连接和密钥名,如下例所示:
pip install microbench
5
要检索结果,可以直接使用redis
包:
pip install microbench
6
反馈
请注意,这是一个最近创建的实验包。请告诉我 您在GitHub问题中的反馈或功能请求。