“如果你有兴趣成为一名机器学习工程师,那么必须熟练掌握Python——但是,如果你对机器学习的基础架构感兴趣,则应该认真考虑Go。”

作者 | Caleb Kaiser

译者 | 弯月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

如今,众所周知Python是机器学习项目中最流行的语言。尽管R、C++ 和Julia等语言都有各自的支持者和使用情况,但Python仍然是使用最普遍的语言,几乎每个主流的机器学习框架都使用了Python。

然而,在我们的Cortex(用于将机器学习模型部署成API的开源平台)代码库中,87.5%的代码都是Go。

Python引以为豪的机器学习算法只是生产机器学习系统的一个组成部分。如果想大规模运行生产机器学习API,你的基础架构需要实现以下功能:

  • 自动缩放,确保流量波动不会影响API。

  • API管理,处理同步API部署。

  • 滚动更新,确保更新模型时不会中断用户服务。

我们构建Cortex的目的是自动化上述所有的基础架构,以及日志记录和成本优化等其他问题。

出于以下原因,我们认为Go才是构建满足上述需求的软件的理想之选。

并发对于机器学习的基础架构至关重要

用户可以将许多不同的模型部署成不同的API,并把所有模型都放到同一个Cortex集群中进行管理。Cortex Operator需要通过一些API来管理这些不同的部署,比如:

  • Kubernetes API,Cortex调用这个API在集群上部署模型。

  • 各种AWS API,包括EC2 Auto Scaling、S3、CloudWatch等,Cortex调用这些API来管理AWS上的部署。

用户不会直接与这些API进行交互。Cortex通过程序调用这些API来管理集群、启动部署和监视API。

以高效、可靠的方式交叉调用这些API是一项难题。采用并发的方式处理这些API调用是最为高效的方式,但同时也带来了复杂性,因为我们不得不担心竞争状况等问题。

Go为解决这个问题提供了一个开箱即用的解决方案:Goroutines。

Goroutines是Go以并发的方式执行代码的函数。我们可以另写一篇文章深入探讨Goroutines背后的工作方式,但概括来说,Goroutines是由Go运行时自动管理的轻量级线程。你可以将多个Goroutine放在一个OS线程上,而且如果Goroutine阻塞了OS线程,则Go运行时会自动将其余的Goroutines移到新的OS线程上。

Goroutines还提供了一种名叫“通道”(channel)的功能,你可以利用这个功能在Goroutines之间传递消息,帮助我们调度请求并防止出现竞争状况。

当然,你也可以利用asyncio等最新的工具在Python中实现这些功能,但Go的设计考虑到了这些情况,使用Go可以减轻我们的工作负担。

使用Go构建跨平台的CLI更容易

Cortex CLI是一个跨平台工具,用户可以使用这个工具直接从命令行部署模型和管理API。

最初,我们使用Python编写了这个CLI,但事实证明,在多个平台上分发这个CLI太困难了。由于Go可以编译成一个二进制文件(不需要管理依赖),所以可以为我们提供了一个简单的解决方案,帮助我们在平台之间分发CLI,而无需额外的工程工作。

Go编译后的二进制文件与解释型语言相比,其性能优势也很明显。根据计算机基准测试结果,Go的速度远胜Python。

许多其他的基础设施CLI工具也是用Go编写的,这绝非偶然,具体的理由请参照下面的第三点。

Go的生态系统非常适合基础设施项目

开源的好处之一在于,你可以向自己欣赏的项目学习。例如,Cortex存在于Kubernetes的生态系统中,而Kubernetes本身也是用Go编写。我们很幸运能够借鉴这个生态系统中许多出色的开源项目,其中包括:

  • kubectl:Kubernetes CLI

  • minikube:一种在本地运行Kubernetes的工具

  • helm:Kubernetes软件包管理工具

  • kops:管理生产Kubernetes的工具

  • eksctl:亚马逊EKS的官方CLI

上述这些工具都是Kubernetes项目,而且都是用Go语言编写的。如果你仔细查看CockroachDB和Hashicorp的基础设施项目(包括Vault、Nomad、Terraform、Consul和Packer),就会发现它们统统是用Go语言编写的。

Go在基础架构领域的流行还有另一个影响,那就是大多数对基础架构感兴趣的工程师都很熟悉Go。所以,很容易吸引到这些工程师。我们公司最优秀的一位工程师就是通过AngelList找到我们的,我们很幸运他找到了我们。

Go语言编程是一种享受

我们使用Go构建Cortex的最后一个理由就是,我们很享受Go语言编程。

相对于Python,Go的入门有点艰难。但是,Go的宽容性可以为大型项目带来愉悦感。我们在测试软件上非常严格,但是静态输入和编译(对于初学者来说Go的两大难题)对我们来说就像是防护栏,帮助我们编写(相对而言)没有bug的代码。

你可能会说其他语言有不同的优势,但总的来说,Go能够最大限度地满足我们的技术和美学需求。

Python适用于机器学习,而Go适用于基础架构

我们也很喜欢Python,它在Cortex中占有一席之地,尤其是在处理推理方面。

Cortex服务于TensorFlow、PyTorch、scikit-learn以及其他Python模型,这意味着与模型的接口以及推理之前和之后的处理均在Python中完成。虽然Python代码经过打包部署到Docker容器中,但这些容器是由Go编写的代码编排的。

如果你有兴趣成为一名机器学习工程师,那么必须熟练掌握Python。但是,如果你对机器学习的基础架构感兴趣,则应该认真考虑Go。

原文:https://towardsdatascience.com/why-were-writing-machine-learning-infrastructure-in-go-not-python-38d6a37e2d76

本文为 CSDN 翻译,转载请注明来源出处。

热 文 推 荐 

☞台积电否认受美国施压去建厂;微信公众号文章可发放定制红包封面;Git v2.25.0 发布 | 极客头条

滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动

☞揭秘 IPython 的 5 种最佳调试方法

别让腾讯“科技向善”太孤独!

☞为什么 k8s 在阿里能成功?| 问底中国 IT 技术演进

☞170个新项目,579个活跃代码仓库,Facebook开源年度回顾

☞掌握 8 种语言、被阿里点赞,这名德国程序员简直开挂了!

☞K8s 实践 | 如何解决多租户集群的安全隔离问题?

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

我们为什么用 Go 编写机器学习架构,却不用 Python?相关推荐

  1. 抛弃Python,我们为什么用Go编写机器学习架构?

    所有参与投票的 CSDN 用户都参加抽奖活动 群内公布奖项,还有更多福利赠送 作者 | Caleb Kaiser 译者 | 弯月,编辑 | 郭芮 来源 | CSDN(ID:CSDNnews) 如今,众 ...

  2. go语言源自python语言_别再用Python编写机器学习基础设施啦,Go语言它不香吗?...

    Go 是一种静态强类型.编译型.并发型且具有垃圾回收功能的编程语言,其优点包括部署简单.并发性好.语言设计良好.执行性能好等等.Python 是机器学习项目中最流行的语言,几乎在每个机器学习项目中都能 ...

  3. 使用Python编写机器学习入门教程

    本文要点 \\ 当输入变量和我们尝试去预测的输出变量之间是线性相关时,或者当解释模型的能力很重要时(例如,隔离任何一个输入变量对于预测的影响),逻辑回归对于二进制分类是比较合适的选择.\\t 决策树和 ...

  4. 从变量到封装:一文带你为机器学习打下坚实的Python基础 By 机器之心2017年10月13日 10:43 本文整体梳理了 Python 的基本语法与使用方法,并重点介绍了对机器学习十分重要的且常

    首先,什么是 Python?根据 Python 创建者 Guido van Rossum 所言,Python 是一个:高级编程语言,其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达 ...

  5. 机器学习和AI的Python基础

    目录 介绍 从哪里获得Python 哪个版本:Python 2或Python 3? 在代码示例中识别Python版本 Python语言基础:类型和变量 结论 下载源-769 B 介绍 当开发人员开始使 ...

  6. 5种方式将机器学习带到Java、Python以及Go等编程语言

    5种方式将机器学习带到Java.Python以及Go等编程语言 机器学习目前炙手可热,本文搜集了Java.Python以及go等编程语言中常见且实用的开源机器学习工具,对机器学习感兴趣的开发者或者准备 ...

  7. 基于“机器学习”智能聊天机器人---python实现(2)

    本博文上接上一篇博文"基于"机器学习"智能聊天机器人---python实现(1)" 博文链接:https://blog.csdn.net/DALEONE/art ...

  8. 资源 | 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)

    编辑 | MingMing 尽管机器学习的历史可以追溯到1959年,但目前,这个领域正以前所未有的速度发展.最近,我一直在网上寻找关于机器学习和NLP各方面的好资源,为了帮助到和我有相同需求的人,我整 ...

  9. 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程

    本文英文出处:Robbie Allen 翻译/雷锋网字幕组 吴楚 校对/ 雷锋网 田晋阳 机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我 ...

最新文章

  1. 在moss页面出错时,显示详细的错误信息.
  2. 1.为什么使用spring boot
  3. python什么是交换算法_python算法-015将链表元素两两交换元素(交换值、就地翻转)...
  4. LeetCode 635. 设计日志存储系统(map)
  5. 物联网(IoT)会是广告欺诈的一道后门
  6. Java Singleton类中的线程安全
  7. 偏微分方程数值解法python_微分方程 | 常微分
  8. VB.net取整和模操作
  9. 关于opencv中图像的坐标原点的区分
  10. ttc、otf、ttf文件制作以及相关数据增强(OCR)
  11. Mysql基础-常用sql语句
  12. php pc无法登录失败,window_win7系统在局域网共享文件提示登录失败用户账户限制的故障原因及解决方法,win7操作系统在局域网共享文件 - phpStudy...
  13. Gym - 100781A Adjoin the Networks (树的直径)
  14. Cisco 3850 Mgmt VRF Configuration
  15. Unity -- UI -- Scroll Rect
  16. poj 2536 Gopher II
  17. C语言:L1-054 福到了 (15 分)
  18. 第十一届蓝桥杯大赛软件类B组省赛题目(2020蓝桥杯)
  19. java 全角_java字符全角半角转换
  20. 电脑右键菜单中没有“打开方式”怎么办

热门文章

  1. 发表email所需要
  2. 论文翻译:U-Net: Convolutional Networks for Biomedical Image Segmentation
  3. 使用 MobaXterm 连接矩池云 GPU服务器
  4. fft qt 代码_最简洁的FFT代码(C++实现)
  5. 男生计算机学校,杭州2021年男生读什么计算机学校
  6. Flutter基础—定位对齐之中心定位
  7. Dart获取系统和硬件信息
  8. 中国酒精拭子市场趋势报告、技术动态创新及市场预测
  9. 军事卫星行业调研报告 - 市场现状分析与发展前景预测
  10. 2021-2025年中国超细氢氧化铝行业市场供需与战略研究报告