百度开源文心 4.5 系列开源大模型 GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 深度测评

发布于:2025-07-08 ⋅ 阅读:(42) ⋅ 点赞:(0)

百度开源文心 4.5 系列开源大模型 GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 深度测评

背景

百度在 GitCode 发布文心大模型 4.5 系列开源模型,涵盖从数亿到数百亿参数规模。其针对 MoE 架构提出创新多模态异构结构,适用于从大语言模型向多模态模型的持续预训练,能显著增强多模态理解能力,在文本和多模态任务上刷新多项基准测试记录,该系列模型均用飞桨框架训练、推理和部署,模型 FLOPs 利用率达 47%,以 Apache 2.0 协议开源,助力学术研究与产业应用 。

百度开源文心 4.5 系列开源大模型介绍

百度开源文心 4.5 系列模型类型丰富,包括基于飞桨框架的 Base-Paddle、Paddle,以及基于 PyTorch 框架的 Base-PT、PT ,还有多种参数量与架构各异的文本及多模态模型,像拥有 MoE 架构、参数量达 3000 亿总参用于复杂文本理解与生成的 ERNIE-4.5-300B-A47B ,424 亿总参实现图文交互的多模态模型 ERNIE-4.5-VL-424B-A47B 等,分别适用于从基于不同框架二次开发的通用场景,到复杂文本、跨模态任务,再到移动端等资源受限场景的各类需求

模型名称 核心特点 适用场景
Base-Paddle 基于飞桨框架的基座模型,通用预训练基础 需基于飞桨框架二次开发的通用场景
Paddle 基于飞桨框架,经后训练优化(非基座) 飞桨生态下的特定任务(如对话、生成)
Base-PT 基于 PyTorch 框架的基座模型,通用预训练基础 需基于 PyTorch 框架二次开发的通用场景
PT 基于 PyTorch 框架,经后训练优化(非基座) PyTorch 生态下的特定任务(如对话、生成)
ERNIE-4.5-300B-A47B 文本模型,3000 亿总参(激活 47 亿),MoE 架构 复杂文本理解与生成
ERNIE-4.5-VL-424B-A47B 多模态模型,424 亿总参(激活 47 亿),图文交互 复杂跨模态任务(图文推理、生成)
ERNIE-4.5-VL-28B-A3B 多模态模型,280 亿总参(激活 30 亿),双模式交互 中等复杂度图文任务
ERNIE-4.5-21B-A3B 文本模型,210 亿总参(激活 30 亿),高效 MoE 智能对话、内容创作
ERNIE-4.5-0.3B 轻量级文本模型,3 亿参,适配边缘环境 移动端、资源受限场景的对话 / 生成

GitCode 部署 ERNIE-4.5-300B-A47B

1、进入 GitCode 文心大模型专区

在这里插入图片描述

2、选择大模型 baidu/ERNIE-4.5-300B-A47B,查看开发文档

在这里插入图片描述

3、模型克隆至本地

在这里插入图片描述

4、使用HTTPS方式克隆

在这里插入图片描述

5、本地打开 Git Bash,将项目通过下面命令克隆至本地

git clone https://gitcode.com/paddlepaddle/ERNIE-4.5-300B-A47B-Base-Paddle.git

在这里插入图片描述

6、等待模型下载克隆(大概3~5分钟)

在这里插入图片描述

7、打开本地克隆项目

在这里插入图片描述

8、将项目文件用 PyCharm 打开

在这里插入图片描述

9、PyCharm 终端安装项目依赖

# 创建名为 baidu 的虚拟环境,Python 版本设为 3.10
conda create --name baidu python=3.10

在这里插入图片描述

10、激活虚拟环境

# 激活虚拟环境
conda activate baidu

在这里插入图片描述

11、安装项目依赖

# 安装项目依赖
pip install --progress-bar=on streamlit transformers torch sentencepiece -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

12、下载完成

在这里插入图片描述

13、将 PyCharm 解释器换成切换成虚拟环境的 baidu

在这里插入图片描述

14、使用使用 transformers 库创建测试脚本

from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
import torch
import time

# 记录开始时间
start_time = time.time()

# 设置模型路径
model_name = "ERNIE-4.5-0.3B-PT"

# 设备配置 - CPU 环境
device = torch.device("cpu")
print(f"使用设备: {device}")

# 加载分词器和模型 - 添加进度提示
print("正在加载模型,请稍候...")
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(device)
print(f"模型加载完成,耗时: {time.time() - start_time:.2f}秒")

# 准备模型输入
prompt = "请介绍一下人工智能在医疗领域的应用"
messages = [{"role": "user", "content": prompt}]

# 应用聊天模板
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

# 构造模型输入,确保 attention_mask 是2D张量
encoding = tokenizer(
    [text],
    add_special_tokens=False,
    return_tensors="pt"
)
model_inputs = {
    "input_ids": encoding.input_ids.to(device),
    "attention_mask": torch.ones_like(encoding.input_ids).to(device)  # 确保是2D张量
}

# 优化生成配置 - 显式设置所有参数
generation_config = GenerationConfig(
    max_new_tokens=300,
    temperature=0.7,
    top_p=0.9,
    do_sample=True,
    bos_token_id=tokenizer.bos_token_id or 1,  # 确保有值
    eos_token_id=tokenizer.eos_token_id or 2,  # 确保有值
    pad_token_id=tokenizer.eos_token_id or 2,  # 确保有值
    frequency_penalty=0.0,
    presence_penalty=0.0
)

# 执行文本生成 - 添加进度提示
print("开始生成回答...")
generate_start_time = time.time()
with torch.no_grad():
    generated_ids = model.generate(
        **model_inputs,  # 解包输入字典
        generation_config=generation_config
    )
output_ids = generated_ids[0][len(model_inputs["input_ids"][0]):].tolist()
print(f"回答生成完成,耗时: {time.time() - generate_start_time:.2f}秒")

# 解码生成的文本
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True).strip()

# 输出结果
print("\n" + "="*50)
print(f"问题: {prompt}")
print("-"*50)
print(f"生成的回答:\n{generate_text}")
print("="*50)
print(f"总耗时: {time.time() - start_time:.2f}秒")

在这里插入图片描述

15、test.py 运行测试结果

在这里插入图片描述

Streamlit 库开发Web UI 页面

1、新建一个 baidu_chat.py文件,确认 Python 环境,此时需要确认 conda 虚拟环境是 baidu

python --version

在这里插入图片描述

2、安装依赖库(transformers和torch依赖前面已经安装了,此处不需要重复安装)

  • streamlit(做网页)
  • transformers(调用大模型)
  • torch(深度学习框架,模型运行依赖)
pip install streamlit

在这里插入图片描述

3、代码部署(把代码落地成可运行文件)

import streamlit as st
from transformers import AutoModelForCausalLM, AutoTokenizer
from threading import Thread
from queue import Queue, Empty
import time
import platform

# 初始化模型和分词器
@st.cache_resource
def load_model():
    model_name = "ERNIE-4.5-0.3B-PT"
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
    return tokenizer, model


tokenizer, model = load_model()


class CustomStreamer:
    def __init__(self, queue):
        self.queue = queue
        self.first_token_time = None
        self.generation_start = time.perf_counter()
        self.full_response = ""  # 存储完整响应

    def put(self, value):
        # 记录第一个token的到达时间
        if self.first_token_time is None:
            self.first_token_time = time.perf_counter()

        # 解码token
        tokens = value.cpu().numpy()
        text = tokenizer.decode(tokens[0], skip_special_tokens=True)

        # 清理前缀
        for prefix in ['User:', 'Assistant:']:
            if prefix in text:
                text = text.split(prefix, 1)[-1]

        cleaned_text = text.strip()
        self.full_response += cleaned_text  # 累积完整响应
        self.queue.put(cleaned_text)

    def end(self):
        self.queue.put(None)

    def get_first_token_latency(self):
        if self.first_token_time:
            return (self.first_token_time - self.generation_start) * 1000  # 毫秒
        return 0


def generate_response_stream(prompt, queue, max_tokens, temperature):
    generation_start = time.perf_counter()

    # 准备输入
    messages = [{"role": "user", "content": prompt}]
    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )
    model_inputs = tokenizer([text], return_tensors="pt")
    prompt_tokens = len(model_inputs.input_ids[0])

    # 初始化流式处理器
    streamer = CustomStreamer(queue)

    # 生成响应
    generated_ids = model.generate(
        model_inputs.input_ids,
        max_new_tokens=max_tokens,
        temperature=temperature,
        streamer=streamer,
        do_sample=True if temperature > 0 else False
    )


# Streamlit界面
def main():
    st.title("ERNIE-4.5-300B-A47B Chat")
    st.write("CSDN博主:wei_shuo")

    # 侧边栏 - 模型配置 + 规范约束
    with st.sidebar:
        st.header("⚙️ 模型配置")
        max_tokens = st.slider("最大生成长度", 100, 2048, 1024)
        temperature = st.slider("温度系数", 0.1, 2.0, 1.0, 0.1)

        # 规范约束说明(可折叠)
        with st.expander("📖 大模型规范约束", expanded=False):
            st.markdown("""
            ### 安全与合规
            1. 拒绝生成违法违规内容(如暴力、歧视、恶意信息等)  
            2. 敏感问题需遵循平台规则,引导正向价值观  

            ### 回答质量
            1. 优先使用 Markdown 格式,确保排版清晰(标题、列表、代码块等)  
            2. 回答需准确、简洁,避免无意义内容堆叠  
            3. 专业问题需提供合理依据或步骤  

            ### 交互约束
            1. 支持多轮对话,但需控制上下文长度(避免超出 `max_tokens` 限制)  
            2. 对模糊问题,先澄清需求再回答  
            """)

        if st.button("🧹 清空对话"):
            st.session_state.messages = []
            st.rerun()

    # 初始化聊天记录
    if "messages" not in st.session_state:
        st.session_state.messages = []

    # 显示历史消息
    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    # 聊天输入
    if prompt := st.chat_input("请输入您的问题..."):
        # 添加用户消息
        st.session_state.messages.append({"role": "user", "content": prompt})
        with st.chat_message("user"):
            st.markdown(prompt)

        # 生成响应
        with st.chat_message("assistant"):
            placeholder = st.empty()
            full_response = ""
            queue = Queue()

            # 启动生成线程
            thread = Thread(
                target=generate_response_stream,
                args=(prompt, queue, max_tokens, temperature)
            )
            thread.start()

            # 流式输出
            while True:
                try:
                    chunk = queue.get(timeout=0.1)
                    if chunk is None:
                        break
                    full_response += chunk
                    placeholder.markdown(full_response + "▌")
                except Empty:
                    continue

            placeholder.markdown(full_response)
            thread.join()

        # 保存到历史记录
        st.session_state.messages.append({"role": "assistant", "content": full_response})


if __name__ == "__main__":
    main()

在这里插入图片描述

4、运行代码(首次使用需要输入邮箱)

在这里插入图片描述

5、查看本地部署结果

在这里插入图片描述

在这里插入图片描述

文心 vs. DeepSeek / Qwen 3.0 深度解析

1、使用硅基流动平台对文心大模型/DeepSeek/Qwen 3.0 对比分析深度解析

  • 模型广场,搜索对应的大模型

在这里插入图片描述

2、点击在线体验

在这里插入图片描述

3、添加对比模型

在这里插入图片描述

4、选择对比的模型后同步参数即可

在这里插入图片描述

文心 vs. DeepSeek

在这里插入图片描述

文心与 DeepSeek 各有优势,文心依托百度技术积累与数据,在中文语境理解、多模态融合及生态构建上深耕,有多元版本适配场景;DeepSeek 借字节跳动技术沉淀,在训练效率、推理速度上突出,开源生态助力普及

基础文本理解与生成

考察模型对基础事实、概念的认知及文本生成质量,看回答是否准确、逻辑是否通顺,语言是否自然

1、输入内容(Prompt):请用生动语言介绍二十四节气中芒种的含义与农事关联(简洁核心回答)

在这里插入图片描述

2、结果分析

语言表达与生动性

  • ERNIE-4.5-300B-A47B:运用了比喻的修辞手法,将芒种比作仲夏的忙碌交响曲,把农事活动描述为和暴雨、霉变赛跑,使表述更加生动形象,富有感染力,能让读者较为直观地感受到芒种时节的忙碌氛围
  • DeepSeek-R1:语言表述相对平实,主要是直白地阐述芒种的含义以及双抢的重要性,虽然也能清晰传达信息,但在语言的生动性和趣味性上,较 ERNIE-4.5-300B-A47B 略逊一筹

信息完整性与准确性

  • ERNIE-4.5-300B-A47B:既提到了芒种名字中 “芒” 和 “种” 的含义,说明了南北方不同的农事活动,还点出了芒种蕴含的古人智慧,信息较为全面完整
  • DeepSeek-R1:准确解释了芒种的含义,突出了 “双抢” 这一关键农事活动,不过在信息丰富度上,没有 ERNIE-4.5-300B-A47B 全面, 没有提及芒种所蕴含的文化智慧层面内容

回答效率(Tokens 速度)

  • ERNIE-4.5-300B-A47B:生成回答的速度为 55.41 tokens/s ,生成 151 个 tokens
  • DeepSeek-R1:生成回答的速度为 20.09 tokens/s ,生成 395 个 tokens。虽然 DeepSeek-R1 生成的内容更长,但从速度上看,ERNIE-4.5-300B-A47B 在单位时间内处理 token 的效率更高
复杂逻辑推理

聚焦模型处理需要多层推导、分析任务的能力,检验逻辑思维深度与严谨性

1、输入内容(Prompt):有 A、B、C 三人,A 说 B 在说谎,B 说 C 在说谎,C 说 A 和 B 都在说谎,三人中只有一人说真话,谁在说真话?请详细推导(简洁核心回答)

在这里插入图片描述

2、结果分析

  • ERNIE-4.5-300B-A47B:先梳理A 说 B 说谎、B 说 C 说谎、C 说 A 和 B 说谎条件,再假设 A 真→B 假→C 真(与 A 真矛盾);假设 B 真→A 假、C 假(符合条件);假设 C 真→A 假、B 假(与 C 真矛盾),推导完整,逻辑闭环,结论明确是 B 说真话

  • DeepSeek-R1:同样拆解条件,分 A 真、B 真、C 真三种假设,逐一推导矛盾,过程清晰,结论一致为 B 说真话

都精准解决逻辑题,ERNIE 推导更侧重矛盾链梳理,像链条式排查;DeepSeek 偏向假设 - 验证分步走,像流程化检验,均展现出扎实推理能力,结论完全一致,验证逻辑正确性

专业知识适配

针对特定专业领域(如科学、人文等)问题,对比模型知识储备与运用水平

1、输入内容(Prompt):从生物学角度,分析抗生素为何对病毒性感冒无效,结合免疫机制说明(简洁核心回答)
在这里插入图片描述

2、结果分析

  • ERNIE-4.5-300B-A47B 分作用靶点差异、病毒复制特性、免疫机制分工三层,从药物作用逻辑→病毒生存模式→人体免疫响应,层层嵌套,把抗生素无效拆解成生物机制冲突链,像解释抗生素针对细菌细胞壁,病毒没这结构,逻辑环环相扣,知识密度高且体系化
  • DeepSeek-R1 聚焦作用目标、复制机制、免疫协作,用抗生素攻细菌结构,病毒靠宿主借鸡生蛋类比,把复杂免疫流程(先天免疫、适应性免疫分工)简化关联,结论更强调抗生素不参与抗病毒,表达更贴近通俗理解,逻辑链条短但抓核心

简单说,ERNIE 类似学术报告,深挖机制细节拼知识网;DeepSeek 像科普解读,抓关键差异做通俗关联,前者适合专业研究,后者便于快速理解

文心 vs. Qwen 3.0

在这里插入图片描述

基础文本理解与生成

1、输入内容(Prompt):请用生动语言介绍二十四节气中芒种的含义与农事关联(简洁核心回答)

在这里插入图片描述

2、结果分析

  • 语言风格:ERNIE-4.5-300B-A47B 用 锋刃时刻、军令状等词,偏硬核、生动;Qwen3-30B-A3B 以 交响曲、指挥家类比,风格更文艺、细腻
  • 信息呈现:ERNIE 聚焦南北方农事动作(插秧、收割)与 “收 - 种接力赛” 逻辑,信息扎实落地;Qwen 侧重场景氛围(麦浪、稻秧入水)与节气意义,画面感更强
  • 创作视角:ERNIE 突出劳作紧迫性与土地约定;Qwen 自然意象串联收种,赋予节气浪漫感
复杂逻辑推理

1、输入内容(Prompt):有 A、B、C 三人,A 说 B 在说谎,B 说 C 在说谎,C 说 A 和 B 都在说谎,三人中只有一人说真话,谁在说真话?请详细推导(简洁核心回答)

在这里插入图片描述

2、结果分析

ERNIE - 4.5 - 300B - A47B 与 Qwen3 - 30B - A3B 在逻辑推理任务中,均采用假设法,通过对 A、B、C 说真话的三种假设,推导是否符合"仅一人说真话"条件,两者推理路径一致,都得出 B 说真话的结论,体现逻辑正确性

ERNIE 表述简洁,以清晰步骤快速推导;Qwen3-30B-A3B 则拆解更细,对每个假设的矛盾点阐释更详尽 。效率上,ERNIE 生成 token 少(122 个)、速度快(54.78 tokens/s );Qwen3-30B-A3B 生成 token 多(1401 个)、速度慢(29.40 tokens/s ),反映出不同模型在推理表达风格与计算效率上的差异

专业知识适配

1、输入内容(Prompt):从生物学角度,分析抗生素为何对病毒性感冒无效,结合免疫机制说明(简洁核心回答)

在这里插入图片描述

2、结果分析

ERNIE - 4.5 - 300B - A47B 与 Qwen3 - 30B - A3B 分析抗生素对病毒性感冒无效的问题,ERNIE 从作用靶点、免疫机制差异深度拆解,生成 234 tokens,速度 33.31 tokens/s ,知识颗粒细、逻辑闭环;Qwen 聚焦核心矛盾,补充实用场景,生成 626 tokens,速度 26.40 tokens/s ,链条短平快、结论直白,前者适配原理研究,后者便于快速理解,展现不同模型知识处理与输出风格

文心 vs. DeepSeek vs. Qwen 3.0 总结

文心、DeepSeek、Qwen 3.0 各有特色:文心语言生动善修辞,深度拆解知识,适配文化创作与专业解析;DeepSeek 推导清晰简洁,聚焦核心机制,适合高效推理与知识传递;Qwen 3.0 文艺细腻兼场景补充,在科普问答等场景优势明显,三者因风格与效率差异,适配不同任务需求

对比维度 文心(ERNIE 系列) DeepSeek Qwen 3.0
语言风格 生动形象,善用修辞,构建场景感 表述平实清晰,逻辑推导流程化 文艺细腻,常借意象,营造氛围
逻辑推理 假设法推导完整,构建矛盾链闭环验证 假设-验证分步走,推理过程清晰,结论精准 拆解细致,流程化检验假设,逻辑严谨
专业知识解析 深度拆解机制,构建体系化知识网 聚焦核心机制,表达简洁直接,抓关键差异 简化复杂流程,补充场景化说明
效率(Token 与速度) 生成 Token 数适中 Token 数依任务波动,速度 20.09 - 29.40 Token/s Token 数偏多
适用场景 文化内容创作、专业知识深度解析,追求语言生动与知识体系构建 高效逻辑推理、专业知识快速传递,需简洁阐释场景 科普创作、场景化知识问答,兼顾文艺表达与实用补充

总结

本次围绕百度开源文心 4.5 系列大模型,介绍其多参数规模、创新架构、开源协议及部署与 Web UI 开发方式,并对比显示,文心擅长文化创作与专业解析,DeepSeek 适合高效推理,Qwen 3.0 在科普问答有优势,三者适配不同需求,提供多元选择

架构生态多元:创新 MoE 架构与多模态异构结构,覆盖飞桨、PyTorch 框架模型,参数数亿至数百亿,适配通用开发、复杂任务及移动端等场景

性能效率突出:FLOPs 利用率达 47%,在文本与多模态任务中刷新多项基准记录,平衡高性能与部署效率

开源开放度高:Apache 2.0 协议开源,支持飞桨框架全流程操作,便于学术研究与产业应用二次开发

一起来玩转文心大模型吧👉文心大模型免费下载地址:https://ai.gitcode.com/theme/1939325484087291906

1、登录GitCode文心大模型主题,选择合适的模型部署

在这里插入图片描述

2、模型使用方式可以Notebook快速开发也可以openMind和克隆

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到