Go 是一种静态强类型、编译型、并发型且具有垃圾回收功能的编程语言,其优点包括部署简单、并发性好、语言设计良好、执行性能好等等。Python 是机器学习项目中最流行的语言,几乎在每个机器学习项目中都能见到它的身影。最近,Cortex Labs 介绍了团队用 Go 而非 Python 编写机器学习基础设施的原因,其重点内容如下。

最近,我们构建了一个将机器学习模型部署为 API 的开源平台—— Cortex,我们考虑了很久应该如何选择编程语言,而最终的结果是代码库中 87.5% 用了 Go。经过一番比较,我们认为:Python 适用于机器学习,而 Go 适用于基础设施。

Python 所擅长的机器学习算法只是生产机器学习系统的组成部分之一。要大规模运行生产机器学习 API,你需要实现如下功能的基础设施:可自动伸缩,以便在发生流量波动时不会中断 API。

API 管理,用于处理同时部署的 API。

滚动更新,以便在为用户提供服务的同时更新模型。

Cortex 的构建旨在自动化实现所有这些基础设施的功能,以及其他关注点,如日志记录、成本优化等。Go 是满足这些因素的理想选择,原因有以下四点。

1. 并发性对机器学习基础设施至关重要

用户可以将许多不同的模型部署为不同的 API,所有这些 API 都在同一个 Cortex 集群中进行管理。为了让 Cortex Operator 管理这些不同的部署,它需要处理几个不同的 API。比如 Kubernetes API,Cortex 调用该 API 在集群上部署模型。再比如各种 AWS API,Cortex 调用这些 API 来管理 AWS 上的部署。

用户并不直接与这些 API 中的任何一个进行交互。相反,Cortex 是通过编程方式调用这些 API 来进行配置集群、驱动部署和监控 API 的。

要使所有这些重叠的 API 调用具有可执行性、可靠性是一个挑战。最有效的处理方式,是对它们进行并发处理,但这同时也引入了复杂性,因为我们必须考虑竞争条件之类的问题。

对于这一问题,如果要在 Python 中实现所有这些功能,可以用 Asyncio 之类的最新工具来实现,但 Go 在设计时就考虑到了这个用例,这点让我们的工作变得更轻松。

Go 有一个优雅的、开箱即用的解决方案:Goroutines。它是由 Go 运行时自动管理的轻量级线程,许多 Goroutines 可以放在单个 OS 线程上,如果 Goroutines 阻塞了一个 OS 线程,Go 运行时会自动将其余的 Goroutines 转移到新的 OS 线程上。Goroutines 还提供了称为“通道”的特性,允许 Goroutines 在它们之间传递消息,还允许我们调度请求并防止出现竞争条件。

2. 用 Go 来构建跨平台的 CLI

更容易Cortex CLI 是一个跨平台的工具,允许用户直接从命令行部署模型和管理 API。

最初,我们用 Python 编写 CLI,但事实证明,试图跨平台进行分发实在是太困难了。因为 Go 可以编译成单一的二进制文件,不需要依赖管理,这就为我们提供了一个简单的解决方案,可以做到跨平台进行分发 CLI,而不需要做太多额外的工程计划。

与解释性编程语言相比,编译后的 Go 二进制代码的性能优势也非常显著。根据计算机基准测试的结果来看,Go 要 比 Python 快得多。

3. Go 语言的生态系统有利于推动基础设施项目

开源的好处之一,就是你可以从你欣赏的项目中学习。例如,Cortex 存在于 Kubernetes(它本身就是用 Go 编写的)生态系统中。很幸运的是,在我们这个生态系统中,有许多伟大的开源项目可供学习,包括:kubectl:Kubernetes 的 CLI

minikube:本地运行 Kubernetes 的工具

helm:Kubernetes 的包管理器

kops:管理生产 Kubernetes 的工具

以上这些都是用 Go 编写的。

Go 在基础设施领域的流行还有另一个影响,那就是大多数对基础设施感兴趣的工程师都熟悉 Go 语言,这使得 Go 更容易吸引工程师。

4. 用 Go 进行工作是一种乐趣

相对于 Python,Go 入门有点痛苦。然而,Go 的高冷性质使它成为大型项目的乐趣所在。我们仍然对软件进行严格的测试,但静态输入和编译,这两件事会让初学者有点不舒服,而这就像是我们的防护栏,有助于编写没有 Bug 的代码。

也许你会认为,可能还有其他语言可以提供某种优势,但总的来说,Go 最能满足我们的技术和审美需求。

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

总而言之,如果你想成为一名机器学习工程师,那么就必须或多或少的了解 Python。但如果你对机器学习基础设施感兴趣的话,那么,你就应该认真考虑使用 Go。

文章来源|极客时间APP《极客视点》

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

  1. 下载python步骤_下载及安装Python详细步骤

    安装python分三个步骤: *下载python *安装python *检查是否安装成功 1.下载python (1)python下载地址 (2)选择下载的版本 (3)点开download后,找到下载 ...

  2. python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  3. python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?

    转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...

  4. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  5. python做脚本语言要了解什么_你真的了解Python吗?本文可以让你对Python了解更深入...

    人们为什么使用Python? 之所以选择Python的主要因素有以下几个方面:软件质量:在很大程度上,Python更注重可读性.一致性和软件质量,从而与脚本语言世界中的其他工具区别开发.此外,Pyth ...

  6. 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!

    ​微软又出良心工具了! 微软于7月1日发布一款新的VS Code插件,名为Pylance,这个名称是向Monty Python的Lancelot致敬. Pylance距离截稿不足2天时间,VS Cod ...

  7. python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他

    栈:管程序如何运行的,程序如何执行,如何处理数据.(局部变量其实也是存在栈中的,引用数据类型在栈中存的是地址引用)(栈的空间就不需要那么大了) 堆:管数据存储的.(引用数据类型的存放,所以堆的空间是比 ...

  8. python卸载_微软再出神器,这次终于对Python下手了!

    ​微软又出良心工具了! 微软于7月1日发布一款新的VS Code插件,名为Pylance,这个名称是向Monty Python的Lancelot致敬. Pylance距离截稿不足2天时间,VS Cod ...

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

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

最新文章

  1. FastQC结果解读
  2. 关于C#开发山寨操作系统,程序语言,浏览器,IDE,Office,Photoshop等大型程序的可行性歪论及意义...
  3. laravel里面使用event
  4. matlab 动画_MATLAB绘图动画(1)
  5. 学术、科研、教育……这几个高质量公共号帮你一网打击
  6. pytorch 数据类型
  7. Adobe AIR移动App的互相调用实现方式
  8. springboot yml多环境开发
  9. 使用enum建立简单的状态机
  10. 昨晚直播后续,关于职场人的能力
  11. API开放平台基于accessToken实现
  12. 机器学习如何帮助Caesars大涨邮件绩效
  13. 快速集成微信支付和支付宝支付
  14. 微信二维码海报推广示例
  15. 【问链-区块链基础知识系列】 第十课 首席架构师谈区块链技术演进
  16. linux 设置自动退出时间,linux配置超时不操作自动退出登录TMOUT
  17. input,checkbox启用禁用
  18. redis五种数据类型及其常见操作
  19. css3 wshtml_swoft框架之websocket服务的简单使用
  20. 直播协议 HTTP-FLV 详解

热门文章

  1. Matrix(二维树状数组)入门第一题
  2. Rails UVA - 514(栈)
  3. Oracle触发器2-DML触发器
  4. mysql zip win10安装_mysql 8.0.16 Win10 zip版本安装配置图文教程
  5. springBoot框架方法上面添加@Transactional注解的使用
  6. win10无法成功完成操作,文件包含病毒怎么办
  7. eclipse生成变量的快捷键
  8. LINUX下定时备份MYSQL数据库SHELL脚本
  9. Kotlin入门(30)多线程交互
  10. Android开发笔记(一百二十四)自定义相册