65.9K
CodeProject 正在变化。 阅读更多。
Home

为现有应用程序添加人工智能的 5 种方法

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2022年4月22日

CPOL

11分钟阅读

viewsIcon

19122

将人工智能添加到您的应用程序不一定总是要与工具和库作斗争

如果还没有人要求您为应用程序添加人工智能 (AI) 功能,那么提出这个话题可能只是时间问题。

添加 AI 功能并不难。然而,这就像说为应用程序添加数据库支持并不难一样。它不难,但选择正确的数据库、设置模式和存储过程可能很困难。然后您需要决定数据库应该在同一服务器上还是不同的服务器上。您还需要决定使用哪种数据库:关系型、基于文档、键/值……它可能会变得复杂。

AI 也是如此。添加一个库,使用本地服务,使用托管服务,我应该使用哪种服务?我该如何设置它?然后是棘手的问题:它会花多少钱?我的数据将如何处理?它有多安全?

因此,让我们快速浏览一下您的选择,这样您至少知道要问哪些问题。

自己编写

我首先要说的是,这是我们十年前开始涉足 AI 的方式,我真的不推荐它。有如此多杰出的研究人员花费了无数工时构建了极其强大和高效的 AI 库和模型,这些都基于快速发展的 AI 研究语料库,以至于使用现有众多 AI 解决方案之一会更简单、更快、更安全。

话虽如此,深入研究一个简单的神经网络来构建基于特定场景的数据分类能力可能会令人满意,提供出色的结果,并且开销很小。CodeProject 的垃圾邮件过滤器就是这样一个例子,在我们看来,任何更大的东西都是矫枉过正。在这种情况下,正确的工具做正确的事。

优点

  • 编写代码很有趣。
  • 您得到的就是您所需要的,不多不少
  • 您最终可能会得到一个更小的代码库,因为您没有导入库及其所有依赖项

缺点

  • 您正在重复造轮子
  • 您(可能)不会做得那么好、那么准确,或者解决方案不如现有方案快。
  • 这可能会分散您对核心业务的注意力。它最终可能比简单使用现有解决方案花费更多的时间、错过机会和开发人员时间。

直接在代码中使用 AI 库或工具包

如果您希望将 AI 处理直接包含在您的代码库中,那么使用 TensorFlow 或 PyTorch 等库是不会错的。有许多成熟、受支持、易于使用的库可用于多种语言和平台。它们为您解决了繁重的工作,并且加上许多预训练模型,您所需要做的就是包含工具包,加载模型,输入数据,运行推理并输出结果。

以下是如何在 Python 中使用最新的 YOLO5 模型

import torch                                             # import the Torch library

model = torch.hub.load(‘ultralytics/yolov5’, ‘yolov5s’)  # Load the YOLO model
img = '~/username/images/street.jpg'                     # Specify the image
results = model(img)                                     # Perform the inference
results.print()                                          # Output the results

这多么简单啊!

当您需要考虑不同的模型版本,以及模型训练所使用的库版本时,问题就开始出现了。还有模型所需的库所需的编译器或解释器版本。如果所有这些与应用程序其他部分的库、解释器版本甚至硬件要求冲突,该怎么办?

这可能是一个真正的挑战,特别是对于 Python 来说,您可能需要设置多个虚拟环境,每个环境都有自己的库包副本,并且每个环境都使用不同版本的 Python。保持这些同步且未损坏可能需要很大的耐心。

您可能有一个适用于 Python 3.7 的出色解决方案,但当它在安装了 Python 3.11 的另一台机器上运行时,它可能会简单地失败。

将 AI 直接添加到您的应用程序可能意味着您需要非常小心,以确保您始终将所有必要的部分作为一个单元部署。Docker 将在此处为您节省时间,但对许多人来说,那种开销可能无法接受。

最后,在您的应用程序中添加 AI 工具包时,您需要记住,您还将添加模型本身。AI 模型可能很大,以千兆字节为单位。

优点

  • 您站在杰出开发人员和研究人员的肩膀上
  • 许多库是开源的,因此您可以查看和审计代码
  • AI 库和工具正以惊人的速度开发和完善。不断有新功能和改进性能发布
  • 这些库通常非常易于使用
  • 有工具可以实现模型在不同库之间的转换。
  • 几乎任何语言和平台都有模型

缺点

  • 使用库肯定有一个学习曲线
  • 您可能被限制使用给定库的特定模型格式
  • 库太多了。选择的悖论。
  • 包含一个库很少只意味着一个库:它通常会带来所有它的朋友和亲戚以及远亲。事情可能会变得臃肿
  • 包含一个库意味着包含模型。事情会变得非常非常大,而且很快。
  • 您必须确保您的编译器/解释器、库和模型在版本控制方面保持同步。例如,永远不要假设 Python 的默认安装会与您的代码一起工作。

使用抽象库 (.NET ML, openVino)

许多库要求您使用特定形式的预训练模型,或者它们要求针对不同的硬件使用不同的库。ML.NET 和 openVino 等库解决了这个问题,它们致力于聚合和抽象库和硬件,以便为您的 AI 操作提供一个统一的 API。

优点

  • 使用专用库的所有优点
  • 无需针对特定硬件使用特定版本。库将动态适应
  • 您能够轻松使用更广泛的模型
  • 您在某种程度上对新硬件和模型格式做好了未来准备

缺点

  • 库和功能的聚合将导致更大的占用空间。
  • 抽象可能会导致“最小公分母”问题,即库只公开通用功能,这意味着您失去了访问专用库中可用的一些功能或微调的能力
  • 您选择的语言或平台可能受到限制。

托管 AI 服务

使用托管 AI 服务意味着您摆脱了与库、硬件和兼容工具包以及拖动 GB 模型相关的所有问题。您只需调用托管 AI 服务,结果就会在几毫秒后通过您的低延迟、高带宽互联网连接返回。当然,前提是您有这种连接。

托管提供商提供的服务范围确实令人惊叹。预构建模型、快速硬件、出色的 API。请注意成本。

在考虑成本时,您需要了解费用是如何计算的。将数据上传到提供商会产生费用吗?下载结果呢?每次请求的成本是多少,以及如何计算?有些服务按请求收费,有些按处理单元收费,有些按时间收费。您还需要考虑数据存储成本以及可能适用的任何许可成本。

另请注意,成本将在很大程度上受到任务的影响:将数据应用于预训练模型是一回事,但传输数太字节的数据用于训练新模型则要昂贵得多。例如,GPT-3 传闻训练成本约为 500 万美元。

有降低成本的选择。一种方法是混合搭配服务提供商:将数据上传并存储在 DELL 等存储成本低的提供商处。将这些数据发送到 Azure(可能没有存储摄取费用),训练模型,然后将结果发送回您的 DELL 存储。您的数据在一家提供商处安全且存储相对便宜,而另一家提供商则完成了训练模型的繁重工作。由于大型托管提供商之间拥有巨大的管道,因此它们之间的数据传输通常非常快。

如果您只是使用托管提供商进行 AI 推理(即,将数据发送到 AI 模型以由模型进行预测或分析),那么您还应该了解诸如调用绝对数量限制以及任何可能在给定时间内限制调用数量的节流等约束。如果某个功能因为其他用户耗尽了您当天的配额而消失,您的用户会作何反应?

您还需要了解数据流向何处以及该司法管辖区的法律可能如何影响您。您的数据副本会存储在国外司法管辖区吗?您的数据流是否会被监控或提供给第三方?来自个人家中的网络摄像头馈送可能不是用户或您的应用程序希望被发送到外国进行处理的信息。如果您将个人身份数据发送到您的国家/地区之外,甚至可能需要注意法律或保险限制。

优点

  • 快速、强大,并且您可以访问最新最好的技术
  • 无需担心 AI 库或版本
  • 无需担心硬件速度或容量。您的信用卡是您唯一的限制。
  • 您可以轻松使用各种模型
  • 您面向未来。您将能够访问最新最好的技术
  • 您的应用程序会更小。无需携带库代码或模型
  • 它们将与任何可以通过 HTTP 进行 API 调用的语言一起工作

缺点

  • 您可能需要良好的互联网连接才能使用这些服务
  • 它们可能很昂贵,或者更常见的是,实际成本模糊不清或不透明
  • 系统是封闭的。您无法真正看到幕后发生的事情
  • 您无法控制数据流向何处。这可能会成为隐私和安全问题。
  • 您可能会面临配额或使用问题

本地 AI 服务

那么,如果您不想自己编写 AI 代码,您想使用您选择的任何语言或平台进行 AI 分析,您不想让您的数据离开本地网络(甚至您的机器),并且您不想为一项您知道免费提供的服务支付未知金额,该怎么办?

CodeProject.AI Server 等本地托管 AI 服务是 AI 服务的一个很好的例子,它兼具两者的优点。您无需担心处理库和版本,任何可以进行 HTTP 调用的语言都可以与该服务进行交互。

优点

  • 可以在线找到并免费使用本地开源 AI 服务器
  • 没有使用限制
  • 您的数据保留在您可以看到的地方。除非您选择,否则没有任何数据会被发送到网络之外。
  • 与托管 AI 服务一样,您无需担心库或版本控制。一切都在服务范围内
  • 您可以轻松访问多种 AI 功能,而无需为要执行的每个 AI 操作安装库或工具包

缺点

  • 服务的安装程序可能会很大,具体取决于包含的模型和功能。
  • 就像直接使用库一样,您受限于安装服务机器的性能
  • 同样,就像直接使用库一样,您不会自动获得更新。
  • 提供的 AI 功能不会像托管服务那样多。但是,单个服务可以提供来自多个提供商的多个 AI 操作,所有这些都通过统一的 API 提供

后续步骤

将 AI 添加到应用程序可以从根本上扩展应用程序的功能,同时降低复杂性。启发式和硬编码的if-then语句被基于(希望是)各种真实世界数据的训练集所取代,而传统二进制逻辑无法轻易涵盖这些数据。

您添加 AI 的方式同样具有根本性后果,选择如何做到这一点取决于您的要求、预算以及最终您的具体情况。

CodeProject,我们尝试了上述所有方法来将 AI 添加到我们的系统中。我们的经验从对某些方法如此简单感到惊喜,到因不得不与工具一路抗争而彻底愤怒。

最后,我们希望与尽可能多的开发人员分享我们使用 AI 的经验(和乐趣),而无需让他们经历挫折。寻找兼容的库,处理模型、系统工具、路径、操作系统之间的怪异之处以及同一操作系统在不同 CPU 上的怪异之处,过去和现在仍然非常耗时。我们构建了 CodeProject.AI 服务器,作为将这种复杂性封装到一个自包含包中的方法,该包为您完成了所有繁重的工作。一旦安装,您就可以立即开始在应用程序中玩转和使用 AI。

下载安装程序并试用一下。

© . All rights reserved.