目录
自己写
直接在代码中使用AI库或工具包
使用抽象库(.NET ML、openVino)
托管人工智能服务
本地人工智能服务
下一步
如果您尚未被要求向应用程序添加人工智能(AI)功能,那么提出该主题可能只是时间问题。
添加AI功能并不难。但是,这就像说向应用程序添加数据库支持并不难。不是,但选择正确的数据库、设置架构和存储过程可能很困难。然后你需要决定数据库是否应该在同一台服务器上,不同的服务器上。您还需要决定您将使用哪个数据库:关系型、基于文档的、键/值... 它可能会变得复杂。
人工智能就是这样。添加库,使用本地服务,使用托管服务,我使用哪个服务?我该如何设置。然后是棘手的问题:要花多少钱?我的数据将如何处理?它有多安全?
因此,让我们快速浏览一下您的选项,以便您至少知道要问的问题。
我首先要说的是,这就是我们十年前开始涉足人工智能的方式,我真的不推荐它。有这么多杰出的研究人员,他们花费了无数工时,基于快速发展的人工智能研究语料库构建了极其强大和高效的人工智能库和模型,以至于使用众多人工智能中的一种变得更容易、更快、更安全解决方案已经可用。
话虽如此,深入研究一个简单的神经网络来建立根据您的特定场景对数据进行分类的能力是可以实现的,提供很好的结果,并且会产生很少的开销。CodeProject的垃圾邮件过滤器就是这样一个野兽,在我们看来,任何更大的东西都会是矫枉过正。在这种情况下工作的正确工具。
优点
缺点
如果您希望将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模型可以很大,比如Gigabyte。
优点
缺点
许多库要求您使用特定形式的预训练模型,或者它们需要针对不同硬件的不同库。这个问题可以通过ML.NET和openVino等库来解决,它们可以聚合和抽象库和硬件,以便为您的AI操作提供单一API。
优点
缺点
使用托管AI服务意味着您可以消除与库、硬件和兼容工具包相关的所有问题,以及在GB的模型中拖拽。您调用托管的AI服务,结果会在几毫秒后通过您的低延迟、高带宽互联网连接返回。当然,假设您拥有其中之一。
托管提供商提供的服务范围确实令人惊叹。预建模型、快速硬件、出色的API。请注意成本。
在考虑费用时,您需要了解费用的计算方式。将数据上传到提供商是否需要付费?下载结果呢?预请求的费用是多少,如何计算?有些服务会按请求收费,有些会按处理单元收费,有些会按时间收费。您还需要考虑数据存储成本和可能适用的任何许可成本。
另请注意,成本将在很大程度上受到任务的影响:传递应用于预训练模型的数据是一回事,但传递用于训练新模型的TB数据的成本要高出几个数量级。例如,据传GPT-3的训练成本约为500万美元。
有多种选择可以降低您的成本。一种方法是混合和匹配服务提供商:将您的数据上传并存储到具有廉价存储空间的提供商(例如DELL)。将此数据发送到可能没有存储摄取费用的Azure,训练模型,然后将结果发送回您的DELL存储。您的数据是安全的,并且存储在一个提供商上的成本相对较低,而另一个提供商已经完成了训练您的模型的繁重工作。由于它们所在的管道很大,在大型托管服务提供商之间发送数据通常非常快。
如果您只是使用托管服务提供商进行AI推理(即将数据发送到AI模型以由模型进行预测或分析),那么您还应该受到限制,例如限制调用的绝对数量,以及任何限制在给定时间段内调用次数的限制。如果某项功能因为其他用户用完您当天的配额而消失,您的用户将如何反应?
您还需要了解数据的去向以及该司法管辖区的法律如何影响您。您的数据副本是否会存储在外国司法管辖区?您的数据馈送是否会被监控或提供给第三方?来自某人家中的网络摄像头提要可能不是用户或您的应用想要知道的内容被发送到国外进行处理。如果将个人身份数据发送到您所在的国家/地区之外,您甚至可能需要注意法律或保险限制。
优点
缺点
那么,如果您不想为AI编写自己的代码,您想使用您选择的任何语言或平台进行AI分析,您不希望您的数据离开您的本地网络(甚至您的机器)怎么办?并且您不想为您知道免费提供的服务支付未知金额。
本地托管的AI服务(例如CodeProject SenseAI)是两全其美的AI服务的一个很好的例子。您无需担心处理库和版本,任何可以进行HTTP调用的语言都可以与服务交互。
优点
缺点
将AI添加到应用程序可以从根本上扩展应用程序的功能,同时降低复杂性。启发式和硬编码的if-then语句被基于(希望)传统二进制逻辑无法轻易包含的广泛现实世界数据的训练集所取代。
您添加AI的方式具有同样重要的后果,您选择如何执行此操作取决于您的要求、预算以及最终您的情况。
在 CodeProject ,我们已经尝试了上述所有方法,将AI添加到我们的系统中。我们的经历从对某些方法的简单性感到惊喜,到对每一步都必须与这些工具作斗争而彻底愤怒。
最后,我们想与尽可能多的开发人员分享我们与AI合作的经验(和乐趣),而不要求他们经历挫折。寻找兼容的库,处理模型、系统工具、路径、操作系统之间的异常以及不同CPU上相同操作系统之间的异常,过去和现在仍然非常耗时。我们构建 SenseAI Server是为了将这种复杂性封装到一个独立的包中,为您完成所有繁重的工作。安装后,您就可以立即开始在您的应用程序中使用和使用AI。
下载安装程序并试一试。
https://www.codeproject.com/Articles/5330374/5-ways-to-add-Artificial-Intelligence-to-an-existi