维护与保养
图灵先生迁移到 Microsoft Azure,使组织能够保持在最新的 Elastic 官方版本上。
完全兼容
高度可定制
Elastic 使图灵先生能够快速、高效且可靠,同时使组织能够非常快速地索引文档和向量。
认识艾伦:他阅读。他学习。你提问。他回答。
图灵先生是一家巴西公司,以著名的数学家和计算机科学家艾伦·图灵的名字命名。艾伦先生是图灵先生的软件即服务产品,它解决了一个几乎每家公司的人员都会面临的问题:在一大堆文档中找到他们问题的最佳答案。艾伦通过使用人工智能来“读取”一组文档来满足这种需求,利用计算机视觉和自然语言处理 (NLP) 来学习和理解它们包含的信息,然后将这些知识作为数学向量存储在数据库中。人们的问题也以类似的方式进行向量化,在此基础上,可以搜索作为艾伦人类记忆等效物的数据库,以找到最接近的匹配项。
当公司创始人兼 CTO Marco Aleixo 于 2016 年成立图灵先生时,他就知道自己需要从一开始就采用“云原生”方法,以实现运行艾伦深度神经网络所需的扩展性。
他最初选择了一家在开源开发人员中很受欢迎的云提供商,在试验了一些 NoSQL 数据库后,选择了 Elasticsearch 作为艾伦的主要数据存储。做出此选择的原因包括 Elasticsearch 卓越的可扩展性、强大的搜索工具以及在开源社区中的受欢迎程度和支持。
图灵先生的 AI 工程师 Juliana Resplande 表示:“Elastic 使我们能够非常快速地索引文档和向量。Elastic 非常出色,因为它具有高度可定制性。每个初创公司都需要快速、高效且可靠 - Elastic 可以实现这一点。”
一切都进行得相当顺利,直到 2021 年 4 月,该公司的云提供商宣布将不再支持 Elastic 的官方、持续版本。“我想保留 Elastic 的‘真实’版本,原因有很多,包括兼容性、管理工具、文档、访问社区支持以及计划中的新功能,” Aleixo 说。
Azure 上的 Elastic – 理想的解决方案
Aleixo 的困境在 2021 年 5 月得到了解决,当时 Elastic 和微软宣布他们已合作提供 Azure 上的 Elastic。在确认 Azure 提供了他需要的其他托管服务(例如用于存储客户文档、运行无服务器函数和管理 Kubernetes 集群的服务)后,Aleixo 选择了 完全托管的 Elastic Cloud 服务,而不是 自托管选项,并很快开始运行。他还加入了 Microsoft for Startups 计划,该计划使他能够获得 Azure 积分、开发工具、技术指导和其他资源。
Aleixo 说:“我对 Azure 了解得越多,就越相信它更适合我们。“Azure 不仅提供了我需要的所有托管服务,包括‘真正的’ Elasticsearch 版本,而且 微软在 OpenAI 方面的方向也给我留下了深刻的印象。”
Mr. Turing 公司于 2021 年夏季开始迁移到 Azure。几天之内,该公司就在 Azure 上部署了 Elastic 并复制了其数据。Resplande 说:“迁移非常容易,Azure 的文档非常有帮助。” “而且,由于 Azure 上的 Elastic 基于官方版本的 Elasticsearch,因此完全兼容性得到了保证。”
工具 – Visual Studio Code 和 GitHub Enterprise
开发人员已经在使用 Visual Studio Code 编写 JavaScript 和 Python 程序,因此他们无需学习新的 IDE。同样,他们也能够继续使用他们现有的所有 Python 包、框架和其他工具,包括用于低代码软件开发的 GeneXus、用于管理 NLP 模型的 Hugging Face、用于构建和部署 Web API 的 Django 和 FastAPI,以及用于构建、训练和部署神经网络的 TensorFlow 和 PyTorch。
Aleixo 说:“我们喜欢 Visual Studio Code,因为它非常易于使用。”“它轻巧、开源,并且是目前可用于 Python 编程的最强大的 IDE。最重要的是,它是可扩展的。我们使用许多 Visual Studio Code 扩展来开发 Python,例如,检测编码错误并帮助我们更快地工作。”
Resplande 补充道:“我去年加入 Mr. Turing 之前没有使用过 Visual Studio Code。当我加入公司时,每个人都告诉我‘使用 Visual Studio Code…你会爱上它的’。我从一年前开始使用 Visual Studio Code,现在已经上瘾了。这是未来趋势。”
源代码驻留在 GitHub Enterprise 中,它还托管了该公司的 CI/CD 管道。在该管道中,该公司正在使用 GitHub Actions 进行自动化,包括部署到 Azure。Aleixo 说:“我们需要确保代码安全,而 GitHub 让我们能够锁定代码,防止未经授权的访问。”“我们正在使用 GitHub Actions 来创建自动化管道,我们可以运行这些管道来测试代码质量并执行我们需要在每次更改时重复的其他任务。”
展望未来,Aleixo 计划采用 GitHub Advanced Security 来创建一个现代的“DevSecOps”环境,该环境将安全性置于整个软件供应链的中心。GitHub Advanced Security 执行的安全扫描包括
- 代码扫描 – 搜索潜在的漏洞和编码错误,例如 SQL 注入攻击的漏洞。这些扫描由 CodeQL 提供支持,CodeQL 是 GitHub 开发的行业领先的语义代码分析引擎。
- 密钥扫描 – 检查可能已检入到存储库中的密钥、令牌和其他密钥。
- 依赖项审查 – 显示对依赖项所做的更改的全部影响以及任何易受攻击的版本的详细信息,包括对许多易受攻击的依赖项的自动修复。(依赖项审查还涵盖开源,如 本文中所述。)
Aleixo 说:“我们使用许多开源软件包,因此我们需要跟踪每个软件包的每个版本,以确保我们不安装任何恶意代码。”“在我们的工作流程中内置此类自动化安全检查将大有裨益;我们计划使用 GitHub Advanced Security 提供的所有功能。”
Visual Studio Code 和 GitHub 的组合为 Mr. Turing 的开发人员提供了一套强大的协作工具,包括集成式拉取请求、评论和 Visual Studio Code 中的问题跟踪等功能。Resplande 说:“我喜欢它让我可以远程完成我需要做的一切,这很重要,因为我住在离我们办公室 300 英里的地方。”“我们一半的开发人员住在巴西的其他州,我们仍然可以作为一个团队运作,协作编辑文档等等。”
然而,开发人员最喜欢的功能是 GitHub Copilot,这是一款 AI 助手,通过为代码完成提供建议来帮助他们更快地工作。GitHub Copilot 由 OpenAI 基于 GPT-3 的强大新型机器学习模型 Codex 提供支持,经过数十亿行公共代码的训练,并通过 Visual Studio Code 的扩展进行访问。除了自动完成功能外,GitHub Copilot 还可以帮助开发人员将注释转换为代码,可以根据几个示例生成长期的重复代码模式,可以建议与代码匹配的测试,甚至可以为开发人员提供多个选项进行评估。
Aleixo 说:“作为一家初创公司,我们需要快速工作。”“GitHub Copilot 不仅可以帮助我们更快地编写代码,还可以帮助我们确保代码质量。它是我见过的最好的编码助手。”
架构和数据流
图 1 显示了 Alan 的高级架构。客户通过 Web API 或网页上传他们的文档,两者都托管在 Azure Kubernetes 服务中。Visual Studio Code 的一个功能 Bridge to Kubernetes 允许开发人员在他们的开发计算机上运行和调试代码,同时仍连接到他们的 Kubernetes 集群,例如,根据需要在属于 Azure Kubernetes 服务 (AKS) 集群的单个 Pod 中进行本地调试。
然后,上传的文档将存储在 Azure Blob Storage 中进行处理。目前,Alan 可以处理 Microsoft Word 文档、PDF 文件、文本文件和 Excel 电子表格。开发人员正在努力增加对视频 .srt(字幕)文件的支持。
处理管道包括两个主要步骤。首先,通过使用计算机视觉的深度神经网络检查文档,以确定其组成部分,例如标题、副标题、标题、徽标、表格和段落。这些神经网络托管在 Azure Functions 中,使 Alan 能够横向扩展并一次处理数千个文档。
其次,在 Alan 形成文档所包含的所有内容的“图片”后,文档会流入第二个深度神经网络,该网络托管在 Azure Kubernetes 服务上。此神经网络使用 NLP 来检查文档中标识的每个元素,并将其转换为数学向量。平均而言,文档的每一页都会生成 10 到 20 个向量,每个向量包含大约 768 个标量,从而导致向量大小约为 3KB。计算向量时,它们将作为 JSON 文档存储在 Elasticsearch 中。
Mr. Turing 的研发主管 Vinícius Oliveira 说:“当客户向我们发送文档时,我们需要快速处理它们。”“Azure Functions 和 Azure Kubernetes 服务都提供了出色的可扩展性,使我们能够并行处理许多文档,以使我们的客户满意,而无需在我们不需要时为备用容量付费。”
客户通过托管在 Azure Kubernetes 服务中的另一个 Web 界面提出问题。这些问题以类似于文档的方式使用 NLP 进行向量化,然后调用 Elasticsearch k-nearest neighbor (kNN) 搜索 API 以查找数据库中与问题最匹配的内容。
Alan 使用 Elastic APM 进行应用程序性能监控,使用 Elastic Filebeat 进行日志分析。来自这两个来源的数据流入 Kibana,这是一个包含在 Azure 上的 Elastic 中的可视化仪表板,Mr. Turing 使用它来监视 Alan 处理管道中的活动。该公司使用 Azure 负载均衡器进行负载均衡,并使用 Azure Monitor 的一项功能 Log Analytics 来监视 Azure Functions 中的活动。
开发人员使用功能强大的 GPU 支持的 Azure VM(例如 NDv2 系列)来训练他们的模型。每个 VM 都有 8 个 NVIDIA Tesla V100 NVLINK 连接的 GPU,每个 GPU 具有 32 GB 的 GPU 内存。每个 NDv2 VM 还有 40 个非超线程的 Intel Xeon Platinum 8168 (Skylake) 内核和 672 GiB 的系统内存。即使拥有如此强大的处理能力,训练公司的一个深度神经网络模型仍然需要 3-4 天。
每天 2000 个问题和答案,并且还在增长
Mr. Turing 的客户总共向 Alan 提供了大约 60,000 份文档。总而言之,他的 Elasticsearch 数据库大小约为 300 GB,代表 100 万页知识,他使用这些知识每天回答大约 2,000 个问题。
Mr. Turing 的首席执行官 Marcelo Noronha 说:“Alan 可以在短短几秒钟内阅读、组织、吸收和确定数千页信息的关联。”“他还可以进行语义关联,记录同一问题的多个变体,以帮助人们找到他们需要的内容,即使他们使用与文档中包含的术语不同的术语来描述他们正在寻找的内容。”
当 Alan 忙于为用户提供快速准确的问题答案时,该公司迁移到 Azure 使 Mr. Turing 能够更好地满足自身需求,首先是该公司希望继续使用官方版本的 Elasticsearch。此外,借助完全托管的 Azure 服务,Mr. Turing 的开发人员可以专注于构建公司领先的 AI 助手,而不是管理 IT 基础设施。
迁移到 Azure 也带来了其他好处。Noronha 说:“在 Azure 上,Alan 的运行速度是以前在我们的云提供商上运行时的两倍,并且运营成本更低。”“此外,由于 Azure、GitHub 和 Visual Studio Code 之间的强大集成,我们可以比以前更快地交付新功能。”
Aleixo 补充道:“微软提供的强大支持增强了我们在冒险和尝试新事物方面的信心。Azure 对开源的支持非常出色,而且微软在开源方面的持续创新将帮助我们使 Alan 更智能、更快。我们很高兴开始尝试 Elastic 中对自然语言处理的本机支持。我们也很高兴看到 Azure 上的新 Hugging Face Endpoints 服务,这将为我们提供进一步简化模型部署的方法。我们同样渴望尝试新的 Azure OpenAI 服务,该服务将使我们能够在 Azure 上运行 OpenAI GPT-3 模型。”
Noronha 总结道:“我们的最终目标,也是我们在 Mr. Turing 的共同愿景,是让 Alan 像复仇者联盟电影中钢铁侠的虚拟助手 Jarvis 一样智能和有帮助。有了 Azure 和 Elastic,我们相信我们会实现这一目标。”