0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用OpenVINO GenAI API的轻量级生成式AI

英特尔中国 来源:英特尔中国 2024-07-24 15:08 次阅读

随着 ChatGPT 等聊天机器人的风暴席卷全球,生成式预训练 Transformers (GPT) 在开发者中正在成为家喻户晓的新名字。生成式 AI(GenAI) 的发展,尤其是大语言模型和聊天机器人的进步很快、变化不断,很难预测接下来会有什么突破,开发者应该关注什么。我们知道生成式AI将继续存在,开发人员希望看到在本地开发、维护和部署 AI 应用程序的更简洁明了的方法。

尽管生成式AI 令人兴奋,但对这些模型运行推理仍面临重大挑战,尤其是在边缘设备和 AI PC 上。

OpenVINO

英特尔硬件上当前最先进的生成式AI

如今,为了在 Intel 硬件上获得 生成式AI 的最佳性能,开发人员可以使用 Optimum Intel 和 OpenVINO 后端优化的 Hugging Face 流水线来运行 生成式AI 模型。OpenVINO 可以在 CPUGPU或NPU 上启用优化,这些可以显著减少延迟并提高运行效率。此外,我们可以利用量化和权重压缩等模型优化技术来最小化内存占用(减少 2-3 倍的内存使用量)。这通常是模型部署中的主要瓶颈,因为客户端或边缘设备仅配备 32GB 或更少的 内存。

图 1:借助新的 OpenVINO 生成式AI API (GenAI API),我们可以在代码编写方面做得更好!如上图所示,推理代码仅减少到3行代码!这种新的工作流程为开发者提供了一个低得多的的学习曲线,从而开始生成式AI 应用程序的开发之旅。

不仅代码行数大大减少了,而且安装的依赖项只有寥寥几个,从而形成了一个简洁紧凑的环境,运行生成式AI 推理仅需216Mb!

图 2:使用 OpenVINO GenAI API 部署解决方案不仅可以减少磁盘使用量,还可以简化构建生成式 AI 应用的依赖性要求。这通常是开发人员开始维护 生成式AI 应用程序时面临的最大挑战之一。

OpenVINO生成式AI API Optimum-Intel
附加的依赖项 非常轻 许多依赖项,包括 PyTorch 等
推理代码 非常轻的编码 基于Hugging Face
API Python, C++ Python
模型支持 大语言模型(其它生成式模型即将推出) 广泛的模型集
采样方法 贪心、波束搜索以及多项式解码 全部
并行生成优化 是的* (比如 Continues-batching, Paged-attention…) 不支持
分词 通过 OpenVINO tokenizer模型完成 通过 Hugging Face tokenizer 完成(仅针对Python)
*特性持续开发中

表 1:OpenVINO GenAI API 与 Optimum-Intel 软件包的比较

与 Optimum-Intel 相比,GenAI API 仅集成了最常用的采样方法,包括贪心和波束搜索。同时,开发者还可以通过多项式解码 来自定义采样参数,例如 Top-k、Temperature等。

考虑到多用户的场景,GenAI API 仅原生实现了 Continues-batching、Paged-attention。在文本生成过程中,这些技术可以帮助提高性能并优化在进行多批次推理时的内存消耗。

由于 Hugging Face 的分词器只能与 Python 配合使用,为了与 OpenVINO C++ 运行时的输入/输出张量格式保持一致,GenAI API 将分别通过推理 2 个 OpenVINO 模型来对输入文本分词并对输出解分词。在这种方法之前,开发人员可以使用 Optimum-Intel CLI 将 Hugging Face 的分词器转换为 OpenVINO IR 模型。

到目前为止,我们已经强调了使用新的 OpenVINO GenAI API 的一些关键优势。在下一节中,我们将更深入地了解如何逐步运行演示。

OpenVINO

使用 OpenVINO GenAI API 的轻量级生成式AI

安装

设置新的 OpenVINO GenAI API 以在生成式 AI 和 LLM 上运行推理,设计简单明了。安装过程可以通过 PyPI 或下载存档来执行,让您可以灵活地选择最适合您需求的方法。例如,您可以使用以下内容进行 PyPI 安装,该安装包含在我们最新的 OpenVINO 2024.2 版本中:

python-mpipinstallopenvino-genai

关于安装的更多信息可以在 https://docs.openvino.ai/2024/get-started/install-openvino/install-openvino-genai.html 找到。

运行推理

安装 OpenVINO 后,您可以开始在 GenAI 和 LLM 模型上运行推理。通过利用此 API,您可以加载模型,向其传递上下文,并仅使用几行代码接收响应。

在内部,OpenVINO 处理输入文本的标记化,在您选择的设备上执行生成循环,并提供最终响应。让我们根据 openvino.genai(https://github.com/openvinotoolkit/openvino.genai/tree/master/samples/cpp/chat_sample) 存储库中提供的chat_sample(https://github.com/openvinotoolkit/openvino.genai/tree/master/samples/cpp/chat_sample)范例,在 Python 和 C++ 中逐步探索这个过程。

第一步: 必须使用 Hugging Face Optimum-Intel(在本例中,我们使用聊天调优的 Tiny Llama)下载 LLM 模型并将其导出为 OpenVINO IR 格式。对于此步骤,建议创建一个单独的虚拟环境,以避免任何依赖项冲突。例如

python-mvenvopenvino_venv

激活它,

openvino_venvScriptactivate

并安装依赖项,这是模型导出过程所必需的。这些要求可在 openvino.genai 仓库中找到

python-mpipinstall–upgrade-strategyeager-rrequirements.txt

要下载和导出模型,请使用以下命令。

optimum-cliexportopenvino--trust-remote-code--
modelTinyLlama/TinyLlama-1.1B-Chat-v1.0TinyLlama-1.1B-Chat-v1.0

为了提高 LLM 推理期间的性能,我们建议对模型权重使用较低的精度,例如 INT4。在模型导出过程中,您可以使用神经网络压缩框架 (NNCF) 压缩权重,如下所示。

optimum-cliexportopenvino--trust-remote-code--
modelTinyLlama/TinyLlama-1.1B-Chat-v1.0-–weight-formatint4TinyLlama-
1.1B-Chat-v1.0

此步骤中安装的虚拟环境和依赖项不再需要,因为模型只需导出一次。请随意从磁盘中删除此虚拟环境。

第二步:通过 Python 或 C++ API 运行LLM文本生成的推理

通过新的 Python API 设置流水线:

pipe=ov_genai.LLMPipeline(model_path,"CPU")
print(pipe.generate("TheSunisyellowbecause"))

通过新的 C++ API 设置流水线:

intmain(intargc,char*argv[]){
std::stringmodel_path=argv[1];
ov::LLMPipelinepipe(model_path,"CPU");//targetdeviceisCPU
std::cout<< pipe.generate("The Sun is yellow because"); //input context

如上所示,构建 LLM 生成流水线现在只需要几行代码。这种简单性是由于从 Hugging Face Optimum-Intel 导出的模型已经包含执行所需的所有信息,包括 tokenizer/detokenizer 和生成配置,确保结果与 Hugging Face 生成一致。我们提供 C++ 和 Python API 来运行 LLM,对应用程序的依赖性和添加性最少。

提供的代码在 CPU 上运行,但通过将设备名称替换为“GPU”,可以很容易地使其在 GPU 上运行:

pipe=ov_genai.LLMPipeline(model_path,"GPU")

为了创建更具交互性的用户界面,我们添加了对流式模型输出标记的支持,以便在模型生成输出词后立即提供输出词,也可以通过从流处理器返回 True 来随时停止令牌生成。

此外,有状态模型(https://docs.openvino.ai/2024/openvino-workflow/running-inference/stateful-models.html)在内部运行,用于推理文本生成,从而加快生成速度并减少由于数据表示转换而产生的开销。因此,在输入之间保持 KV缓存被证明可能是有益的。用针对聊天的特定方法 start_chat 和 finish_chat标记对话会话来加以实现,如以下示例所示。

Python:

importargparse
importopenvino_genai




defstreamer(subword):
print(subword,end='',flush=True)
#Returnflagcorrespodswhethergenerationshouldbestopped.
#Falsemeanscontinuegeneration.
returnFalse
model_path=TinyLlama-1.1B-Chat-v1.0


device='CPU'#GPUcanbeusedaswell
pipe=openvino_genai.LLMPipeline(args.model_dir,device)


config=openvino_genai.GenerationConfig()
config.max_new_tokens=100


pipe.start_chat()
whileTrue:
prompt=input('question:
')
if'Stop!'==prompt:
break
pipe.generate(prompt,config,streamer)


print('
----------')
pipe.finish_chat()

C++:

#include"openvino/genai/llm_pipeline.hpp"


intmain(intargc,char*argv[])try{
if(2!=argc){
throwstd::runtime_error(std::string{"Usage:"}+argv[0]+"");
}
std::stringprompt;
std::stringmodel_path=argv[1];


std::stringdevice="CPU";//GPUcanbeusedaswell
ov::LLMPipelinepipe(model_path,"CPU");

ov::GenerationConfigconfig;
config.max_new_tokens=100;
std::functionstreamer=[](std::stringword){
std::cout<< word << std::flush;
        // Return flag correspods whether generation should be stopped.
        // false means continue generation.
        return false; 
    };


    pipe.start_chat();
    for (;;) {
        std::cout << "question:
";
        
        std::getline(std::cin, prompt);
        if (prompt == "Stop!") 
            break;


        pipe.generate(prompt, config, streamer);
        
        std::cout << "
----------
";
    }
    pipe.finish_chat();
} catch (const std::exception& error) {
    std::cerr << error.what() << '
';
    return EXIT_FAILURE;
} catch (...) {
    std::cerr << "Non-exception object thrown
";
    return EXIT_FAILURE;
}

最后,以下是我们在 AI PC 上运行上述示例时得到的结果:

图 3:在 AI PC 上本地运行的基于 Llama 的聊天机器人的现场演示

总而言之 ,GenAI API 包括以下 API,可实现轻量级部署和代码编写:

generation_config – 用于启用生成过程自定义的配置,例如生成文本的最大长度、是否忽略句尾标记以及解码策略(贪心、波束搜索或多项式采样)的细节。

llm_pipeline - 提供用于文本生成的类和实用程序,包括用于处理输入、生成文本和使用可配置选项管理输出的流水线。

streamer_base - 用于创建 Streamer 的抽象基类。

tokenizer - 用于文本编码和解码的 Tokenizer 类。

visibility - 控制 生成式AI 库的可见性。

OpenVINO

总结

最新 OpenVINO 2024.2 版本中的新 OpenVINO 生成式AI API 提供了显著的优势和功能,使其成为开发人员创建 生成式AI 和大语言模型应用程序的强大工具。凭借其简单的设置过程和最小的依赖性,该 API 降低了代码复杂性,使您能够仅使用几行代码快速构建高效的 生成式 AI 推理流水线。此外,对流式模型输出分词的支持有助于创建交互式用户界面,从而增强用户体验。

我们欢迎您试用新的 生成式AI API,并在你的项目中探索更多功能!我们可以一起突破生成式AI通过开源可以实现的界限!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9848

    浏览量

    171197
  • ChatGPT
    +关注

    关注

    29

    文章

    1540

    浏览量

    7315
  • OpenVINO
    +关注

    关注

    0

    文章

    83

    浏览量

    162

原文标题:如何使用 OpenVINO™ 生成式AI API (GenAI API) 以更少的代码构建更快的生成式AI 应用

文章出处:【微信号:英特尔中国,微信公众号:英特尔中国】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表了《基于 OpenVINO Python API
    的头像 发表于 11-17 09:53 817次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署FastSAM模型

    创建51轻量级操作系统

    创建51轻量级操作系统
    发表于 09-29 09:58

    10个轻量级框架

    这些轻量级框架使用HTML5和CSS3标准来帮助您快速开发跨平台的Web移动应用和网站。
    发表于 07-17 08:25

    轻量级Agent平台怎么测试?

    跨平台的语言成功应用于嵌入设备中,同时也方便了嵌入环境下的轻量Agent(Lightweight Agent)的实现。本文在ARM嵌入环境下测试轻量级Agent平台。
    发表于 09-27 06:26

    轻量级深度学习网络是什么

    轻量级深度学习网络概览
    发表于 04-23 14:53

    Dllite_micro (轻量级AI 推理框架)

    DLLite-Micro 是一个轻量级AI 推理框架,可以为 OpenHarmony OS 的轻量设备和小型设备提供深度模型的推理能力DLLite-Micro 向开发者提供清晰、易上手的北向接口
    发表于 08-05 11:40

    介绍一款轻量级ARM AI智能网关产品

    用户需求国内某工业网关设备制造商计划推出一款轻量级AI智能网关产品,可应用于工业设备监控、工业现场动环监控、远程巡检等多种场景。在主控平台选型阶段,该用户主要面临高算力和功能接口丰富的叠加需求。其
    发表于 06-06 16:39

    谷歌开源TFGAN轻量级的工具库 目的是让训练和评估GAN变得更加简单

    三年前,蒙特利尔大学 Ian Goodfellow 等学者提出「生成对抗网络」(Generative Adversarial Networks,GANs)的概念,并逐渐引起 AI 业内人士的注意
    的头像 发表于 01-02 15:31 4892次阅读

    轻量级AI智能网关产品概述及应用优势

    国内某工业网关设备制造商计划推出一款轻量级AI智能网关产品,可应用于工业设备监控、工业现场动环监控、远程巡检等多种场景。在主控平台选型阶段,该用户主要面临高算力和功能接口丰富的叠加需求。其主控不但
    的头像 发表于 05-31 12:05 1973次阅读
    <b class='flag-5'>轻量级</b><b class='flag-5'>AI</b>智能网关产品概述及应用优势

    PSoC NeoPixel Easy轻量级

    电子发烧友网站提供《PSoC NeoPixel Easy轻量级库.zip》资料免费下载
    发表于 11-17 09:48 0次下载
    PSoC NeoPixel Easy<b class='flag-5'>轻量级</b>库

    测评分享 | 如何在先楫HPM6750上运行轻量级AI推理框架TinyMaix

    本期内容由先楫开发者社区大咖@xusiwei1236分享基于先楫HPM6750的轻量级AI推理框架,赶紧来瞧瞧~一、TinyMaix是什么?TinyMaix是国内sipeed团队开发一个轻量级
    的头像 发表于 12-12 17:57 1502次阅读
    测评分享 | 如何在先楫HPM6750上运行<b class='flag-5'>轻量级</b><b class='flag-5'>AI</b>推理框架TinyMaix

    轻量级数据库有哪些

    数据库系统由于其小巧、快速、易用等优势,越来越受到人们的青睐。那么,轻量级数据库有哪些?本文将为大家介绍几种常见的轻量级数据库系统。 1. SQLite SQLite被广泛应用于各种移动应用程序、Web应用程序和嵌入系统中。它
    的头像 发表于 08-28 16:41 5836次阅读

    OpenVINO™ C# API详解与演示

    OpenVINO C# API 支持 NuGet 程序包安装方式,这与 OpenVINO C++ 库的安装过程相比,更加简单。如果使用 Visual Studio 开发 AI 项目,则
    的头像 发表于 10-13 16:39 695次阅读
    <b class='flag-5'>OpenVINO</b>™  C# <b class='flag-5'>API</b>详解与演示

    三行代码完成生成AI部署

    OpenVINO2024.2版本跟之前版本最大的不同是OpenVINO2024.2分为两个安装包分别是基础包与生成AI支持包,新发布的
    的头像 发表于 08-30 16:49 350次阅读
    三行代码完成<b class='flag-5'>生成</b><b class='flag-5'>式</b><b class='flag-5'>AI</b>部署

    使用OpenVINO GenAI API在C++中构建AI应用程序

    许多桌面应用程序是使用 C++ 开发的,而将生成AIGenAI)功能集成到这些应用程序中可能会很具有挑战性,尤其是因为使用像 Hugging Face 这样的 Python 库的复
    的头像 发表于 10-12 09:36 253次阅读
    使用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>GenAI</b> <b class='flag-5'>API</b>在C++中构建<b class='flag-5'>AI</b>应用程序