lightex:光实验经理

lightex的Python项目详细描述


实验

Lightex

lightex是一个轻量级的实验框架,用于创建、监视和记录机器学习实验。针对个别数据科学家、研究人员、小型团队,以及一般资源受限的实验。与所有机器学习框架兼容。

项目状态:alpha

与大多数实验框架不同,lightex采用模块化、高度可配置的设计:

  • 调度程序:使用进程docker容器或kubernetes播客运行实验。通过对配置的细微更改无缝地切换模式。
  • mulogger:使用统一的api将度量和工件记录到多个记录器后端。支持mlflowtensorboardtrains-添加新的记录器就像插件
  • namedconf:基于pythondataclass的灵活和统一的作业、参数和模型架构的配置规范。配置实例名为,可以在本地修改
  • qviz:查询、比较和可视化实验结果。

使用项目目录中的配置文件lxconfig.py指定实验的运行环境和参数。在执行一系列实验时,动态地修改、继承和创建名为的新配置实例。

在这里了解有关ml实验框架的解剖学的更多信息。

好处

从基本的traineval项目开始。几分钟后,

  • 将系统日志(多个记录器)和可视化引入您的项目
  • 从运行单个实验转到多个参数化实验,例如,
    • 在一组超参数上进行多次训练。
    • 多个有效网络或bert列车或评估运行。
    • 并行搜索多个结构的神经结构。

安装

< Buff行情>

pip安装-u lightex

快速启动

假设我们有一个现有的trainproject:run trainer with

< Buff行情>

train.py—数据目录/data—lr 0.1—隐藏尺寸512

在主项目目录中,初始化lightex-这将创建文件lxconfig.pyrun-expts.py

< Buff行情>

lx初始化

文件lxconfig.py包含用于指定命名的实验配置的预定义数据类。

  • 主(控制器)类config包含三个字段:erhprun(见下文)。
  • config还包括一个get_experiments函数,该函数生成要由调度器执行的实验配置列表。有关定义的数据类的完整说明,请参见config.md
@dataclassclassConfig:er:Resources#(Logger, Storage resources)hp:HP#(Hyper-parameters of model, training)run:Run#(Run-time config)defget_experiments(self):#required: generate a list of experiments to runexpts=[Experiment(er=self.er,hp=self.hp,run=self.run)]returnexpts

用实际参数实例化类hp,并运行类run用占位符模拟命令。

cmd="python train.py --data-dir {{run.data_dir}} --lr {{hp.lr}} --hidden_dim {{hp.hidden_dim}}"#placeholders refer to fields of Experiment instanceRu1=Run(cmd=cmd,experiment_name="find_hp")H2=HP(lr=1e-2,hidden_dim=512)C1=Config(er=R1,hp=H1,run=Ru1)#er defined elsewhere

定义名为c1的配置后,按如下方式运行实验:

< Buff行情>

python run_expts.py-c c1

就这样!现在,您的实验、日志、度量标准和模型被系统地组织和记录。

修改实验参数,实验T组

使用replace快速修改以前实验的配置并运行新实验。

示例:创建一个新的hp实例,并将其替换为c1以创建一个新的config。也支持递归替换。

H2=HP(lr=1e-3,hidden_dim=1024)C2=replace(C1,hp=H2)#inherit er=R1 and run=Ru1
< Buff行情>

python run_expts.py-c c2

要指定并运行实验组,请在ahpgroup中指定一组hps(请参见scripts/lxconfig.py)。

注意:尽管lightex预先定义了数据类的层次结构,但它允许开发人员在定义类的各个字段,特别是hp类的字段时有很大的灵活性。

将日志记录添加到代码中

使用统一的多记录器API将度量和工件记录到多个记录器后端。

fromlightex.muloggerimportMLFlowLogger,MultiLogger,PytorchTBLoggerlogger=MultiLogger(['mlflow','trains'])logger.start_run()# log to trains onlylogger.log('trains',ltype='hpdict',value={'alpha':alpha,'l1_ratio':l1_ratio})# log to mlflow onlylogger.log('mlflow',ltype='scalardict',value={'mae':mae,'rmse':rmse,'r2':r2},step=1)# log to alllogger.log('*',ltype='scalardict',value={'mae':mae,'rmse':rmse,'r2':r2},step=3)# log scalars and tensors, if supported by the logger backendlogger.log('trains',ltype='1d',name='W1',value=Tensor(..),histogram=True,step=4)logger.end_run()

或者,直接使用现有记录器的api。

logger=MLFlowLogger()mlflow=logger.mlflow# call mlflow APIlogger=PytorchTBLogger()writer=logger.writer#call tensorboard's API

注意:除了日志记录中的更改外,不需要对现有代码进行任何更改!

切换到Docker

在这里设置lxconfig实例是值得的!

现在,将dockerfile添加到您的项目中,该项目将构建包含所有项目依赖项的运行时环境。在resourcesconfig中更新build实例。请参见示例/sklearn,例如。

< Buff行情>

python run_expts.py-c c2-e docker

您的代码和数据都安装在容器上(不涉及复制)-开发周期中的中断最小。

高级功能

更多高级功能正在开发阶段。

修改、添加记录器

Lm=MLFlowConfig(client_in_cluster=False,port=5000)L=LoggerConfig(mlflow=Lm)fromlightex.mulogger.trains_loggerimportTrainsConfigL.register_logger('trains',TrainsConfig())R1=Resources(build=...,storage=...,ctr=...,loggers=L)

正在开发更多的记录器和更好的插件系统。

在多个节点/服务器上运行实验

如果您已经设置了dockerswarmkubernetes集群,对现有配置实例的一些更改允许更改底层的实验调度器。

我们需要虚拟化代码(通过添加到dockerfile)和存储。

在节点上创建共享nfs。将存储配置切换到nfs分区。将添加设置脚本。

设置摘要

总之,lightex涉及以下一次性设置:

  • lxconfig.py中配置值
  • 设置后端记录器服务器(仅需要这些服务器)。这里有说明。(可选)
  • 更新代码中的日志记录调用以调用muloggerapi。(可选)
  • 项目的Dockerfile,如果要使用容器进行分派。(可选)

虽然开始使用lightex很快,但最好花点时间理解配置模式

依赖关系

python>;3.6(需要安装过程中包含的数据类

设计挑战

  • 实验管理器设计的一个重要部分是建立和传播一个巨大的配置变量网络。
    • 这里没有最佳选择:jsonyamljsonnet-所有格式都有问题。
    • 使用dataclasses,我们可以编写复杂的配置规范,具有内置继承和执行本地更新的能力。这里有一点学习曲线,绑定到python,但是我们获得了很多灵活性。
  • 一个统一的muloggerapi来抽象多个日志后端的api。
  • 使用类似的api设计多个分派器,启用容器和各种存储选项。
  • 阅读有关挑战的更多信息,请点击此处

参考文献

目前(2019年7月底)大多数工具都专注于logger组件,并提供选择性的qviz组件。kubeflowpolyaxon绑定到(k8s)调度程序。每个工具都有自己的配置管理版本——主要是基于yaml的,配置类型不存在或者有一个非嵌套的配置类。还提出了特定于配置的语言(ksonnet、sonnet、gin)。

又一个实验框架?

对于数据科学家来说,系统的实验工具是必不可少的。不幸的是,许多现有的工具(kubeflowmlflowpolyaxon)过于单一,首先是kubernetes,然后是cloud-first,目标受众非常多样化,因此传播范围太窄,但缺乏重要的开发友好特性。神圣的设计是紧密耦合的,需要对主代码进行几个特定的更改(计划将神圣的记录器添加为后端)。其他工具只处理特定的任务,例如,tensorboard只处理日志记录和可视化。此外,对比不同的实验框架也很困难:没有标准化的机器学习expt管理架构,大多数开源框架都在经历一个临时需求发现的过程。

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

推荐PyPI第三方库


热门话题
将中心面板添加到“我的内容”窗格时,java GUI对象消失   java无法更新oracle中的clob字段   php Linux+动态插入的Java小程序=在NPObject上调用方法时出错   java JVisualVM探查器代理jar已加载,但代理初始化失败   java Android在运算符和TextView值方面存在问题   用于OpenPGP智能卡小程序的rsa解密APDU   Java GUI按钮不会添加到面板中   java找不到移动图像(或其他可单击对象)的方法   java中Do/While循环的问题   多线程使java程序在没有线程的情况下休眠   java如何在Webflux功能端点的测试中禁用Spring安全性   如果存在后退历史记录,则java WebView仅显示后退按钮   通过USB将Arduino中显示的java错误数据传输到Android   java如何使用安卓 studio从4层父节点firebase获取子节点数据   jpanel中JLabel的java搜索栏   来自gallery/camera的java Android图像预览不同