微观基准框架。可扩展,支持分布式/集群。

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的版本, numpypandas自动。

frommicrobenchimport*importnumpy,pandasclassBench2(MicroBench,MBGlobalPackages):outfile='/home/user/bench2'bench2=Bench2()

如果您想更进一步,并捕获可用于导入的每个包的版本,那么 混音:

frommicrobenchimport*classBench3(MicroBench,MBInstalledPackages):passbench3=Bench3()
<表><广告>混音 捕获的字段 < /广告><正文>(默认)开始时间
完成时间
函数名mbglobalpackages软件包版本,其中包含全局环境中每个软件包的条目mb安装包包装e_版本,每个可供导入的包都有条目mbfunctioncall参数(位置参数)
kwargs(关键字参数)mbpythonversionpython_version(例如3.6.0)和python_executable(例如/usr/bin/python,应指示任何活动的虚拟环境)mbhostinfo主机名
操作系统mbhostcpucoresCPU核心逻辑(核心数,需要psutil)mbhostramtotalram_total(总ram字节数,需要psutil)mbnvidiasmi各种nvidia gpu字段,详见后面的章节mblineprofiler行配置文件器包含逐行配置文件(请参见下面的部分)

检查结果

每个结果都是一个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,一个要用额外数据扩展的字典。 应注意避免覆盖现有的密钥名。

下面是一个捕获机器类型的示例(i386x86_64等):

pip install microbench
4

redis支持

默认情况下,microbench将输出附加到文件,但输出可以定向 在其他地方,例如,redis-内存中的网络数据源。 当共享文件系统不可用时,此选项非常有用。

redis支持需要redis py

要使用此功能,请从microbenchredis而不是microbench继承, 并指定redis连接和密钥名,如下例所示:

pip install microbench
5

要检索结果,可以直接使用redis包:

pip install microbench
6

反馈

请注意,这是一个最近创建的实验包。请告诉我 您在GitHub问题中的反馈或功能请求。

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

推荐PyPI第三方库


热门话题
.net等效于Java的Swing TableModel?   java将具有相同标记的xml结构解组到不同的字段   JavaSpringDataGemFire:自定义过期示例   设计模式质疑java中工厂函数的使用   文本区域中的swing格式。JAVA   Java:IEEE双倍于IBM浮点   java解析微数据时,我得到的是空值   java如何配置Ebean生成SQLite代码   具有复合工厂或抽象工厂的java工厂   如何使用java中的POI在excel工作表中获取小计   Java中指向整数的指针   java每次都会得到一个新的随机数[Dice Simulator]   javalucene:多线程文档复制   Java不仅使用ArrayList,还创建它(泛型)