热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

make编译程序指定glibc版本_AllenNLP1.0版本变化

2020年6月17日一大早就看到了github推送的1.0版本更新的通知消息,在历经数个月的版本迭代中,1.0版本终于面世了。相比之前的0.x版本&#x

2020年6月17日一大早就看到了github推送的1.0版本更新的通知消息,在历经数个月的版本迭代中,1.0版本终于面世了。相比之前的0.x版本,此次allennlp在很多方面进行了改动,这里从我个人的使用角度出发,讲解一下版本变动。

https://github.com/allenai/allennlp/releases​github.com

1、将旧库拆分为两个辛苦,allennlp只负责核心逻辑,模型的定义、测试部分拆分到了下述连接

https://github.com/allenai/allennlp-models​github.com

2、Iterators 部分从自定义,转换为兼容Pytorch中的DataLoaders。

好处:效率更高,兼容更好(例如与fastai的兼容)

3、多GPU使用更加高效。旧版本是一个进程,多个GPU,由于GIL的存在会使效率不高。新版本使每个GPU一个进程,这样速度会提升很多。

1547a65ca6f19d26d8eb5db7ef2c013e.png
使用spawn的方式进行多GPU训练

这里有个小问题,N个GPU时如何让每个GPU只分配到 数据/N 那么多的数据呢?

AllenNLP在1.0 prerelease中提到

In addition, if it is important that your dataset is correctly sharded such that one epoch strictly corresponds to one pass over the data, your dataset reader should contain the following logic to read instances on a per-worker basis:

rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
for idx, inputs in enumerate(data_file):if idx % world_size == rank:yield self.text_to_instance(inputs)

4、SingleIdTokenIndexer使用feature_name参数来使用Token中的相应字段。

好处:之前我们想使用Token中的词性字段,需要单独配置PosTokenIndexer,这些其实都是冗余的,此版本将其简化为

feature_name : `str`, optional (default=`"text"`)We will use the :class:`Token` attribute with this name as input. This is potentiallyuseful, e.g., for using NER tags instead of (or in addition to) surface forms as your inputs(passing `ent_type_` here would do that). If you use a non-default value here, you almostcertainly want to also change the `namespace` parameter, and you might want to give a`default_value`.

5、make_vocab命令没了,相同的功能由train中的dry-run参数来实现。

fintuning命令也没了。。。

subparser.add_argument("--dry-run",action="store_true",help="do not train a model, but create a vocabulary, show dataset statistics and ""other training information",)

6、新增BatchCallback与EpochCallback。顾名思义,在每个batch结束或epoch结束后,会调用相应的回调函数做一些事情。

class BatchCallback(Registrable):"""An optional callback that you can pass to the `GradientDescentTrainer` that will be called atthe end of every batch, during both training and validation. The default implementationdoes nothing. You can implement your own callback and do whatever you want, such as savingpredictions to disk or extra logging."""def __call__(self,trainer: "GradientDescentTrainer",batch_inputs: List[List[TensorDict]],batch_outputs: List[Dict[str, Any]],epoch: int,batch_number: int,is_training: bool,is_master: bool,) -> None:passclass EpochCallback(Registrable):"""An optional callback that you can pass to the `GradientDescentTrainer` that will be called atthe end of every epoch (and before the start of training, with `epoch=-1`). The defaultimplementation does nothing. You can implement your own callback and do whatever you want, suchas additional modifications of the trainer's state in between epochs."""def __call__(self,trainer: "GradientDescentTrainer",metrics: Dict[str, Any],epoch: int,is_master: bool,) -> None:pass

7、旧版本的模型保存是保存20个epoch的模型,而现在只保存2个。

. Also, the default for that setting is now2, so AllenNLP will no longer fill up your hard drive!

8、dataloader里不用指定字段了,allennlp会自动推测tokens等预设的字段进行排序

"data_loader": {"batch_sampler" :{"type": "bucket","batch_size": 8,"padding_noise": 0.0}},

除此之外,此次版本发布了一些新的模型、新的交互式的guide、支持通过apex进行16位运算、与transformer库结合更加紧密等等。此外一些jsonnet的配置方式也发生了更新,例如

The way Vocabulary options are specified in config files has changed. See#3550. If you want to load a vocabulary from files, you should specify"type": "from_files", and use the key"directory"instead of"directory_path".

这些都能在github的最新版release中找到,同时相应的配置可以参考

9facb82d3267cba8cf352c1cd44b457d.png
测试配置文件夹下有很多jsonnet配置项。



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有