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

openlab_96bf3613 更新于 2月前

作者:东莞职业技术学院 虞晓琼 博士

《五行代码实现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模型的推理程序。

1 OpenVINO™ 生成式AI简介

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


OpenVINO™生成式AI的关键优势详见《如何使用OpenVINO™ 生成式AI API以更少的代码构建更快的生成式AI应用》。
使用OpenVINO™ 生成式AI的C++ API编写Llama3.1模型的推理程序主要有两步:
1. 下载Llama3.1模型并完成INT4量化。
2. 用OpenVINO™ 生成式AI的C++ API编写推理程序。

2 下载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表示量化采用的对称性模式。


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

3 用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编写推理程序
3.1 下载并安装Visual Studio 2022 Community版
请读者从https://visualstudio.microsoft.com/zh-hans/downloads/下载并安装Visual Studio 2022 Community 版,安装选项如下图所示。


3.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的库,下载选项如下所示:

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

C:\Program Files (x86)\Intel

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

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

path
setupvar***at
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;

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



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

1. 配置OpenVINO with GenAI的包含目录
2. 配置OpenVINO with GenAI的库目录
3. 配置OpenVINO with GenAI的附加依赖项

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

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

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

在“配置(C)”栏选择“所有配置”,在“平台(P)”栏选择“所有平台”
在“输出目录”输入:$(SolutionDir)bin\$(Platform)\$(Configuration)\
在“中间目录”输入:$(SolutionDir)Intermediate\$(Platform)\$(Configuration)\
在“C++语言标准”选择:ISO C++ 17标准

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

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


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

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

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

openvino.lib
openvino_genai.lib


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

3.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

4 总结

OpenVINO™ 生成式AI的C++ API易学易用,仅需简单几行C++代码,即可完成Llama3.1模型的推理程开发并本地化运行在英特尔®酷睿™ Ultra处理器上。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/inteldevzone/article/details/142056631

0个评论