1.引言
这个项目的起源是参加Intel举办的BigDL大模型竞赛,这个竞赛旨在鼓励开发者利用Intel的BigDL框架和大型模型库来创新和解决实际问题。我们团队被这个机会所吸引,看到了在视觉和语音交互领域创新的巨大潜力。我们决定开发一个能将图像内容转换为语音描述的AI应用,这个应用的创意来源于团队成员的孩子要求父亲讲故事,于是就有了利用LLM改写绘本故事的想法。随后我们也意识到这个应用也可以用来为视障人士提供辅助,桥接视觉信息与语音输出之间的差距,使得视觉受限的人群能够通过听觉来理解和感知周围的世界。参加这场竞赛不仅为我们提供了展示技术实力的舞台,还促使我们深入研究并利用BigDL框架的高级功能和灵活性,从而开发出既创新又具有社会价值的应用程序。
2.技术背景
BigDL-LLM 是一个针对大语言模型的优化加速库,是开源 BigDL 的一部分,通过 Apache 2.0 许可证发布。它提供了各种低精度优化(例如 INT4/INT5/INT8),并可利用多种英特尔® CPU集成的硬件加速技术(AVX/VNNI/AMX 等)和最新的软件优化,来赋能大语言模型在英特尔® 平台上实现更高效的优化和更为快速的运行。
BigDL-LLM 的一大重要特性是:对基于 Hugging Face Transformers API 的模型,只需改动一行代码即可对模型进行加速,理论上可以支持运行任何 Transformers 模型,这对熟悉 Transformers API 的开发者非常友好。除了 Transformers API,很多人也会使用 LangChain 来开发大语言模型应用。为此,BigDL-LLM 也提供便于使用的 LangChain 的集成(3),从而让开发者能够轻松使用 BigDL-LLM 来开发新应用或迁移现有的、基于 Transformers API 或 LangChain API 的应用。此外,对于一般的 PyTorch 大语言模型(没有使用 Transformer 或 LangChain API 的模型),也可使用 BigDL-LLM 'optimize_model' API 一键加速来提升性能。
3.项目概述
该应用的工作流程分为三个关键步骤,以实现从图像到语音的转换。
首先是“图像到文本”(Image to Text)阶段,主要依赖于开源模型Recognize Anything。利用该项目的两款图像标记模型 RAM和Tag2Text,ReadIT有能力提取出图片上的关键信息,如物体、场景和活动等,将这些视觉内容转换为描述性文本。
接着,在“文本到文本”(Text to Text)阶段,则主要使用了BigDL-LLM官方推荐的Baichuan2-13B-Chat和chatglm2-6b两款开源模型。应用进一步处理这些描述性文本,进行语言优化和内容丰富,确保生成的文本既准确又易于理解。
最后的“文本到语音”(Text to Voice)阶段,则使用了三款开源模型,分别是coqui/XTTS-v2,microsoft/speecht5_tts和suno/bark。应用将优化后的文本转换为清晰流畅的语音输出,使得用户可以通过听觉获取图像信息。
为了提供用户友好的交互界面,我们选择了Streamlit来实现应用的前端。Streamlit的轻量化设计使得我们能够快速搭建出直观的界面,让用户能够轻松上传图片并接收语音反馈,无缝体验图像到语音的整个转换过程。这种设计不仅确保了应用的高效性和易用性,还为用户提供了一个直观且互动性强的使用环境。
4.开发过程
在整个开发过程中,我们面临的最大挑战出现在文本生成阶段。特别是使用Baichuan2-13B-Chat模型时,我们注意到它们生成的内容质量较高,展现出更优的内容逻辑性和语句流畅度,这在比较中显得尤为突出。然而,这款模型的表现不够稳定,其输出质量波动无常。此外,由于模型规模的增大,导致推理速度变慢,这成为一个显著的不足。性能的不稳定性和文本生成的延迟成为我们面临的主要障碍,影响了持续输出高质量、逻辑一致内容的能力。挑战在于如何在追求高品质、逻辑连贯的文本和实际需要迅速可靠输出之间找到平衡,尤其是在迅速生成内容至关重要的场景中。
模型调用及生成prompts的部分代码参考,
import torch
from bigdl.llm.transformers import AutoModelForCausalLM
from transformers import AutoTokenizer
class BaiChuan():
MODEL_PATH="baichuan-inc/Baichuan2-13B-Chat"
BAICHUAN_PROMPT_FORMAT = "<human>{prompt} <bot>"
PRETRAINED_PATH=f'pretrained/{MODEL_PATH}-bigdl-llm-INT4'
from data_models.tags_and_caption import TagsAndCaption
class PromptProcessor():
def __init__(self) -> None:
self.story_prompt = '''
Your job is to tell a story based on the below picture. Your audience will be 4 - 6 years old children.
Here is the picture, it shows {caption}.
The picture contians: {image_tags}.
Here are more details:
The upper left of the picture shows {upper_left_caption}
The upper left corner contains {upper_left_tags}
The upper right of the picture shows {upper_right_caption}
The upper right corner contains {upper_right_tags}
The lower left of the picture shows {lower_left_caption}
The lower left corner contains {lower_left_tags}
The lower right of the picture shows {lower_right_caption}
The lower right corner contains {lower_right_tags}
'''
5.BigDL-LLM加速库实验
在本次实验中,我们分别使用了两款云服务器进行大模型的推理运算,在两种平台上进行了BigDL-LLM性能优化的实验。
基于Intel云服务器的实验
服务器配置:
Processors: 16 Intel® Xeon® Platinum 8171M CPU @ 2.60GHz
Memory: 64G
众所周知,深度学习模型的推理要进行大量矩阵运算,在CPU上进行这些运算是非常吃力的,而大模型对算力要求极高,这使得在CPU上进行开源大模型应用的开发寸步难行。以THUDM/chatglm2-6b模型为例,在本实验Intel云服务器上调用32 token的completion推理耗时6m8s(图一)。
同样的,若直接在CPU上用该模型进行本报告中的故事创作,单次推理耗时达到了惊人的137m18s(图二)。
在使用BigDL-LLM进行加速后,相同的使用场景仅分别耗时5s(图三),1m10s(图四),速度提升超过100倍。并且随着文本长度的增加,BigDL-LLM的性能提升幅度越大。
我们注意到BigDL-LLM能够更加充分地发挥CPU的硬件优势,加速后CPU使用率从32%(图五)提升到了84%(图六)。
基于AMD云服务器的实验
服务器配置:
Processors: 16 AMD EPYC 7763 64-Core Processor
Memory: 64G
令人感到惊喜的是,虽然BigDL-LLM是针对Intel XPU平台的加速库,但在AMD云服务器上依然能够取得优秀的加速效果。在故事推理的场景下能够取得9m44s的成绩。
6.最终效果
7.未来方向
在竞赛的初赛阶段,我们的目标是构建一个能够基于单一图像生成语音的端到端系统。系统支持中文和英文的内容输出,能够适应多种应用场景,如旅游指导、教育辅助等,增强了其应用的广泛性和实用性。此外,我们还开发了一个基于Web的交互界面,使用户能夜方便地上传图片并接收相应的语音输出,提升了用户体验。
后续,我们将基于当前版本,针对特定应用场景深化系统功能。可以实现智能博物馆导览、故事机器人和视障辅助工具三个场景,这些应用将能够根据多图输入生成更加丰满和连贯的文本内容,更好地满足用户需求。同时,我们将引入支持多种人声风格的功能,为用户提供更加个性化和多样化的语音内容选择。为了确保系统的实用性,我们将进一步优化推理速度,以提供可接受的性能表现,确保用户在使用过程中能够获得流畅且连贯的体验。
8.结论
在这个项目开发过程中,我们深化了对AI领域,尤其是图像识别和语音合成技术的理解。学会了如何将复杂的AI模型和算法应用于实际问题,解决了从图像内容理解到语音输出生成的一系列技术挑战。此外,还获得了在高压竞赛环境下快速学习和适应新技术的能力,以及团队协作和项目管理的宝贵经验。这些学习成果不仅对我们当前的项目有重要贡献,也为我的职业生涯提供了宝贵的资本。
在BigDL框架下开发AI应用意味着能够充分利用Intel的硬件加速技术,如使用Intel的CPU和GPU资源来加速模型训练和推理过程。这种硬件优化进一步提升了应用的性能,降低了延迟,使得我们的应用能够在实时环境中更加高效地运行,轻薄本也能高效的跑大模型,对于大模型应用的普及意义深远。
开发者团队:金光闪闪