全文共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学习与发展的干货

编译组:顾佳彤、刘露敏

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

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

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

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

  2. java运行python脚本_用Java运行Python脚本

    我正在尝试在执行我的java代码期间运行python脚本,因为它将取决于从python脚本接收的输出.到目前为止,我尝试使用jythonc,遗憾的是没有成功,现在我试图使用java Runtime和j ...

  3. 群晖python脚本_群晖、Python、小米摄像头、OneDrive应用案例

    概要: 将"小米摄像头"录制的视频转存至"群晖",在"群晖"上与onedrive同步,同时根据onedrive的 1T空间限制(个人版或家庭 ...

  4. java执行python脚本_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

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

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

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

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

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

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

  8. java执行python脚本_使用Runtime.getRuntime().exec()在java中调用python脚本

    举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...

  9. java调用python脚本_调用Python写vb的脚本方法

    某个项目中涉及到这样一个情景: VB写的原始项目要调用Python的一些方法完成特殊的操作, 那么这就涉及到了,在.Net Framework中如何调用Python的脚本方法. 具体步骤流程如下所示: ...

最新文章

  1. Leetcode 4.28 Tree Easy
  2. 网站建设技术方案_企业网站建设解决方案
  3. MySQL 隐式类型转换导致条件等号的异常
  4. h5 时间控件问题,怎么设置type =datetime-local 的值
  5. Ubuntu: ldconfig(解决*.so不是符号连接)
  6. dbtool一bug跟踪记
  7. 【Spring 工厂】注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载)
  8. 常用linux解压命令(原创)
  9. linux内核奇遇记之md源代码解读之七阵列同步一
  10. systemd(CentOS7)启动zookeeper
  11. 网络防火墙开发二三事
  12. 计算机无法访问网络位置,共享不能访问网络位置的解决方法
  13. 去中心化的联邦学习专栏
  14. 手把手教你:个人信贷违约预测模型
  15. 软件公司绩效考核(大家提提建议)
  16. 游戏中的脚本语言原理与发展
  17. filament 5 Use IBL
  18. excel一个表格分成多个怎么做?
  19. 3星|李笑来《财富自由之路》:标题党,励志书,提到一点投资技巧
  20. css3 3D立体相册实现

热门文章

  1. WPF实现特殊统计图
  2. JavaScript中调皮的undefined
  3. openlayers5学习笔记-001
  4. Linux服务器文件同步(NFS服务)
  5. 含隐变量模型求解——EM算法
  6. 一看就懂ReactJS
  7. Java学习笔记——JDBC读取properties属性文件
  8. WebService远程调试
  9. [转载] 在python中pop的用法_python中pop()函数如何使用
  10. [转载] numpy.base_repr 方法解释