欢迎来到我们关于公司在生产中使用Elixir的系列案例研究。请看我们迄今为止发表的所有案例。
V7是一个创造视觉感的网络平台。是机器学习和软件工程师开发其计算机视觉项目的枢纽,具有数据集管理、图像/视频标签和一键式模型训练等功能,可实现任何视觉任务的自动化。
V7由Alberto Rizzoli和Simon Edwardsson于2018年成立,使用Elixir、Phoenix和Cowboy为他们的网络平台提供动力,负责管理大量数据并协调数十个Python节点来执行机器学习工作。他们最近完成了300万美元的种子轮融资,目前他们正在招聘后端工程师以增强他们的Elixir团队。
视觉任务
多年来,我们一直在不断地将视觉任务自动化,以加快人工流程,减少错误率。比如说。
-
基础设施的例行检查:石油管道和海上石油钻井平台需要不断检查,防止腐蚀。一旦有太多的铁锈,就会损坏管道并导致泄漏。现在,可以用无人机拍照,自动检测氧化点。
-
医学检查:数字病理学的使用越来越多,以协助医生诊断疾病。例如,在对可能的肝癌进行活检时,医生用显微镜观察人体组织,并将细胞的图像拼接起来,然后逐一分析。人工智能可以反复检查这些图像,并在出现阳性的情况下帮助加快有问题的细胞。
-
农业和养殖业:一个葡萄酒生产商可能想计算葡萄园里的葡萄,以更高的精度估计某个季节的葡萄酒产量。农民可能使用视频来评估散养鸡和猪的健康和运动量。
-
视觉自动化在质量保证和机器人技术方面也发挥着越来越大的作用:快餐制造商可以使用摄像机来识别有黑点的薯条,而收割机可以使用机器人从树上摘取苹果。
神经网络是这些任务的核心,而对网络本身的自动化创建的需求也越来越大。
人工智能的自动化
训练一个用于图像和视频分类的神经网络通常需要多个步骤。首先,你用边框、多边形、骨架和许多其他格式来注释图像和框架。然后对注释进行标注并用于训练计算机视觉模型。贴上标签的注释也被用来验证模型的偏差、异常值和过度/欠拟合。
对于许多人工智能公司来说,这个过程存在于一个循环中,因为他们不断完善数据集和模型。V7帮助团队管理和自动化这些步骤,将高质量训练数据的创建速度提高10-100倍。然后,用户可以导出这些数据,或直接通过平台使用这些数据来创建神经网络。
V7使用Elixir来协调所有这些任务。前端是一个Vue.js应用程序,它与一个由Phoenix驱动的API对话。Phoenix应用程序必须处理大量的各种格式的数据。例如,显微镜输出的图像格式与普通实验室相机的格式不同,通常是专有的。
为了执行所有的机器学习任务,V7有一个由运行Cowboy网络服务器的Elixir应用程序协调的Python节点集群。一旦一个Python节点出现,它就与Cowboy建立WebSocket连接,并发送它有多少内存、CPU、GPU和其他相关数据。
由Phoenix驱动的后端使用另一种基于Erlang VM的技术与协调器进行通信。RabbitMQ。例如,当用户任务是自动注释一张图片时,Vue.js前端会向Phoenix发送一个REST请求。然后,Phoenix在RabbitMQ上排队等待一条消息,其中包含图像的位置,通常是一个Amazon S3桶。协调器拾取该消息,找到一个可用的Python节点,并通过WebSockets发送相关指令。
生态系统和基础设施
V7团队使用的其他工具是Broadway和Erlang Distribution。
V7必须处理和规范化图像和视频。对于这些,他们有一个单独的服务,接收 RabbitMQ 消息并相应地调用ImageMagick或FFmpeg。他们使用Broadway来接收RabbitMQ消息并同时执行这些任务。
Erlang Distribution帮助他们在各节点间广播信息。由于他们将多媒体数据存储在S3上,因此每当用户想看图像或视频时,他们需要生成预先签名的URL。然而,如果用户被路由到一个不同的节点,他们会得到一个不同的URL,这将迫使他们再次下载该资产。为了解决这个问题,他们使用Erlang分布来沟通他们生成了哪些URL,用于哪些目的。
总的来说,他们的后端在Amazon ECS上运行,大约有四个节点,直接与PostgreSQL对话。他们的基础设施中最大的部分是Python集群,它需要多达两十台机器。
学习和招聘
早在2018年8月的第一天,Elixir就已经出现在公司内部。V7的第一位工程师Andrea Azzini是负责引入它的人。根据他在生产中运行Elixir的经验,他相信这种语言会很适合他们面临的挑战。
他们的首席技术官西蒙-爱德华森(Simon Edwardsson)在开发系统时不得不学习这门语言,但由于他以前有使用Python和Haskell的经验,他能够迅速上手并运行。他说:"作为一个团队,我们对Django比较熟悉,但我们担心它不能很好地处理我们所管理的数据量和注释--这可能会导致下一步的重写或沮丧。从这个角度来看,在Elixir上的投资是值得的,因为自从我们开始使用以来,我们从来没有在后端做过重大的改变。"
这部分要归功于Phoenix提供高级抽象的能力,同时使其构建块对开发者来说是可理解的。"虽然Phoenix内部发生了一些神奇的事情,但在引擎盖下偷看并理解一切是很简单的。"
V7最近迎来了一位新的Elixir工程师,使他们的团队总共有四位,他们正在寻找更多有兴趣加入他们的开发者。从历史上看,有更多的工程师申请他们的机器学习职位,但他们也相信很多Elixir开发者已经准备好了,但不认为自己已经准备好了。西蒙最后发出了邀请。"我们主要在寻找有现有Elixir经验或愿意在工作中学习的后端工程师。如果你对跨行业的计算机视觉自动化感兴趣,我们欢迎你来联系"。