Skip to main content

配置实验

项目描述

用于配置和探索comb机器学习实验参数的最小包。

comb是一个小而简单的库。comb

  • 快速干净地定义网格搜索和随机搜索,并处理参数依赖关系
  • 向现有项目添加配置选项。现有的模块和包可以变成一个注册表,使 python 类可以通过字符串名称访问和搜索。

对于更复杂的工作流程,像hydra这样的配置包更适合。

安装

comb-pypypi安装:

$ pip install comb-py

并通过导入

import comb

comb除了 python 标准库之外,没有任何依赖项。它适用于python>=3.7.

定义实验 ( comb.sweep)

在你的项目中,直接在python中创建sweeps ─ 在下创建如下文件sweep/my_first_experiment.py

from comb import sweep
from comb.types import zipped, grid

@sweep.register("example-sweep")
class MyExperiment(sweep.Sweep):

    @property
    def script(self):
        return "my/exp.py"

    def get_random_args(self):
        return dict(
            # define a method to sample arguments from
            foo = np.random.choice([42, 73])
        )

    def get_fixed_args(self):
        return dict(
            # zip N dependen arguments together
            bar = zipped("hello", "check out"),
            baz = zipped("world", "comb"),
            # define a search grid (1x2 combinations)
            # over two parameters
            blubb  = grid("star"),
            blubb2 = grid("wars", "treck"),
        )

并使用生成作业列表

$ python -m comb example-sweep
exp.py --bar hello --baz world --blubb star --blubb2 wars --foo 73
exp.py --bar hello --baz world --blubb star --blubb2 treck --foo 73
exp.py --bar check out --baz comb --blubb star --blubb2 wars --foo 73
exp.py --bar check out --baz comb --blubb star --blubb2 treck --foo 73

参数化实验 ( comb.registry)

comb使在您的实验中通过名称参考设计选择变得非常容易。假设您想在机器学习实验中添加一些数据集和损失函数。

通过简单的调用将您的 python 模块包或包转换为注册表comb.registry.add_helper_functions

# datasets.py
from comb import registry
registry.add_helper_functions(__name__)

@register("mnist")
class MNIST(): pass 

@register("svhn")
class SVHN(): pass 


# loss_functions.py
from comb import registry
registry.add_helper_functions(__name__)

@register("mse")
class MeanSquaredError(): pass

@register("infonce")
class InfoNCE(): pass

之后,您可以轻松列出并实例化您的函数:

>>> import datasets
>>> datasets.get_options("*")
mnist svhn
>>> datasets.init("mnist")
MNIST()

安排实验

comb并不试图提供实际启动这些实验的方法——有很多工具更适合于此。仅举几条建议,以下工作流程是可能的:

使用 GNU 并行

通过GNU 并行调度最多 2 个连续作业(可以通过 eg 获得类似的结果xargs):

$ python -m comb bash-example || exit 1 | parallel --jobs 2 'echo Scheduling job {#}; eval {}'

使用 SLURM

通过 slurm 调度作业数组:

mkdir -p submitted
python -m comb bash-example > jobs.lst
num_jobs=$(wc -l jobs.lst)
jobid=$(sbatch -a 1-${num_jobs} --wrap 'job=$(sed -n ${SLURM_ARRAY_TASK_ID}p jobs.lst); srun ${job}')
mv jobs.lst submitted/{jobid}.lst 

执照

comb是根据 MIT 许可证发布的。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

comb-py-0.0.1a0.tar.gz (12.2 kB 查看哈希)

已上传 source

内置分布

comb_py-0.0.1a0-py3-none-any.whl (12.1 kB 查看哈希)

已上传 py3