【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因

全文共1881字 , 预计学习时长7分钟
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
图源:unsplash
毋庸置疑 , Python是如今最受欢迎的机器学习语言 。 虽然机器学习框架使用CUDAC/C++之类的语言进行实际运算 , 但它们都提供了Python接口 。 这也是为什么大多数机器学习从业人员都工作中都使用Python 。
而机器学习基础设施——Cortex的代码库88.3%都是Go语言编写的 。
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
图源:CortexGitHub
大规模部署模型不同于编写调用PyTorch和TensorFlow函数的Python脚本 。 为了实际大规模运行生产机器学习API , 需要基础架构来执行以下操作:
·API管理 , 以处理多个部署进程 。
·自动缩放 , 这样流量波动就不会破坏API(并且AWS保持可管理性) 。
·滚动更新 , 以便更新模型的同时仍然服务于请求 。
我们构建了Cortex来提供此功能 , 并决定在Go语言中进行编写 , 有以下几个原因:
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
1.基础设施社区已经接受了Go
【【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因】我们是软件工程师而不是数据科学家 , 之所以加入机器学习 , 是因为想要构建Gmail的智能编写之类的功能 , 而不是因为对反向传播着迷 。
我们希望有一个简单的工具 , 能够采用经过训练的模型并自动实现所需的所有基础设施(例如可复制的部署 , 可扩展的请求处理 , 自动监视等) , 从而将其部署为API 。
尽管还不存在多合一的模型到微服务平台 , 但我们之前已经在普通软件中实现了所有这些功能 。 我们知道哪种工具最适合这份工作 , 以及用什么语言编写 。
构建Kubernetes , Docker和Terraform等工具的团队使用Go , 是因为它运行很快 , 可以很好地处理并发程序 。 它编译为单个二进制文件 。 选择Go风险相对较低 , 其他团队也在使用Go来解决类似的问题 。
此外 , 用Go编写可以使基础架构工程师(他们可能已经熟悉该语言)工作起来更容易 。
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
2.在Go中构建跨平台的CLI更容易
我们希望CLI在Linux和Mac上均可使用 。 最初 , 我们尝试用Python进行编写 , 但是用户总是很难让它在不同的环境中工作 。 当在Go中重建CLI时 , 可以将其编译为单个二进制文件 , 可以在各个平台上发布 , 而无需做太多工程工作 。
编译后的Go二进制代码与解释型语言相比 , 其性能优势也很明显 。 根据计算机语言基准测试游戏 , Go运行得比Python快得多 。
因此用Go编写许多其他基础结构CLI(例如eksctl , kops和Helm客户端)也并非偶然 。
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
3.Go解决了与并发和调度相关的问题
管理部署需要许多服务同时并准确地运行 。 幸运的是 , Goroutines , channels和Go的内置计时器和周期性计时器为并发和调度提供了一种巧妙的解决方案 。
在较高的层次上 , Goroutine是一个正常函数 , Go通过在虚拟的独立线程上执行来同时运行 。 多个Goroutine可以安装在单个OS线程上 。 channels允许Goroutine共享数据 , 而内置计时器和周期性计时器允许部署Goroutine 。
【智能家居科技】谁能取代Python?我使用Go来部署机器学习模型的原因
文章图片
图源:unsplash
我们在需要时使用Goroutines来实现并发(例如当Cortex需要将多个文件上传到S3 , 而且并行运行将节省时间) , 或使可能长时间运行的功能(例如CloudWatch的流日志)不会阻塞主线程 。