大语言模型基础与英特尔实践
本实验基于英特尔大模型优化加速技术对大模型预测进行加速,常见的优化优化技术包括:量化(Quantization)、混合精度(Mixed Precision)、剪枝/稀疏性(Pruning/Sparsity)和蒸馏(Distillation)。
LLM(Low-Level Machine)相关的优化技术包括:平滑量化(Smooth Quant)、仅权重量化(Weight only Quantization)和FP8。
-
英特尔技术介绍
本实验基于Intel® Extension for Transformers, Intel® Extension for Transformers是一个创新的工具包,旨在通过在多种Intel平台上优化Transformer模型的性能,包括Intel Gaudi2、Intel CPU和Intel GPU,加速GenAI/LLM在各个领域的应用。该工具包提供以下关键功能和示例:
- 通过扩展Hugging Face transformers API和利用Intel® Neural Compressor,实现对基于Transformer的模型的无缝模型压缩用户体验。
- 高级软件优化和独特的压缩感知运行时(与NeurIPS 2022的论文《Fast Distilbert on CPUs and QuaLA-MiniLM: a Quantized Length Adaptive MiniLM》,以及NeurIPS 2021的论文《Prune Once for All: Sparse Pre-Trained Language Models》一起发布)。
- 优化的基于Transformer的模型包,如Stable Diffusion、GPT-J-6B、GPT-NEOX、BLOOM-176B、T5、Flan-T5,以及基于SetFit的文本分类和文档级情感分析(DLSA)等端到端工作流程。
- NeuralChat,一个可定制的聊天机器人框架,利用丰富的插件(如知识检索、语音交互、查询缓存和安全防护)可以在几分钟内创建自己的聊天机器人。该框架支持Intel Gaudi2/CPU/GPU。
- 在纯C/C++中进行大型语言模型(LLM)的推理,利用仅权重量化内核,支持Intel CPU和Intel GPU(待定),支持GPT-NEOX、LLAMA、MPT、FALCON、BLOOM-7B、OPT、ChatGLM2-6B、GPT-J-6B和Dolly-v2-3B。支持AMX、VNNI、AVX512F和AVX2指令集。我们提升了Intel CPU的性能,特别关注代号为Sapphire Rapids的第四代Intel Xeon Scalable处理器。
-
实验过程及结果
- 配置英伟达conda python环境:设置用于实验的Python环境。
cd /opt/conda/envs mkdir itrex wget https://filerepo.idzcn.com/LLM/itrex.tar.gz tar -zxvf itrex.tar.gz -C itrex/ conda activate itrex
- 下载中文大模型与embedding model:克隆所需的模型代码库
! git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git ! git clone https://www.modelscope.cn/AI-ModelScope/bge-base-zhv1.5.git
- 运行模型
3.1 新建文件 sample.jsonl: 创建包含输入内容的JSONL文件。
3.2 构建 chatbot: 使用neural_chat模块构建聊天机器人,并配置插件和优化设置。{"content": "cnvrg.io 网站由 Yochay Ettun 和 Leah Forkosh Kolben 创建.", "link": 0}
from intel_extension_for_transformers.neural_chat import PipelineConfig from intel_extension_for_transformers.neural_chat import build_chatbot from intel_extension_for_transformers.neural_chat import plugins from intel_extension_for_transformers.transformers import RtnConfig plugins.retrieval.enable=True plugins.retrieval.args['embedding_model'] = "./bge-base-zh-v1.5" plugins.retrieval.args["input_path"]="./sample.jsonl" config = PipelineConfig(model_name_or_path='./chatglm3-6b', plugins=plugins, optimization_config=RtnConfig(compute_dtype="int8", weight_dtype="int4_fullrange")) chatbot = build_chatbot(config)
3.3 disable retrieval: 禁用检索功能,直接使用大模型进行预测。plugins.retrieval.enable=False # disable retrieval response = chatbot.predict(query="cnvrg.io 网站是由谁创建的?") print(response)
输出结果:
3.4 RAG: 结合知识库检索和生成,启用检索功能。plugins.retrieval.enable=True # enable retrieval response = chatbot.predict(query="cnvrg.io 网站是由谁创建的?") print(response)
输出结果:
当检索功能被禁用时,模型直接使用其内部知识进行预测。
当检索功能被启用时,模型会结合检索到的信息和生成的响应来提供答案。 - 配置英伟达conda python环境:设置用于实验的Python环境。
-
实验心得
- 在本次实验中,我深入探索了英特尔技术如何通过一系列优化技术,如量化、混合精度、剪枝/稀疏性和蒸馏,来提高大型语言模型(LLM)的性能。实验特别关注了Intel® Extension for Transformers,这是一个专为Intel平台设计的优化工具包,旨在加速基于Transformer的模型在各个领域的应用。
- 实验开始于配置一个专门的Python环境,这为后续的模型下载和运行提供了必要的基础。通过克隆代码库,获取了所需的中文大模型和embedding model。随后,构建一个基于neural_chat模块的聊天机器人,并对其插件和优化配置进行了深入的理解和应用。
- 实验过程特别关注了如何通过禁用和启用检索功能来影响模型的预测结果。当检索功能被禁用时,模型依赖于其内部知识进行预测,这考验了模型的内部知识库和生成能力。而当检索功能被启用时,模型能够结合检索到的信息和生成的响应,这不仅提高了答案的准确性,也展示了模型在结合检索和生成方面的灵活性。
通过英特尔技术的优化,大型语言模型在性能上得到了显著提升。无论是在纯C/C++环境中进行推理,还是在结合检索和生成的场景中,模型都能够快速且准确地提供响应。英特尔提供的优化技术和工具包不仅提高了模型的运行效率,也为模型的应用提供了更多可能性。特别是在多模态和跨领域的场景中,这些技术的运用极大地扩展了模型的应用范围。