进行参数调查的工具箱

paramsurve的Python项目详细描述


准调查

Build StatusCoverageApache License 2.0

paramsurvey是一组用于创建和执行参数调查的工具。在

paramsurvey有一个可插拔的并行后端。目前支持的后端 是python的多处理模块和计算集群软件ray。计划了一个mpi后端。在

示例

import time
import paramsurvey


def sleep_worker(pset, system_kwargs, user_kwargs):
    time.sleep(pset['duration'])
    return {'slept': pset['duration']}


paramsurvey.init(backend='multiprocessing')  # or 'ray', if you installed it

psets = [{'duration': 0.3}] * 5

results = paramsurvey.map(sleep_worker, psets, verbose=2)

for r in results.itertuples():
    print(r.duration, r.slept)
for r in results.iterdicts():
    print(r['duration'], r['slept'])

除了一些调试输出外,还打印5个sleep\u worker调用的结果。在

下面是几个例子:

这些示例与软件包一起安装,因此您可以这样运行它们:

^{pr2}$

哲学

参数调查从初始化软件开始, 指定后端('multiprocessing'或'ray')。在

用户提供一个worker函数,它接受参数的dict (pset)并返回结果的dict。在

用户还提供了一个参数集(psets)列表,也许 使用helper函数paramsurvey.params.product()构造。在

调用pararamsurvey.map()为执行一次辅助函数 每个pset。它返回一个MapResults对象,包含结果, 性能统计信息,以及有关任何故障的信息。在

您可以多次调用paramsurvey.map()。在

init()和map()的关键字参数

paramsurvey代码有一组关键字参数(和相应的环境 变量)以帮助调试和测试。它们是:

  • backend="multiprocessing"——使用哪个后端,当前是“多处理”(默认)还是“ray”
  • verbose=1——打印有关计算进度的信息:
    • 0=不打印
    • 1=每隔30秒打印一次(默认)
    • 2=每秒打印一些内容
    • 3=为每个操作打印内容
  • vstats=1——控制性能统计系统的详细程度,其值类似于verbose
  • limit=0——将实际计算的pset数限制为这个数字(0表示“全部”)
  • ncores=-1——限制使用的核心数,在本例中,比可用的核数少1个(仅限多处理)
  • max_tasks_per_child=3——子级在重新启动之前将执行的任务数。有助于限制内存泄漏。默认值:无限

每一个都有相应的环境变量, e、 g.PARAMSURVEY_BACKENDPARAMSURVEY_VERBOSE。如果环境 变量,它重写源代码中设置的值。如果 kwarg是为map()调用设置的,该值覆盖任何值 为init()调用指定。在

例如,如果您希望通过运行一个小的 它的子集在一个节点上,环境变量允许您 这不需要编辑源代码:

$ PARAMSURVEY_BACKEND=multiprocessing PARAMSURVEY_VERBOSE=3 PARAMSURVEY_LIMIT=10 ./myprogram.py

对于回顾性调试,也就是说,你的运行崩溃了,你很伤心 你在崩溃后指定的详细程度比你想要的要低, paramsurvey在当前目录中为 每次运行,命名为.paramusurvey-DATE-TIME.log。在

后端特定参数

init()map()都使用为后端命名的特定于后端的关键字参数,并且 被其他后端忽略。例如,要传递仅由ray后端使用的参数

paramsurvey.map(..., ray={'num_gpus': 1})

MapResults对象

MapResults对象有几个属性:

  • results是一个Pandas数据帧,包含pset的值和worker函数返回的键。如果你喜欢和字典打交道 并且不担心内存使用,results.to_dict返回字典列表。在
  • failed是失败的psets字典的列表,如果在worker函数中引发了异常,则加上一个额外的''u exception'键。在
  • progress是一个MapProgress对象,其属性包含pset执行的详细信息:total、active、finished、failures、exceptions。在
  • stats是一个包含性能统计信息的PerfStats对象。在

辅助功能限制

worker函数在不同的地址空间中运行,也可能在不同的服务器上运行。 它不应该访问任何全局变量。在

对于难以解释的Python原因,请在前面定义worker函数 正在调用paramsurvey.init()。工作函数不应嵌套 在另一个函数中。在Windows上,主程序文件应该有 一个^{} guard similar to the examples at the top of the Python multprocessing documentation.

安装

$ pip install paramsurvey
$ pip install paramsurvey[ray]

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

推荐PyPI第三方库


热门话题
java为什么JPA规范(包括2.0)或Hibernate扩展不允许您为@Version注释指定生成器,例如Oracle序列   Univocity解析器中特定DecimalFormat的java格式结果集   javanetbeansjavadoc   java Maven概要文件不在子模块中继承   java HTTP 500错误:如何修复我的`dispatcherservlet。xml文件?   java Lucene 2.4.1索引将使用Lucene 6.2.1重新编制索引   java如何使用ManagedServiceFactory服务   java在一行上读取多个字符输入   java轮流挑选端点,试图获得最大值   通过Java/Spring引导连接到Docker Elasticsearch实例   java返回最大元素   java clear recyclerview打开另一个活动的按钮   java何时在JPA中使用一对多或多对一   使用Jersey客户端的JavaHTTPS