1. 前言
近期,百度正式开源了文心大模型 4.5 多模态大模型。文心大模型 4.5 系列开源模型包含多款参数规模不同的混合专家模型及稠密参数模型,其中部分 VL 模型支持多模态特性,可理解图片、音频、视频等非文本内容。本次开源的多个参数模型在大模型基准测试中取得了突出效果。本文将对文心大模型 4.5 系列开源模型进行测评。
[图片]
2. 测评的软硬件环境
2.1 CPU
16 核 X86 架构 Intel 处理器
2.2 内存
64G 内存
2.3 GPU
Nvidia A100 80G 显存
2.4 软件环境
操作系统使用 Ubuntu 22.04,软件环境使用 Python 3.10、PyTorch 2.7。
[图片]
2.5 模型选择
因文心大模型 4.5 的核心能力是多模态,本次测评选用的模型是 ERNIE-4.5-VL-28B-A3B-Paddle。为展示对比效果,同步测试通义千问的多模态开源大模型 Qwen2.5-VL-32B-Instruct。
3. 模型部署
得益于 AI 框架的完善,模型部署已较为便捷。百度飞桨框架支持基于 Transformer 快速部署。资源占用上,文心大模型文件约 55GB,相比千问的 68GB 略小,显存消耗略有优势。
3.1 GPU 准备
需一台 80G 显存的英伟达 A100 显卡主机,可选择主流算力租赁平台。
[图片]
依次执行以下命令,完成相关工具和模型的下载、安装和推理。
3.2 安装 GPU 版本的 PaddlePaddle
python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
[图片]
3.3 安装 A100 显卡专用的 FastDeploy
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
[图片]
注意如果使用的是 4090 显卡,需要更换安装命令,具体参考 PaddlePaddle 帮助文档:https://paddlepaddle.github.io/FastDeploy/get_started/installation/nvidia_gpu/。
[图片]
3.4 使用 FastDeploy 一键完成模型下载和推理
python -m fastdeploy.entrypoints.openai.api_server \
--model baidu/ERNIE-4.5-VL-28B-A3B-Paddle \
--port 8180 \
--metrics-port 8181 \
--engine-worker-queue-port 8182 \
--max-model-len 32768 \
--enable-mm \
--reasoning-parser ernie-45-vl \
--max-num-seqs 32
[图片]
如下图所示,看到 8180 端口成功启动之后,表示成功的把文心大模型 4.5 28b 模型部署运行起来了。
[图片]
4. 多模态图像识别能力的测评
4.1 明星人物识别
[图片]
以奥黛丽·赫本在厨房摆弄烤箱的照片进行演示,对比文心大模型和通义千问两个多模态模型的识别结果。
4.1.1 Qwen2.5-VL-32B 的识别结果
[图片]
Qwen2.5-VL-32B 模型识别出了这是一位女性在厨房里操作烤箱,并对厨房的一些场景构造、物体摆放进行了详细的描述。
4.1.2 ERNIE-4.5-VL-28B-A3B 的识别结果
[图片]
ERNIE-4.5-VL-28B-A3B 模型识别到了图片中的人物是奥黛丽·赫本在厨房操作烤箱,同样也把厨房的场景构造和物体摆放等进行了识别和分析。
4.1.3 对比分析
通过对比可以看到,文心大模型精准地识别到了奥黛丽·赫本,并对图片中的环境和相关元素进行了描述。虽然千问大模型也很准确地识别出了照片中的各种物体和摆放造型等,但未识别出主人公奥黛丽·赫本。虽然参数量少,模型小,但是多模态的识别效果并不差,甚至更胜一筹。从运行时间来看,文心大模型返回结果的耗时也比千问更有优势。总体来看,文心在响应速度上也占据了一定优势。
4.2 基于 Gradio 库的文心大模型前端交互页面
为了方便调用 ERNIE-4.5-VL-28B-A3B 大模型,使用 Python 的 Gradio 库编写一个大模型前端交互页面,支持图片和文本的输入,源码如下:
import gradio as gr
import requests
import json
import os
from PIL import Image
import io
import time
import uuid
def process_multimodal_input(image, text_input, history):
"""处理多模态输入并调用 API"""
if image is None and not text_input.strip():
return history, "请上传图片或输入文本"
url = "http://127.0.0.1:8180/v1/chat/completions"
headers = {"Content-Type": "application/json"}
content = []
if image is not None:
temp_dir = "temp_images"
os.makedirs(temp_dir, exist_ok=True)
temp_path = os.path.abspath(f"{temp_dir}/temp_image_{uuid.uuid4()}.jpg")
image.save(temp_path)
image_url = f"file://{temp_path}"
content.append({"type": "image_url", "image_url": {"url": image_url}})
if text_input.strip():
content.append({"type": , : text_input})
:
image :
content.append({: , : })
user_message = {: , : content}
messages = []
msg history:
msg[]:
messages.append({: , : [{: , : msg[]}]})
msg[]:
messages.append({: , : msg[]})
messages.append(user_message)
payload = {: messages}
history.append((text_input text_input.strip() , ))
history,
:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data = response.json()
response_data (response_data[]) > :
result = response_data[][][][]
history[-] = (history[-][], result)
history,
:
error_msg =
history[-] = (history[-][], error_msg)
history,
Exception e:
error_msg =
history[-] = (history[-][], error_msg)
history,
():
[],
gr.Blocks(title=) demo:
gr.Column():
gr.Row():
gr.Markdown()
chatbot = gr.Chatbot(height=)
image_input = gr.Image(=, label=, visible=)
text_input = gr.Textbox(
placeholder=,
label=,
lines=,
max_lines=
)
gr.Row():
upload_btn = gr.UploadButton(, file_types=[])
send_btn = gr.Button()
gr.Row():
gr.Markdown()
():
image
upload_btn.upload(
fn=handle_image_upload,
inputs=[upload_btn],
outputs=[image_input]
)
send_btn.click(
fn=process_multimodal_input,
inputs=[image_input, text_input, chatbot],
outputs=[chatbot, text_input]
).then(
fn=: ,
inputs=[],
outputs=[image_input]
)
text_input.submit(
fn=process_multimodal_input,
inputs=[image_input, text_input, chatbot],
outputs=[chatbot, text_input]
).then(
fn=: ,
inputs=[],
outputs=[image_input]
)
__name__ == :
demo.queue()
demo.launch(server_name=)
4.3 图片验证码识别
接下来,我们再做一个实验,以下面这张验证码图片为例,继续验证文心大模型的图像识别理解能力。
[图片]
接下来,我们通过该页面上传图片,让 ERNIE-4.5-VL-28B-A3B 模型进行识别。
[图片]
如上图所示,通过识别结果,我们可以看到,文心大模型顺利地把验证码识别了出来,甚至连大小写都精准的做了区分。这个效果显著,优于市面上一众 OCR 模型。
5. 自媒体创作场景测评
通过上面 2 个多模态例子,可以看到,文心大模型 4.5 的多模态图像识别理解能力非常强大。作为产业级知识增强大模型,它的场景化能力表现如何呢?做过自媒体的同学都知道,内容创作有 3 大难,分别是起号难、创意难、写作难。既然文心大模型 4.5 的视觉识别能力这么强,那接下来,我们就以自媒体创作这个典型场景对它进行深挖拷打,看看它能不能给我们的自媒体创作也带来新的超预期惊喜。
5.1 爆文分析
[图片]
这是一篇阅读量十万 W+ 甚至百万 + 的一篇微信公众号文章,可谓是超级爆文,我们复制文章内容,让文心大模型分析一下这篇文章的爆点在哪里。
[图片]
从结果可以看到,文心大模型给出了很有含金量的分析结果,包括选题、内容、观点、语言表达等多方面,分析结论非常清晰明确。有了文心大模型的爆文分析帮助,可以帮助我们快速获悉爆文账号的特点和文章写作手法,让我们也有了冲的机会,这就为我们解决了第一个起号难的问题。
5.2 创意生成
接下来,我们以职场自媒体为切入点,让文心大模型给我们梳理几个职场自媒体的灵感话题,用于扩充我们的自媒体创作素材库。
prompt:我是一个职场自媒体创作者,最近比较缺乏灵感,可以给我整理几个更容易成为爆文的话题吗?
[图片]
如上图所示,文心大模型化身为一位资深的职场自媒体创作者,精准捕捉到了职场人的真实痛点,然后结合了当前职场趋势和读者需求,精心整理的几个更容易成为爆文的话题方向。这就为我们解决了第二个创意难的问题。
5.3 内容创作
好,素材和灵感都有了,我们继续让文心大模型完成初稿的编写,看看他的写作水平如何。
prompt:作为一个职场自媒体博主,请以《30 岁转行避坑指南:5 个血泪教训,现在知道还不晚》作为文章标题,写一篇 1100 字的微信公众号文章。要求选题贴近大众,引发共鸣,争取成为爆款。
如上图所示,文心大模型根据我们的要求,为我们创作了一篇优秀并富有吸引力的微信公众号文章初稿,我们只需要对其进行稍加润色,就是一篇有超高几率成为爆文的文章了。到这里,文心大模型就帮我们解决了第三个创作难的问题。顺利为我们的自媒体创作进行了闭环。
6. 总结
通过对文心大模型 4.5 开源模型的深度测评,我们可以很清晰的感知到,百度这次开源的模型还是非常有水平的。主要有下面几个点:
- 模型参数从 0.3B 到 474B(参数丰富,可选择多),跨度大,可以根据自己的需求选择使用不同参数规模的模型,兼顾性能和效率。
- 基于 GitCode 托管的模型,我们可以实现模型的高速下载,基于百度自研的飞桨框架,我们可以实现一条命令快速部署。
- 文心大模型多模态理解识别能力强,可以非常准确的识别人物和验证码图片,未来我们甚至可以直接使用文心大模型 4.5 替代复杂的视觉类识别算法。
- 作为产业级知识增强大模型,文心大模型的场景化能力还是非常强的,可以帮助我们高效的完成自媒体创作领域的辅助工作,让我们的创作效率直线提升。