点击蓝字
关注我们,让开发变得更有趣
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
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表示量化采用的对称性模式。
到此,我们完成了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 版,安装选项如下图所示。
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
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;
请手动把OpenVINO with GenAI库的路径添加到Windows的系统变量Path中,完成配置,如下图所示:
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项目的属性配置。
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中文社区
“开放、开源、共创”
致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。
○ 点击 “ 在看 ”,让更多人看见