引言
百度文心大模型 4.5 系列正式开源,此次发布将对 AI 领域产生深远影响。接下来探究文心一言 4.5 开源版本地化部署的表现与潜力。
一、文心大模型 ERNIE 4.5 开源介绍
1.1 开源版本介绍
文心 ERNIE 4.5 本次开源一次性发布了 10 款模型,覆盖基础、对话、多模态、思考等多个方向。构建起从 0.3B(3 亿参数)到 424B(4240 亿参数)的完整梯度矩阵,能够精准匹配多样化场景的需求。
[图片]
从官方公布的图中可以看到,本次开源的大模型主要分为两类:一类是专注于文本处理的语言模型(LLMs);另一类是能够处理多种模态数据的视觉 - 语言模型(VLMs)。其中,普通模型以文本处理为核心,而带有'VL'标识的模型则具备多模态处理能力。
1.2 ERNIE 4.5 的主要特点和区别
[图片]
其中 MoE 是指专家混合(MoE)架构,除最小的 0.3B 稠密模型外,其他模型都采用了 MoE 架构。MoE 架构可以动态的选择并激活不同的专家网络来处理输入,在保障高性能的同时,又有效提升了训练与推理效率。
模型名称中不带 -Base 后缀的通常表示这些模型在预训练的基础上,经过了进一步的后训练(Post-Trained)或微调。而带有 -Base 后缀的模型则是基础的预训练模型。
思考模式(Thinking Mode)与非思考模式(Non-Thinking Mode): 在'non-thinking'模式下,模型可以直接给出答案,无需复杂的推理过程。'both'模式(多见于 VL 模型)则使模型能根据任务需求,在直接响应与更深层次的'思考'之间灵活切换。
二、文心 ERNIE 4.5 技术解析
2.1 多模态异构 MOE
异构 MoE(Heterogeneous MoE)作为 ERNIE 4.5 的核心架构,其创新的'异构模态 MoE'设计巧妙破解了多模态模型训练中的关键矛盾。该架构不仅支持跨模态参数共享,还能为各独立模态配置专用参数,实现了共享与专属的灵活平衡。
[图片]
与传统的统一 MoE 不同,ERNIE 4.5 将专家明确划分为三类:文本专家、视觉专家和共享专家。此外,文心还引入了一种模态感知的专家分配策略,其中视觉专家的参数仅为文本专家的三分之一,从而提高了视觉信息处理的效率。
[图片]
2.2 高效训练与并行架构
在训练与推理环节文心也实现了关键的技术突破,在训练方面采用了异构并行策略融入 FP8 混合精度训练框架和容错系统,优化内存、通信和计算开销。其最大语言模型采用 8 路专家并行、12 路管道并行和 ZeRO-1 数据并行配置,实现 47% 的 MFU,来支撑超大规模模型开源落地。
[图片]
2.3 针对特定模态的后训练策略
针对特定模态的后训练:为了满足实际应用的多样化需求,百度针对特定模态对预训练模型的变体进行了微调。其大模型针对通用语言理解和生成进行了优化。
[图片]
对特定的模态的训练策略进行微调,对每个模型采用 SFT(监督微调)、DPO(直接偏好优化)通过用户偏好直接优化模型输出,UPO(统一偏好优化)使模型在多任务场景,能同时兼顾用户的多种偏好,来满足实际应用的不同要求。
[图片]
三、文心一言 4.5 开源版本地化部署
相信经过以上介绍,大家对文心 ERNIE 4.5 大模型的架构技术及各开源版本的特点与差异已有清晰认识。接下来,我们就直接进入本地化部署流程。
3.1 部署环境准备
下面是文心 4.5 不同型号模型对配置的要求,我们本次本地部署选择 ERNIE-4.5-0.3B-PT 这个版本的轻量级模型,仅需一张 4090 系列显卡就满足配置要求了。
| 模型名称 | 上下文长度 | 量化方式 | 最低部署资源 | 说明 |
|---|---|---|---|---|
| baidu/ERNIE-4.5-VL-424B-A47B-Paddle | 32K/128K | WINT4 | 4×80G GPU 显存/1T 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-VL-424B-A47B-Paddle | 32K/128K | WINT8 | 8×80G GPU 显存/1T 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-Paddle | 32K/128K | WINT4 | 4×64G GPU 显存/600G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-Paddle | 32K/128K | WINT8 | 8×64G GPU 显存/600G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-2Bits-Paddle | 32K/128K | WINT2 | 1×141G GPU 显存/600G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle | 32K/128K | W4A8C8 | 4×64G GPU 显存/160G 内存 | 固定 4-GPU 配置,建议启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-FP8-Paddle | 32K/128K | FP8 | 8×64G GPU 显存/600G 内存 | 建议启用分块预填充,仅支持带专家并行的 PD 分离部署 |
| baidu/ERNIE-4.5-300B-A47B-Base-Paddle | 32K/128K | WINT4 | 4×64G GPU 显存/600G 内存 | 建议启用分块预填充 |
| baidu/ERNIE-4.5-300B-A47B-Base-Paddle | 32K/128K | WINT8 | 8×64G GPU 显存/600G 内存 | 建议启用分块预填充 |
| baidu/ERNIE-4.5-VL-28B-A3B-Paddle | 32K | WINT4 | 1×24G GPU 显存/128G 内存 | 需启用分块预填充 |
| baidu/ERNIE-4.5-VL-28B-A3B-Paddle | 128K | WINT4 | 1×48G GPU 显存/128G 内存 | 需启用分块预填充 |
| baidu/ERNIE-4.5-VL-28B-A3B-Paddle | 32K/128K | WINT8 | 1×48G GPU 显存/128G 内存 | 需启用分块预填充 |
| baidu/ERNIE-4.5-21B-A3B-Paddle | 32K/128K | WINT4 | 1×24G GPU 显存/128G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-21B-A3B-Paddle | 32K/128K | WINT8 | 1×48G GPU 显存/128G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-21B-A3B-Base-Paddle | 32K/128K | WINT4 | 1×24G GPU 显存/128G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-21B-A3B-Base-Paddle | 32K/128K | WINT8 | 1×48G GPU 显存/128G 内存 | 128K 长度需启用分块预填充 |
| baidu/ERNIE-4.5-0.3B-Paddle | 32K/128K | BF16 | 1×6G/12G GPU 显存/2G 内存 | 无 |
| baidu/ERNIE-4.5-0.3B-Base-Paddle | 32K/128K | BF16 | 1×6G/12G GPU 显存/2G 内存 | 无 |
对于本地部署百度提供了 FastDeploy 一键部署工具,FastDeploy 是基于 PaddlePaddle 的大型语言模型和可视化语言模型的推理部署工具包。它提供具有核心加速技术的生产就绪型开箱即用部署的解决方案。
以下是对基于 NVIDIA CUDA GPU 安装 FastDeploy,需要满足以下环境:
| 依赖项 | 版本要求 |
|---|---|
| GPU 驱动程序 | ≥535 |
| CUDA | ≥12.3 |
| CUDNN | ≥9.5 |
| Python | ≥3.10 |
| Linux | X86_64 架构 |
在这里我们选择云实例来为我们提供算力服务,适用于各种 AI 深度学习、高性能计算等场景。服务器配置我们选择 4090 就够用了,镜像方面选择了 PyTorch2.5,它自带了安装文心部署工具 FastDeploy 所需的环境要求。
[图片]
① 创建云实例成功后,有两种方式可连接实例:一是通过 SSH 密钥连接,二是借助 JupyterLab 可视化工具连接(推荐使用这种更便捷的方式)。② 点击进入 JupyterLab 可视化的工具的终端进入工作空间控制台。
[图片]
[图片]
然后我们就登录到终端的工作目录,可以来安装文心 4.5 FastDeploy 一键部署工具了。
[图片]
3.2 安装部署工具
然后我们选择用 python 创建虚拟空间,主要是来保持系统环境清洁和隔离项目依赖。① 避免我们后续操作出现环境上的报错问题,确保依赖互不干扰。② 如果不用虚拟环境我们就可能会出现下面的报错。
[图片]
1. 安装虚拟环境工具
把下面命令复制粘贴输入到控制终端即可:
#更新软件包
apt update
#安装虚拟环境工具
apt install -y python3-venv
[图片]
2. 创建虚拟环境,创建名为 fastdeploy-env 的虚拟环境
[图片]
python3 -m venv fastdeploy-env
3. 激活虚拟环境
[图片]
source fastdeploy-env/bin/activate
4. 下载 GNU 依赖库
libgomp1 是 GNU OpenMP 库的一部分,用于支持程序中的并行计算(多线程并行处理),在后面我们启动服务是需要依赖 libgomp1 来实现并行计算加速。
apt update && apt install -y libgomp1 libssl-dev zlib1g-dev
[图片]
6. 安装 paddlepaddle-gpu:3.1.0 版本
因为 FastDeploy 的部分核心功能(如模型解析、推理引擎适配)直接依赖 PaddlePaddle 的底层库,未安装 Paddle 的话,FastDeploy 将无法正确加载和运行 Paddle 模型来以提供 CUDA/CUDNN 等 GPU 加速所需的依赖。所以我们先安装一下 paddlepaddle-gpu。
① 在这里我们一定要根据自己显卡厂商和 CUDA 的版本来选择安装命令,否则导致依赖冲突。
② paddlepaddle-gpu 安装的详细说明:查看安装信息
[图片]
python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
[图片]
[图片]
检测是否安装成功
paddlepaddle-gpu 安装好了我们可以使用一下代码检测一下,如果没问题那么就证明可以下一步了。
① vi check.py 用 vim 编辑器创建一个 python 文件,把代码复制进去。 ② python check.py 运行代码查看信息。
import paddle
paddle.utils.run_check()
这边可以看命令运行完之后,显示 paddlepaddle-gpu 安装成功,现在就开始使用 PaddlePaddle 进行深度学习吧。
[图片]
7. 安装 fastdeploy
下载完 fastdeploy 工具后面把模型拉取之后,我们就可以一键启动我们的 ERNIE-4.5-0.3B-PT 了。
① 在下载时我们要注意使用自己 CPU 架构对应的版本来安装下载,不然就会启动失败。 ② fastdeploy 的安装手册:一键直达
[图片]
我们本次显卡是 4090 所以直接选择对应版本的命令下载就好了。
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-86_89/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
选择其中一条命令即可如果你安装的 gpu 是 Nightlybuild 那么就选择下面 Nightly Build 版本的 fastdeploy
看到下面这种就是成功安装了 fastdeploy。
[图片]
验证 PaddlePaddle GPU 是否支持
安装完成后,再次运行以下命令,确认输出为 True 和 gpu,如果输出结果为 False cpu 表示这意味着 PaddlePaddle 没有使用 CUDA 编译,只能在 CPU 上运行。需要重新安装 paddlepaddle-gpu:3.1.0。
python -c "import paddle; print(paddle.is_compiled_with_cuda()); print(paddle.device.get_device())"
[图片]
3.3 拉取 文心 ERNIE 4.5 启动大模型
以上运行模型需要的环境就全部搭建好,其实整个过程还是非常简单了只需要输入几行命令 5 分钟就可以快速部署起来了,下面我们去官方仓库拉取 ERNIE-4.5-0.3B-PT 开源项目来一键部署文心大模型 4.5 系列开源模型。
1. 下载 git 工具(如果系统有就不用下载了,直接拉取就好)
apt install git
[图片]
点击进入 git 仓库,进行拉取项目
ERNIE-4.5-0.3B-PT 开源地址:官方仓库
[图片]
修改主机映射(避免 DNS 解析失败)
拉取项目源码
[图片]
为了避免大模型后续启动解析主机名(或获取本机 IP)时,DNS 解析失败。使用我们这里修改一下主机的配置来让主机名与本机 IP 的映射。
#1. 查看当前主机名
hostname
[图片]
#2. 编辑 hosts 文件
vim /etc/hosts
[图片]
一键启动 ERNIE-4.5-0.3B-PT
[图片]
[图片]
当下方显示 8180 端口启动时,咱们的大模型就部署完成了。服务启动了一定要注意,不要 Ctrl+C 退出连接,否则服务会停止,API 也无法访问了。
[图片]
查看端口是否连接成功,验证服务状态(HTTP 200 表示成功)
开启第二个终端开始测试
[图片]
curl -i http://0.0.0.0:8180/health
这里可以看到咱们端口连接没问题,服务完美启动了。
[图片]
下载 requests 库发送 HTTP 请求
首先我们需要下载一个 requests 库发送 HTTP 请求。
pip install requests
[图片]
3.4 本地化部署总结
整体来说部署文心 4.5 大模型过程还是非常简单的,利用官方提供的 FastDeploy 部署工具就可以一键完成模型部署,整个部署流程被高度简化,开发者无需复杂配置,只需输入预设命令即可实现模型的一键启动,极大降低了操作难度。
[图片]
并且在模型量化、对齐、LoRA 精调等方面也无需担心。百度早已准备好了,开源了文心大模型开发套件 ERNIEKit,提供预训练、全参精调(SFT)、直接偏好优化(DPO)、参数高效精调与对齐(SFT-LoRA/DPO-LoRA)、训练感知量化(QAT)和训练后量化(PTQ)等大模型全流程开发支持,帮我们轻松玩转大模型。
四 部署测试
4.1 测试环境准备
创建测试文件开始测试
vi test.py
这里给大家准备了一个 python 的大模型交互程序来方便我们进行和大模型交互,把下面代码复制进 test 文件。
import requests
import json
# 模型服务的 API 端点,需确保模型服务已启动并可通过该地址访问
url = "http://127.0.0.1:8180/v1/chat/completions"
# 请求头,指定发送数据的格式为 JSON
headers = {"Content-Type": "application/json"}
# 初始化对话上下文列表,用于保存用户输入和模型回复的历史
messages = []
# 启动对话循环,持续获取用户输入并与模型交互
while True:
# 获取用户输入,提示用户输入内容
user_input = input("你:")
# 如果用户输入 exit 或 quit(不区分大小写),则退出对话循环
if user_input.lower() in ['exit', 'quit']:
break
# 将用户输入以指定格式添加到对话上下文,role 为 user 表示是用户输入
messages.append({"role": "user", "content": user_input})
# 构建请求体数据
data = {
# 指定要使用的模型,需与服务端部署的模型匹配
"model": "baidu/ERNIE-4.5-VL-28B-A3B-PT",
# 传入对话上下文,包含历史交互信息
"messages": messages,
# 温度参数,控制模型输出的随机性,值越大越随机
"temperature": 0.7
}
try:
# 发送 POST 请求到模型服务,将 data 转为 JSON 字符串传入
response = requests.post(url, headers=headers, data=json.dumps(data))
# 解析响应为 JSON 格式
response_json = response.json()
# 提取模型回复内容,从响应的特定结构中获取
result = response_json["choices"][0]["message"]["content"]
# 输出模型回复,标识为 ERNIE 的回复
print("ERNIE: ", result)
# 将模型回复添加到对话上下文,role 为 assistant 表示是模型回复
messages.append({"role": "assistant", "content": result})
except requests.RequestException as e:
# 如果请求过程中发生异常(如网络问题、服务未响应等),捕获并提示
print("请求发生异常:", e)
except KeyError as e:
# 如果响应 JSON 结构不符合预期,捕获并提示
print("解析响应失败,缺少必要字段:", e)
except json.JSONDecodeError as e:
# 如果响应内容无法正确解析为 JSON,捕获并提示
print("响应内容解析为 JSON 失败:", e)
启动 python 文件
[图片]
4.2 通识基础测试
问题:9.11 和 9.9 哪个更大?
[图片]
4.3 中文复杂语境测试
问题:请解析以下古诗并仿写一句: 枯藤老树昏鸦,小桥流水人家,古道西风瘦马。夕阳西下,断肠人在天涯。
创建测试文件二
vi test2.py
[图片]
import requests
import json
def test_ernie_model():
# 设置 API 端点
url = "http://127.0.0.1:8180/v1/chat/completions"
# 设置请求头
headers = {"Content-Type": "application/json"}
# 测试问题
test_question = """ 请解析以下古诗并仿写一句: 枯藤老树昏鸦,小桥流水人家,古道西风瘦马。夕阳西下,断肠人在天涯。 """
# 构建请求体
data = {
"model": "baidu/ERNIE-4.5-0.3B-PT",
"messages": [{"role": "user", "content": test_question.strip()}],
"temperature": 0.7, # 控制生成文本的随机性
"max_tokens": 500 # 限制生成文本的最大长度
}
try:
# 发送请求
response = requests.post(
url, headers=headers, data=json.dumps(data), timeout=30 # 设置超时时间
)
# 检查响应状态
response.raise_for_status()
# 解析响应
result = response.json()
# 提取并打印模型回复
if "choices" in result and len(result["choices"]) > 0:
answer = result["choices"][0]["message"]["content"]
print("模型回复:\n")
print(answer)
else:
print("未获取到有效回复")
print("完整响应:", result)
except requests.exceptions.RequestException as e:
print(f"请求发生错误:{e}")
except json.JSONDecodeError:
print("响应解析失败,非 JSON 格式")
except Exception as e:
print(f"发生意外错误:{e}")
if __name__ == "__main__":
print("正在测试 ERNIE-4.5-0.3B 模型...")
print("测试问题:解析《天净沙·秋思》并仿写\n")
test_ernie_model()
[图片]
文心 4.5 这次给了我们一个惊喜。原本以为 0.3B 参数的模型在古诗仿写任务上会有些吃力,没想到它的表现远超预期 —— 不仅完整写出了仿写句子,对原诗的解析也基本抓住了核心意思,整体表现可圈可点。
4.4 写作能力测试
问题:请创作一个 600 字左右的童话故事,要求:
- 主人公是一个小女孩
- 包含'魔法森林'场景
- 故事要有简单的情节发展和温暖的结局
- 语言风格适合儿童阅读,用词生动形象
创建测试文件三
vi test2.py
import requests
import json
def generate_fairy_tale():
# API 端点
url = "http://127.0.0.1:8180/v1/chat/completions"
# 请求头
headers = {"Content-Type": "application/json"}
# 生成童话故事的提示
prompt = """ 请创作一个 400 字左右的童话故事,要求: 1. 主人公是一个小女孩 2. 包含'魔法森林'场景 3. 故事要有简单的情节发展和温暖的结局 4. 语言风格适合儿童阅读,用词生动形象 """
# 构建请求数据
data = {
"model": "baidu/ERNIE-4.5-0.3B-PT",
"messages": [{"role": "user", "content": prompt.strip()}],
"temperature": 0.8, # 适当提高随机性,增加故事创意
"max_tokens": 600, # 预留足够长度确保故事完整
"top_p": 0.9
}
try:
# 发送请求
response = requests.post(
url, headers=headers, data=json.dumps(data), timeout=60
)
response.raise_for_status()
# 解析响应
result = response.json()
# 提取并返回故事内容
if "choices" in result and len(result["choices"]) > 0:
story = result["choices"][0]["message"]["content"]
print("生成的童话故事:\n")
print(story)
return story
else:
print("未能生成故事,请检查模型服务")
return None
except Exception as e:
print(f"生成过程出错:{str(e)}")
return None
if __name__ == "__main__":
print("正在生成包含小女孩和魔法森林的童话故事...\n")
generate_fairy_tale()
[图片]
文心 4.5 0.3B 模型这次同样交出了令人满意的答卷,完美达成了我们的创作需求。从发送请求到接收完整故事,整个过程仅耗时约 3 秒,响应速度远超预期。生成的童话故事不仅紧扣'小女孩'与'魔法森林'的核心要素,篇幅控制在 400 字左右,语言风格也贴合儿童阅读习惯。
五、总结
文心 ERNIE 4.5 开源版本通过架构创新、高效部署工具与轻量化模型设计,降低了大模型应用门槛,在保证性能的同时,具备快速响应、低资源占用等优势。即便是 0.3B 的参数模型在我们的实际测试中也展现了不错的表现,极具竞争力。
我相信,未来文心 4.5 凭借其在中文领域的深厚根基和百度生态的强大支持,会在国内市场占据重要地位,并进一步推动全球人工智能产业的发展。


