我们为什么用 Go 编写机器学习架构,却不用 Python?
要是你有意愿成为一名机器学习工程师, 那必定得熟练掌握, 然而, 要是你对机器学习的基础架构兴趣盎然, 那就应当慎重思考Go。
作者 | Caleb
译者 | 弯月,责编 | 郭芮
以下为译文:
如今, 大家都知道, 它是机器学习项目里最为流行的语言。虽然R、C++以及Julia等语言, 都有自身的支持者以及使用状况, 可它依然是使用最为普遍的语言, 差不多每个主流的机器学习框架都运用了它。
然而,存在一个开源平台, 其用途是把机器学习模型部署成 API, 在这个平台的代码库中, 有占比 87.5%的代码是 Go。
将引以为豪的机器学习算法当作生产机器学习系统的其中一个组成部分。如果想要具备大规模运行生产机器学习API的能力, 那么你的基础架构就得实现以下这些功能:
我们进行构建, 其目的在于, 将上述所有的基础架构予以自动化, 并且, 针对日志记录以及成本优化等其他问题进行处理。
以下这些原因致使, 我们觉得Go才是打造出契合上述需求的软件的理想选择所在。
并发对于机器学习的基础架构至关重要
许多种种各异的模型, 用户能够将其部署为各式不同的API, 且把全部所有的模型, 放置到同一个集群之内予以管理。而管理这些不同的部署, 得要借助一些API才行, 比如:
用户不会直接跟这些 API 展开交互, 借助程序去调用这些 API 用以管理集群, 启动部署以及监视 API。
存在这样一项难题, 即要以高效且可靠的方式去交叉调用这些API。处理这些API调用最为高效的方式是采用并发的方式, 然而这同时带来了复杂性, 原因在于我们不得不去担心竞争状况这类问题。
Go为解决这个问题提供了一个开箱即用的解决方案:。
是以并发这种方式去执行代码的函数, 我们能够另外撰写一篇文章, 深入地去探讨其背后的工作方式, 不过概括来讲, 它是由Go运行时进行自动管理的轻量级线程, 你能够把多个这样的轻量级线程放到一个OS线程上, 而且要是出现导致OS线程被阻塞的情况, 那么Go运行时会自动将其余那些轻量级线程转移到新的OS线程上。
并且给出了称之为“通道”(此处不明确你没给到关键修饰……)的一项功能, 你能够借助此功能于其间进行消息传递, 以此协助我们开展请求调度工作, 进而避免出现竞争情形。
当然, 你能够借助等最新的工具于当中达成这些功能, 然而Go的设计顾及到了这类情形, 运用Go可减轻我们的工作负担。
使用Go构建跨平台的CLI更容易
CLI属于跨平台工具, 借助该工具, 用户能够直接于命令行实施部署模型的操作以及对API进行管理。
起初, 我们借助编写完成了这个CLI, 然而, 经证实, 于多个平台之上分发此CLI着实艰难。鉴于Go能够编译成一个二进制文件(无需管理依赖), 故而可为我们提供一种简易的解决办法, 助力我们在平台之间分发CLI, 且无需进行额外的工程工作了。
Go编译成为的二进制文件, 和解释型语言相比较而言, 其性能方面所具备的优势也是十分显著的。按照计算机基准测试得出的结果来看, Go的速度远远胜出。
好多别的基础设施CLI工具同样是用Go来编写的, 这根本不是偶然情况, 详细的理由去参考下面的第三点。
Go的生态系统非常适合基础设施项目
开源具备的好处当中的其中之一是, 你能够朝着自己敬仰夸赞的项目展开学习。比如说, 处于存在着的生态系统里, 并且其自身同样是运用Go来进行编写创作。我们相当有幸能够去借鉴参考这个生态系统之中的诸多优秀杰出的开源项目, 这其中涵盖着:
像上述提及的那些工具, 全都是项目, 并且无一例外都是借助Go语言给编写出来的。要是你能够细致入微地去查看和的基础设施项目呢(这里面又涵盖了Vault、Nomad、、和哦), 那你势必就会发觉, 它们全部都是运用Go语言打造而成的。
Go于基础架构领域的流行存在另外一种影响, 即多数对基础架构怀有兴趣的工程师对Go颇为熟悉。因而, 极易吸引到这些工程师。我们公司极为出色的一位工程师是凭借特定方式找到我们的, 我们甚是庆幸他找寻到了我们。
Go语言编程是一种享受
我们构建时所运用的最后一个缘由是Go, 是因为我们对Go语言编程饱含享受之情。
相较于, Go入门存在一定艰难程度。然而, Go具备的宽容性能够给大型项目带去愉悦感受。我们于测试软件方面极为严格, 不过静态输入以及编译(这属于Go令初学者感到困扰的两大难题)对我们而言恰似防护栏, 助力我们编写(相对来讲)不存在bug的代码。
可能你会讲, 别的语言存在不一样的优势, 然而, 总体来讲, Go可以将我们的技术以及美学需求, 最大限度地予以满足。
适用于机器学习,而Go适用于基础架构
我们也很喜欢,它在中占有一席之地,尤其是在处理推理方面。
服务于, 、、 -learn以及别的模型, 这表明跟模型的接口以及推理前与之后的处理都于中达成。尽管代码经打包部署至容器里, 然而这些容器是由用Go编写的代码编排的。
如果你存有变成一名专长为机器学习的工程师的兴趣, 那么就一定要熟练地去掌握。然而, 要是你对作为机器学习构成要素的基础架构有着兴趣, 那么就应当慎重地去考虑Go。
原文:
/why-were-----in-go-not--
