当前位置: 首页 > 编程日记 > 正文

PyTorch 1.5发布,与AWS联手推出TorchServe

导读:近日 PyTorch 发布了 1.5 版本的更新,作为越来越受欢迎的机器学习框架,PyTorch 本次也带来了大的功能升级。此外, Facebook 和 AWS 还合作推出了两个重要的 PyTorch 库。

作者 | 神经星星

来源 | HyperAI超神经(ID:HyperAI)

随着 PyTorch 在生产环境中的应用越来越多,为社区提供更好的工具和平台,以便高效地扩展训练和部署模型,也成了 PyTorch 的当务之急。

近日 PyTorch 1.5 发布,升级了主要的 torchvision,torchtext 和 torchaudio 库,并推出将模型从 Python API 转换为 C ++ API 等功能。

除此之外,Facebook 还和 Amazon 合作,推出了两个重磅的工具:TorchServe 模型服务框架和 TorchElastic Kubernetes 控制器。

TorchServe 旨在为大规模部署 PyTorch 模型推理,提供一个干净、兼容性好的工业级路径。

而 TorchElastic Kubernetes 控制器,可让开发人员快速使用 Kubernetes 集群,在 PyTorch 中创建容错分布式训练作业。

这似乎是 Facebook 联手亚马逊,在针对大型性能 AI 模型框架上,宣战 TensorFlow 的一个举措。

TorchServe:用于推理任务

部署机器学习模型进行规模化推理并非易事。开发人员必须收集和打包模型工件,创建安全的服务栈,安装和配置预测用的软件库,创建和使用 API 和端点,生成监控用的日志和指标,并在可能的多个服务器上管理多个模型版本。

上述每一项任务都需要大量的时间,并可能会使模型部署速度减慢数周甚至数月。此外,为低延迟在线应用优化服务是一件必须要做的事情。

此前使用 PyTorch 的开发人员,均缺乏官方支持的部署 PyTorch 模型的方法。而生产模型服务框架 TorchServe 的发布,将改变这一现状,它能够更容易地将模型投入到生产中。

在下面的例子中,将说明如何从 Torchvision 中提取训练过的模型,并使用 TorchServe 进行部署。

#Download a trained PyTorch modelwget https://download.pytorch.org/models/densenet161-8d451a50.pth
#Package model for TorchServe and create model archive .mar filetorch-model-archiver \ --model-name densenet161 \ --version 1.0 \ --model-file examples/image_classifier/densenet_161/model.py \ --serialized-file densenet161–8d451a50.pth \ --extra-files examples/image_classifier/index_to_name.json \ --handler image_classifier
mkdir model_storemv densenet161.mar model_store/
#Start TorchServe model server and register DenseNet161 modeltorchserve — start — model-store model_store — models densenet161=densenet161.mar

TorchServe 的测试版本现已可用,其特点包括:

  • 原生态 API:支持用于预测的推理 API,和用于管理模型服务器的管理 API。

  • 安全部署:包括对安全部署的  HTTPS 支持。

  • 强大的模型管理功能:允许通过命令行接口、配置文件或运行时 API 对模型、版本和单个工作线程进行完整配置。

  • 模型归档:提供执行「模型归档」的工具,这是一个将模型、参数和支持文件打包到单个持久工件的过程。使用一个简单的命令行界面,可以打包和导出为单个「 .mar」文件,其中包含提供 PyTorch 模型所需的一切。该 .mar 文件可以共享和重用。

  • 内置的模型处理程序:支持涵盖最常见用例,如图像分类、对象检测、文本分类、图像分割的模型处理程序。TorchServe 还支持自定义处理程序。

  • 日志记录和指标:支持可靠的日志记录和实时指标,以监视推理服务和端点、性能、资源利用率和错误。还可以生成自定义日志并定义自定义指标。

  • 模型管理:支持同时管理多个模型或同一模型的多个版本。你可以使用模型版本回到早期版本,或者将流量路由到不同的版本进行 A/B 测试。

  • 预构建的图像:准备就绪后,可以在基于 CPU 和 NVIDIA GPU 的环境中,部署T orchServe 的 Dockerfile 和 Docker 镜像。最新的 Dockerfiles 和图像可以在这里找到。

用户也可以从 pytorch.org/serve 获得安装说明、教程和文档。

TorchElastic :集成的 K8S 控制器

当前机器学习的训练模型越来越大,如 RoBERTa 和 TuringNLG,它们向外扩展到分布式集群的需求也变得越来越重要。为了满足这一需求,通常会使用抢占式实例(例如 Amazon EC2 Spot  实例)。

但这些可抢占实例本身是不可预测的,为此,第二个工具 TorchElastic 出现了。

Kubernetes 和 TorchElastic 的集成,允许 PyTorch 开发人员在一组计算节点上训练机器学习模型,这些节点可以动态地变化,而不会破坏模型训练过程。

即使节点发生故障,TorchElastic 的内置容错功能也可以暂停节点级别的训练,并在该节点再次恢复正常后恢复训练。

TorchElastic 的内置容错能力支持断点续传

此外,使用带有 TorchElastic 的 Kubernetes 控制器,可以在硬件或节点回收时问题上,在被替换了节点的集群上,运行分布式训练的关键任务。

训练任务可以使用部分被请求的资源启动,并且可以随着资源可用而动态扩展,无需停止或重新启动。

要利用这些功能,用户只需在简单的作业定义中指定训练参数,Kubernetes-TorchElastic 软件包便可以管理作业的生命周期。

以下是用于 Imagenet 训练作业的 TorchElastic 配置的简单示例:

apiVersion: elastic.pytorch.org/v1alpha1kind: ElasticJobmetadata:name: imagenetnamespace: elastic-jobspec:rdzvEndpoint: $ETCD_SERVER_ENDPOINTminReplicas: 1maxReplicas: 2replicaSpecs:Worker:replicas: 2restartPolicy: ExitCodetemplate:apiVersion: v1kind: Podspec:containers:- name: elasticjob-workerimage: torchelastic/examples:0.2.0rc1imagePullPolicy: Alwaysargs:- "--nproc_per_node=1"- "/workspace/examples/imagenet/main.py"- "--arch=resnet18"- "--epochs=20"- "--batch-size=32"

微软、谷歌,就问你们慌不慌?

这次两家合作推出全新 PyTorch 库的操作,其背后也许有着更深层的意义,因为「不带你玩」这个套路,在框架模型发展的历史上,已不是第一次出现。

2017 年 12 月,AWS、Facebook 和微软宣布,他们将共同开发可用于生产环境的 ONNX ,以此来对抗谷歌 TensorFlow 对工业界使用的垄断。

随后 Apache MXNet 、Caffe2、PyTorch 等主流深度学习框架,都对 ONNX 实现了不同程度的支持,这方便了算法及模型在不同的框架之间的迁移。

AWS、Facebook 和微软当初欲用 ONNX 一统框架江湖

而 ONNX 想打通学术界和产业界的愿景,实际上并没有达到当初的预期,各家框架依然用各自的服务体系,基本上只有 MXNet 和 PyTorch 深入到了 ONNX。

而如今,PyTorch 推出了自己的服务体系,ONNX 则近乎失去了存在的意义(MXNet 表示不知所措)。

另一方面,PyTorch 在不断的升级更新之下,框架的兼容性和易用性,正在逼近甚至赶超最强劲的对手 TensorFlow。

虽然谷歌有自己的云服务和框架,但 AWS 的云资源和 Facebook 的框架体系联合,强强联手之下,恐怕谷歌也将难以招架。

而微软已经被曾经 ONNX 三人组的两个小伙伴踢出群聊,下一步不知做何打算?


推荐阅读

  • 如何通过深度学习,完成计算机视觉中的所有工作?

  • Go后台项目架构思考与重构 | 深度长文

  • 黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下

  • 阿里“去 IOE”十二年,弹性计算如何二次去 I 和 E?

  • 5分钟!就能学会以太坊 JSON API 基础知识

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

更改时区,时间

整更改ubuntu时区,时间,localePublished by 笨二十一 at 11:56 上午 under Linux/Unix,服务器更改时区,时间执行tzselect按照提示进行选择时区sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime执行sudo ntpdate cn.pool.ntp.orgcn.pool.ntp.org是位于中国…

throttle与debounce的区别

前几天看到一篇文章,我的公众号里也分享了《一次发现underscore源码bug的经历以及对学术界拿来主义的思考》具体文章详见,微信公众号:文中讲了大家对throttle和debounce存在误解,同时提到了《高程3》中实现节流方法存在一些问题&a…

Spring源码分析【0】-框架的基础:继承和接口调用链

Spring源码大量的使用继承和接口调用,现举个例子,不搞清楚这个无法看代码。 public class A extends B{public void f1() {System.out.println("f1 in a");} }public abstract class B extends C {protected abstract void f1();protected Str…

华人计算机视觉科学家黄煦涛逝世,众多AI大牛发文缅怀

当地时间2020年4月25日,华人计算机科学家黄煦涛教授在美国印第安纳州逝世,享年84岁。黄煦涛教授主要从事教学与图像处理、模式识别、计算机视觉和人机交互等方面的研究工作,一生出版了 14 本书,发表了 400 多篇学术论文。在学术研…

七年之痒,再见理想

不确定“再见理想”是“再见了,理想”还是“再次燃起理想”,稀里糊涂地对这句话有感觉。作为程序员,总会有自己的技术价值观和技术理想。工作七年多,开始痒了。 程序员的生活总是喜忧参半,出入体面的写字楼&#xff0c…

HTML5学习笔记二 HTML基础

一、HTML 标题 HTML 标题&#xff08;Heading&#xff09;是通过<h1> - <h6> 标签来定义的. <h1>标题一</h1> <h2>标题二</h2> <h3>标题三</h3> 二、HTML 段落 HTML 段落是通过标签 <p> 来定义的. <p>亲吻你的手还…

程序员感叹一年只能存下15万太少了……网友:潸然泪下

最近有程序员网友晒出自己的年终奖&#xff0c;税后高达15.7万&#xff01;看到这个情形&#xff0c;很多网友表示自己“被打鸡血了”。他强调学习的重要性&#xff0c;学习仍然是在这个时代下&#xff0c;普通人能够逆袭&#xff0c;给家人更好生活的一把利器&#xff01;今天…

Spring源码分析【2】-Tomcat和Sping的连接点

Tomcat是怎么调用上Spring的呢&#xff1f;需要找到这个连接点。 答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法 new WebappServiceLoader() 回到processServletContainerInitializers 进入org.apache.catalina.startup.Weba…

优化数据库的方法及SQL语句优化的原则

优化数据库的方法&#xff1a; 1、关键字段建立索引。 2、使用存储过程&#xff0c;它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。&#xff08;可以用Sybase的SQL Expert&#xff0c;可惜我没找到unexpired的序列号&#xff09; 5、清理删…

各大浏览器 CSS3 和 HTML5 兼容速查表

2019独角兽企业重金招聘Python工程师标准>>> 不知不觉中&#xff0c;支持 CSS3 和 HTML5 的浏览器变得越来越多&#xff0c;甚至包括最新版的 IE&#xff0c;当然&#xff0c;所谓支持仅仅是部分支持&#xff0c;因为 CSS3 和 HTML5 的W3C 规范都尚未形成。如果你现…

Spring源码分析【1】-Tomcat的初始化

org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig.webConfig() 进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers processServletContainerInitializers参考&#xff1a;Spring源…

360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访

「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈&#xff0c;反映其对于行业的思考、未来趋势判断、技术实践&#xff0c;以及成长经历。 本文为 「AI 技术生态论」系列访谈第21期&#xff0…

Delphi 正则表达式语法(3): 匹配范围

// [A-Z]: 匹配所有大写字母var reg: TPerlRegEx; begin reg : TPerlRegEx.Create(nil); reg.Subject : CodeGear Delphi 2007 for Win32; reg.RegEx : [A-Z]; reg.Replacement : ◆; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ode◆ear ◆elphi 200…

基础算法整理(1)——递归与递推

程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&…

php正则表达式函数 preg_replace用法

preg_replace (PHP 3> 3.0.9, PHP 4 ) preg_replace -- 执行正则表达式的搜索和替换说明 mixedpreg_replace( mixed pattern, mixed replacement, mixed subject [, int limit])在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit&#xff0c;则…

面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

最近几年&#xff0c;Python莫名火了起来&#xff0c;很多公司都想赶上这“莫名”的热潮&#xff0c;招聘到大牛人才。但是&#xff0c;最近一个HR在社交网站的吐槽又火了&#xff1a;那么问题来了&#xff0c;市面上为什么鲜有企业满意的优秀的Python程序员&#xff1f;企业到…

Spring源码分析【5】-Spring MVC处理流程

org.apache.catalina.core.ApplicationFilterChain.doFilter 获取Filter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter org.springframework.web.filter.DelegatingFilterProxy.doFilter invokeDelegate org.springframework.security.web.FilterCha…

Mysql——外键

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;外键 外键&#xff1a;foreign key&#xff0c;&#xff08;外边的键&#xff0c;键不在本表中&#xff09;&#xff1a;如果一张表中有一个字段&#xff08;非主键&#xff09;指向另一张表的主键&#x…

揭开「拓扑排序」的神秘面纱

作者 | 小齐本齐责编 | Carol来源 | 码农田小齐Topological sort 又称 Topological order&#xff0c;这个名字有点迷惑性&#xff0c;因为拓扑排序并不是一个纯粹的排序算法&#xff0c;它只是针对某一类图&#xff0c;找到一个可以执行的线性顺序。这个算法听起来高大上&…

Spring源码分析【6】-ThreadLocal的使用和源码分析

Spring代码使用到了ThreadLocal java.lang.ThreadLocal.set getMap java.lang.Thread.threadLocals定义 回到set 如果map为null 则createMap

《软件的破解》

本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的&#xff0c;根据我自己的学习经历&#xff0c;如果你直接照着很多破解教程去学习的话&#xff0c;多半都会把自己搞得满头的雾水&#xff0c;因为有很多的概念要么自己不是很清楚&#xff0c;…

php级别鉴定

一、PHP初级程序员薪资水平&#xff1a;4000.00--8000.00&#xff08;RMB/月&#xff09;~HTML设计与应用~DIVCSS~PHP基础~MySQL基础~PHP高级~CMS系统二、PHP中级程序员 薪资水平&#xff1a;8000.00--12000.00&#xff08;RMB/月&#xff09;~PHP面向对象~MySQL高级~Smarty模板…

Spring源码分析【7】-Spring 模板页和JSP文件的编译

org.apache.jasper.servlet.JspServletWrapper.service org.apache.jasper.JspCompilationContext.compile org.apache.jasper.JspCompilationContext.createCompiler org.apache.jasper.compiler.Compiler.isOutDated 判断文件是否存在 ..\Apache\apache-tomcat-8.0.36\w…

Distinction Between Strategy and Decorator

首先看Strategy和Decorator在GoF的《Design Patterns》的intent Decorator (1)intent: Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality. (2)UML Diagram: Strategy (1)i…

我竟然混进了Python高级圈子!

现如今&#xff0c;计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章&#xff0c;还是要参与相关任务&#xff0c;你马上就会遇到一些拦路虎&#xff1a;想过滤垃圾邮件&#xff0c;不具备概率论中的贝叶斯思维恐怕不行&#xff1b;想试…

unity3d中旋转

自转是Rotate&#xff0c;绕转是RotateAround&#xff0c;LookAt旋转物体自身&#xff0c;使其正面朝向目标点以上操作都在transform中完成转载于:https://blog.51cto.com/568464209/1764050

Java常用方法

1. 把Strings转换成int和把int转换成StringString a String.valueOf(2); //integer to numeric string int i Integer.parseInt(a); //numeric string to an int String a String.valueOf(2); //integer to numeric stringint i Integer.parseInt(a); //numeric string …

request.getSession(false)到底返回什么

HttpSession session request.getSession(false); 很明显传false如果session不存在返回Null。

洞察疫情,微软推出新冠数据分析网站COVID Insights

来源 | 微软研究院AI头条COVID Insights 网站功能亮点持续数月的新冠疫情一路肆虐、席卷全球&#xff0c;世界各地的科研人员都在为此奋战&#xff0c;希望通过最先进的技术逐步揭开新冠病毒的神秘面纱。近日&#xff0c;微软亚洲研究院的研究人员基于在计算生物学、数据分析等…

LINUX 查找tomcat日志关键词

#查询catalina.out日志文件中的关键词为2016-04-13 11:26:00的日志信息grep -C 10 2016-04-13 11:26:00 catalina.out |more解释&#xff1a;grep &#xff1a;查询&#xff0c;筛选-C &#xff1a; grep的-A, -B, -C选项分别可以显示匹配行的后,前,后前多少行内容:10 &#xf…