全文共1881字,预计学习时长7分钟

图源:unsplash

毋庸置疑,Python是如今最受欢迎的机器学习语言。虽然机器学习框架使用CUDA C / C ++之类的语言进行实际运算,但它们都提供了Python接口。这也是为什么大多数机器学习从业人员都工作中都使用Python。

而机器学习基础设施——Cortex的代码库88.3%都是Go语言编写的。

图源:Cortex GitHub

大规模部署模型不同于编写调用PyTorch和TensorFlow函数的Python脚本。为了实际大规模运行生产机器学习API,需要基础架构来执行以下操作:

· API管理,以处理多个部署进程。

· 自动缩放,这样流量波动就不会破坏API(并且AWS保持可管理性)。

· 滚动更新,以便更新模型的同时仍然服务于请求。

我们构建了Cortex来提供此功能,并决定在Go语言中进行编写,有以下几个原因:

1.基础设施社区已经接受了Go

我们是软件工程师而不是数据科学家,之所以加入机器学习,是因为想要构建Gmail的智能编写之类的功能,而不是因为对反向传播着迷。

我们希望有一个简单的工具,能够采用经过训练的模型并自动实现所需的所有基础设施(例如可复制的部署,可扩展的请求处理,自动监视等),从而将其部署为API。

尽管还不存在多合一的模型到微服务平台,但我们之前已经在普通软件中实现了所有这些功能。我们知道哪种工具最适合这份工作,以及用什么语言编写。

构建Kubernetes,Docker和Terraform等工具的团队使用Go,是因为它运行很快,可以很好地处理并发程序。它编译为单个二进制文件。选择Go风险相对较低,其他团队也在使用Go来解决类似的问题。

此外,用Go编写可以使基础架构工程师(他们可能已经熟悉该语言)工作起来更容易。

2.在Go中构建跨平台的CLI更容易

我们希望CLI在Linux和Mac上均可使用。最初,我们尝试用Python进行编写,但是用户总是很难让它在不同的环境中工作。当在Go中重建CLI时,可以将其编译为单个二进制文件,可以在各个平台上发布,而无需做太多工程工作。

编译后的Go二进制代码与解释型语言相比,其性能优势也很明显。根据计算机语言基准测试游戏,Go运行得比Python快得多。

因此用Go编写许多其他基础结构CLI(例如eksctl,kops和Helm客户端)也并非偶然。

3.Go解决了与并发和调度相关的问题

管理部署需要许多服务同时并准确地运行。幸运的是,Goroutines,channels和Go的内置计时器和周期性计时器为并发和调度提供了一种巧妙的解决方案。

在较高的层次上,Goroutine是一个正常函数,Go通过在虚拟的独立线程上执行来同时运行。多个Goroutine可以安装在单个OS线程上。channels允许Goroutine共享数据,而内置计时器和周期性计时器允许部署Goroutine。

图源:unsplash

我们在需要时使用Goroutines来实现并发(例如当Cortex需要将多个文件上传到S3,而且并行运行将节省时间),或使可能长时间运行的功能(例如CloudWatch的流日志)不会阻塞主线程。

此外,在Goroutines中使用计时器和代码来运行Cortex的自动缩放器。笔者已经撰写了一份完整的报告,关于如何在Cortex中实现副本级自动缩放,更简略的版本是Cortex计算排队和进行中的请求数,计算每个副本应处理的并发请求数,并适当地扩展。

为此,Cortex的监视功能需要以一致的间隔执行。Go的调度程序可确保其按预期进行监视,而Goroutines允许每个监视功能并行独立地执行每个API。

在Python中实现所有这些功能可以使用asyncio之类的工具。但是,Go让事情变得简单,这对我们来说非常有益。

4. Go有助于建立可靠的基础架构

最后一点,Go可以帮助实现Cortex最重要的功能:可靠性。

可靠性在所有软件中都非常重要,但是对于推理基础架构来说绝对至关重要。Cortex中的漏洞可能会严重影响推理程序。

图源:unsplash

虽然我们对每个发行版都进行了全面的测试,但是Go的静态类型和编译步骤可以初步防止漏洞。如果存在严重的漏洞,则很有可能在编译期间被捕获。对于一个小团队来说非常有帮助。

Go对于漏洞零容忍的特性可能使它比Python更难入门,但是这些内部防护栏是第一道防线,它们有助于避免愚蠢的错误。

使用Python编写脚本,使用Go进行基础架构

Python对我们来说仍然是很重要的,它在Cortex中占有一席之地,尤其是在模型推断方面。

Cortex支持将Python用于模型服务脚本。我们编写的Python将模型加载到内存中,进行推理前/后处理,并处理请求。但是,即使是Python代码也被打包到了Docker容器中,这些容器由Go编写的代码进行编排。

图源:unsplash

Python仍然是数据科学和机器学习工程中最受欢迎的语言。但在机器学习基础架构方面,Go是更好的选择。事实上,除了Python之外,还有更多工具可以生产机器学习系统,等待我们去发现和尝试。

留言点赞关注

我们一起分享AI学习与发展的干货

编译组:顾佳彤、刘露敏

相关链接:https://towardsdatascience.com/why-we-deploy-machine-learning-models-with-go-not-python-a4e35ec16deb

如转载,请私信小芯,遵守转载规范

python 计时器_谁能取代Python?我使用Go来部署机器学习模型的原因相关推荐

  1. go调用python脚本_谁能取代Python?我使用Go来部署机器学习模型的原因

    全文共1881字,预计学习时长7分钟 图源:unsplash 毋庸置疑,Python是如今最受欢迎的机器学习语言.虽然机器学习框架使用CUDA C / C ++之类的语言进行实际运算,但它们都提供了P ...

  2. Python使用模拟退火(Simulated Annealing)算法构建优化器获取机器学习模型最优超参数组合(hyperparameter)实战+代码

    Python使用模拟退火(Simulated Annealing)算法构建优化器获取机器学习模型最优超参数组合(hyperparameter)实战+代码 目录

  3. flask 部署_只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型

    摘要: 一杯茶的功夫部署完成机器学习模型! 在生产环境中部署机器学习模型是数据工程中经常被忽视的领域.网上的大多数教程/博客都侧重于构建.训练和调整机器学习模型.如果它不能用于实际的预测,那么它又有什 ...

  4. 机器学习 部署 嵌入式_如何在移动和嵌入式设备上部署机器学习模型

    机器学习 部署 嵌入式 介绍 (Introduction) Thanks to libraries such as Pandas, scikit-learn, and Matplotlib, it i ...

  5. int是不是python保留字_下面不属于Python保留字的是:

    [填空题]作解剖定位时,家畜前.后肢的后面分别称为( )和( ). [单选题]世界上第一条高速铁路是 [单选题]Z+Z* = ? [单选题]下面不属于Python保留字的是: [单选题]The acc ...

  6. pythoncookbook和流畅的python对比_为什么你学Python效率比别人慢?因为你没有这套完整的学习资料...

    以下资源免费获取方式! 关注!转发!私信"资料"即可免费领取! 入门书籍 1.<Python基础教程>(Beginning Python From Novice to ...

  7. python分布式集群ray_取代Python多进程!伯克利开源分布式框架Ray

    AI 前线导读:Ray 由伯克利开源,是一个用于并行计算和分布式 Python 开发的开源项目.本文将介绍如何使用 Ray 轻松构建可从笔记本电脑扩展到大型集群的应用程序. 更多优质内容请关注微信公众 ...

  8. 零基础学python 视频_全网最全Python视频教程真正零基础学习Python视频教程 490集...

    Python Web开发-进阶提升 490集超强Python视频教程 真正零基础学习Python视频教程 [课程简介] 这是一门Python Web开发进阶课程,手把手教你用Python开发完整的商业 ...

  9. 3 x 10的python表达式_这道数学题用PYTHON编程语言怎么写? 编程语言python是用

    我觉着,这个应该这样解决比较符合计算机解题思路. 下面的回答的,思考的东西太多. # -*- coding: utf-8 -*- __author__ = 'lpe234' __date__ = '2 ...

最新文章

  1. 【观点】“另类”设计模式
  2. C语言中的隐式声明是什么,有什么危害?warning: implicit declaration of function ‘xxx’
  3. 如何在 ASP.Net Core 中使用 MiniProfiler
  4. 部署kafka kafka的service容器和zookeeper kafka客户端 Elasticsearch的客户端
  5. 说干就干的p2psearcher2013
  6. 读取.Properties配置文件
  7. 使用spring最简单地读取properties文件中的内容
  8. 极速office(excel)根据身份证号如何提取年龄
  9. Surface Pro的MicroSDHC卡测速
  10. 【HTML】-- 用户注册表单
  11. Python——文件操作(day11)
  12. C语言编程>第二十二周 ⑥ 请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中。
  13. NOIP5424. 【NOIP2017提高A组集训10.25】凤凰院凶真 LCIS 方案
  14. 讲讲如何写论文和发论文(通信类)
  15. IE 10 SCRIPT5022: InvalidCharacterError错误解决办法
  16. 天九共享:企业成功的重要元素是责任感
  17. 虚拟机virtualbox,直接复制本机虚拟硬盘vdi使用, 会提示错误的解决方法
  18. 接口做的好怎么形容_MLC和TLC的差距大吗?宏旺半导体告诉你国产固态硬盘该怎么选?...
  19. 阿里云 MaxCompute 行业级应用(优酷、斗鱼)及 MaxCompute SQL 调优
  20. 导入maven项目时依赖包报红解决方案

热门文章

  1. Entity Framework 学习中级篇1—EF支持复杂类型的实现
  2. AjaxAtlas技术团队[公告]:请大家清理自己发布在团队页面上的post!
  3. linux 所有邮件地址群发,linux sendmail群发邮件
  4. 答案对程序不对matlab,程序结果不对
  5. python输入10个数字排序案例_介绍十个Python小案例,新手入门就在这里
  6. 8年软件测试工程师感悟:与薪资相匹配的永远是实力
  7. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler
  8. Mongo查询数据库及表占用磁盘大小
  9. 刚入行的测试工程师如何自学软件测试【下篇】-- 软实力
  10. 自动化测试工具Selenium