开发者实战丨用 OpenVINO™ 生成式AI 的 C++ API 部署 Llama3.1 模型

点击蓝字

关注我们,让开发变得更有趣

OpenVINO™

介绍

《五行代码实现Llama3.1在英特尔® 酷睿™ Ultra处理器上的部署》介绍了使用 optimum-intel 工具包,基于 Transformers 库的编程风格,实现大语言模型(LLMs)的部署。

《用 OpenVINO™ 生成式AI API 在酷睿™ Ultra处理器上部署 Llama3.1 模型》介绍了使用 openvino-genai 工具包,仅用两个 OpenVINO™ 生成式AI 的API,实现大语言模型(LLMs)的部署。

与 optimum-intel 工具包相比,openvino-genai 工具包不仅附加依赖软件包少,推理代码简单,支持并行生成优化,还提供了 C++ API。

本文将详述如何使用 OpenVINO™ 生成式AI 的 C++ API 编写 Llama3.1 模型的推理程序。

OpenVINO™

OpenVINO™ 生成式AI简介

OpenVINO™ GenAI,又名 OpenVINO™ 生成式AI API,是 OpenVINO™ 平台的一个新分支,针对生成式AI 模型这一特定应用场景,通过隐藏和封装生成式AI 推理计算的复杂度和技术细节,最大限度减少开发者编码工作,仅需不到十行 Python 或 C++ 代码,便能实现大语言模型的部署。

OpenVINO™ GenAI的Github代码仓为:

https://github.com/openvinotoolkit/openvino.genai

0e8283a17724f33056e3ffa792ab9a24.png

OpenVINO™ 生成式AI 的关键优势详见《如何使用 OpenVINO™ 生成式AI API 以更少的代码构建更快的生成式AI 应用》。

使用 OpenVINO™ 生成式AI 的 C++ API 编写 Llama3.1 模型的推理程序主要有两步:

1. 下载 Llama3.1 模型并完成 INT4 量化。

2. 用 OpenVINO™ 生成式AI 的 C++ API 编写推理程序。

OpenVINO™

下载Llama3.1模型并完成INT4量化

首先,请在https://www.anaconda.com/download下载并安装 Anaconda,然后用下面的命令创建并激活名为 llama31 的虚拟环境,然后安装相关依赖项,尤其是 OpenVINO™ 生成式AI工具包:openvino-genai。

conda create -n llama31 python=3.11    #创建虚拟环境
conda activate llama31          #激活虚拟环境
python -m pip install --upgrade pip    #升级pip到最新版本
pip install optimum-intel[openvino,nncf]  #安装Optimum Intel和其依赖项openvino与nncf
pip install openvino-genai        #安装最新的openvino-genai
pip install -U transformers        #升级transformers库到最新版本

注意:OpenVINO 2024.3已发布,关键软件包的版本如下:

openvino>=2024.3.0
openvino-genai>=2024.3.0.0
openvino-tokenizers>=2024.3.0.0
transformers>=4.43.3
Nncf>=2.12.0

若在后续的运行中出现报错:

OSError: [WinError 126] 找不到指定的模块。Error loading "C:\Users\AIPC\anaconda3\envs\genai\Lib\site-packages\torch\lib\fbgemm.dll" or one of its dependencies

请卸载掉 torch,然后用 conda 重新安装:

pip uninstall torch
conda install pytorch torchvision -c pytorch

然后,从魔搭社区下载Meta-Llama-3.1-8B-Instruct模型:

git clone https://www.modelscope.cn/llm-research/meta-llama-3.1-8b-instruct.git

最后,用 optimum-cli 工具对 Llama3.1 模型进行 INT4 量化。optimum-cli 是 Optimum Intel 自带的跨平台命令行工具,可以不用编写量化代码,用命令实现对 Llama3.1 模型的量化并转化为 OpenVINO™ IR 格式模型:

optimum-cli export openvino --model D:\Meta-Llama-3.1-8B-Instruct --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8 --sym llama31_int4

optimum-cli命令的参数意义如下:

  • --model指定了被量化的模型路径;

  • --task指定了任务类型;

  • --weight-format指定了模型参数精度;

  • --group-size定义了量化过程中的组大小;

  • --ratio决定了量化过程中保留的权重比例;

  • --sym表示量化采用的对称性模式。

3f29c9abf111e1006ca3779135bbed92.png

到此,我们完成了Llama3.1模型的下载与INT4量化。

OpenVINO™

用 OpenVINO™ 生成式AI 的 C++ API

编写推理程序

用OpenVINO™ 生成式AI的C++ API编写推理程序,首先需要搭建C++开发环境,然后调用OpenVINO™ 生成式AI的C++ API编写推理程序,具体步骤有:

1. 下载并安装Visual Studio 2022 Community版

2. 下载并配置OpenVINO with GenAI库

3. 在Visual Studio中新建并配置项目属性

4. 调用OpenVINO™ 生成式AI的C++ API编写推理程序

1. 下载并安装Visual Studio 2022 Community版

请读者从https://visualstudio.microsoft.com/zh-hans/downloads/下载并安装Visual Studio 2022 Community 版,安装选项如下图所示。

caa75fe47103356ead1bad6679de7607.png

2. 下载并配置OpenVINO with GenAI库

Visual Studio 2022 Community 版安装完毕后,请到https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html下载OpenVINO with GenAI的库,下载选项如下所示:

6ae0a0e63a354c6ebbeaf591fe4e54cc.png

4bfc4aa090f7a23052a5ff13f4a2780c.png

openvino_genai_windows_2024.3.0.0_x86_64.zip 下载到本地后,请解压到:

C:\Program Files (x86)\Intel

文件夹下,并改为名为 openvino_genai_2024.3,如下图所示:

8d733a983a568eb24da6f3906425c7eb.png

在命令行界面中,C:\Program Files (x86)\Intel\openvino_genai_2024.3 路径下,执行命令:

path
setupvars.bat
path

获取 OpenVINO™ GenAI C++ 库的路径,如下图所示:

C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\3rdparty\tbb\bin;
C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\3rdparty\tbb\bin\intel64\vc14;
C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\3rdparty\tbb\redist\intel64\vc14;
C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\bin\intel64\Release;
C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\bin\intel64\Debug;

2968254e0085dede350a462dd9b439d2.png

请手动把OpenVINO with GenAI库的路径添加到Windows的系统变量Path中,完成配置,如下图所示:

5ec712f89b3acb3348ea44008cb681c6.png

3. 在Visual Studio中新建并配置项目属性

在Visual Studio中新建并配置项目属性,具体步骤有:

1. 配置OpenVINO with GenAI的包含目录

2. 配置OpenVINO with GenAI的库目录

3. 配置OpenVINO with GenAI的附加依赖项

首先,请在Visual Studio中新建一个名为genai的C++空项目:

a3862797988f63c1b1b03a6bfaf9d16d.png

然后,在“文件(F)菜单”中选择“新建(N)→文件(F)”,新建一个 main.cpp 文件,并添加到项目管理器的源文件文件夹中。

0b1aa21df255de2a7ee0ddc931a9d3b6.png

接着,在“解决方案资源管理器”中,右键单击项目名称genai,在右键菜单中选择“属性(R)”,启动“属性页”对话框:

在“配置(C)”栏选择“所有配置”,在“平台(P)”栏选择“所有平台”

在“输出目录”输入:$(SolutionDir)bin\$(Platform)\$(Configuration)\

在“中间目录”输入:$(SolutionDir)Intermediate\$(Platform)\$(Configuration)\

在“C++语言标准”选择:ISO C++ 17标准

881a7102f25bd24d3793ac23f2e1b085.png

接下来,在“属性页”对话框中选中“VC++目录”;在“平台(P)”栏选择“x64”;在“包含目录”中输入:

C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\include

e1413ebfc3deb4e3f1b54aea13b81462.png

下一步,在“属性页”对话框中选中“VC++目录”;在“配置(C)”栏选择“Release”;在“库目录”中输入:

C:\Program Files (x86)\Intel\openvino_genai_2024.3\runtime\lib\intel64\Release

c10043804b843839f18f06360e0a88b4.png

最后一步,在“属性页”对话框中选中“链接器→输入”;在“配置(C)”栏选择“Release”;在“附加依赖项”中输入:

openvino.lib
openvino_genai.lib

3bf5c529799cbcbcb971d76d43f3355d.png

完成在Visual Studio中,对OpenVINO with GenAI项目的属性配置。

4. 调用OpenVINO™ 生成式AI的C++ API编写推理程序

调用OpenVINO™ 生成式AI的C++ API,编写Llama3.1模型的完整范例程序,如下所示:

#include "openvino/genai/llm_pipeline.hpp"
#include <iostream>
int main(int argc, char* argv[])
{
    std::string model_path = "D:\\llama31_int4";
    std::string prompt;
    ov::genai::LLMPipeline pipe(model_path, "GPU");
    ov::genai::GenerationConfig config;
    config.max_new_tokens = 1000;
    std::function<bool(std::string)> streamer = [](std::string word) {
        std::cout << word << std::flush;
        return false;
        };


    pipe.start_chat();
    for (;;) {
        std::cout << "question:\n";
        std::getline(std::cin, prompt);
        if (prompt == "Stop!")
            break;
        pipe.generate(prompt, config, streamer);
        std::cout << "\n----------\n";
    }
    pipe.finish_chat();
}

本文的范例代码下载:

git clone https://gitee.com/Pauntech/llama3.1-model.git

OpenVINO™

总结

OpenVINO™ 生成式AI 的 C++ API 易学易用,仅需简单几行 C++ 代码,即可完成 Llama3.1 模型的推理程开发并本地化运行在英特尔®酷睿™ Ultra处理器上。

OpenVINO™

---------------------------------------

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

-----------------------------

 OpenVINO 中文社区 

微信号 : openvinodev

B站:OpenVINO中文社区

“开放、开源、共创”

致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。

○ 点击 “ 在看 ”,让更多人看见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值