GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 测评

行业趋势最佳实践技术解析

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

背景

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

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

picture.image

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

  • 模型类别划分:按类型分 MoE 模型、大语言模型(LLMs )、视觉语言模型(VLMs )、稠密型模型,覆盖不同技术路线与应用场景,大语言模型专注文本交互,视觉语言模型支持文本、图像、视频多模态输入,满足多样需求
  • 功能特性呈现:明确各模型输入输出模态,大语言模型和稠密型模型多为文本输入输出,视觉语言模型可处理图像、视频等多模态,且部分模型上下文窗口达 128K,体现长文本处理能力,助力理解复杂、长篇内容,为技术选型(如多模态场景选视觉语言模型 )、应用开发(依输入输出需求匹配模型 )提供清晰指引
模型名称核心特点适用场景
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 文心大模型专区

picture.image

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

picture.image

3、模型克隆至本地

picture.image

4、使用HTTPS方式克隆

picture.image

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

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

picture.image

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

picture.image

7、打开本地克隆项目

picture.image

8、将项目文件用 PyCharm 打开

picture.image

9、PyCharm 终端安装项目依赖

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

picture.image

10、激活虚拟环境

# 激活虚拟环境
conda activate baidu

picture.image

11、安装项目依赖

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

picture.image

12、下载完成

picture.image

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

picture.image

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}秒")

picture.image

15、test.py 运行测试结果

picture.image

Streamlit 库开发Web UI 页面

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

python --version

picture.image

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

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

picture.image

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()

picture.image

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

picture.image

5、查看本地部署结果

picture.image

picture.image

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

picture.image

上图是文心 4.5 系列模型能力盘点表,涵盖不同模型,从多模态(Multimodal)、混合专家(MoE)、后训练(Post - Trained)、思维 / 非思维模式(Thinking/Non - Thinking Mode)维度呈现,VL 系列部分模型具多模态能力,不同模型在各维度特性有别,可直观了解各模型功能侧重 。

文心 vs. DeepSeek

picture.image

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

基础文本理解与生成

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

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

picture.image

2、结果可视化分析:ERNIE-4.5-300B-A47B 在语言生动性、信息完整性、回答效率(Tokens 速度)上表现更优,仅输出 Tokens 总量少于 DeepSeek-R1 ;后者虽输出内容更长,但在表达生动度、信息全面性及生成速度方面均不及前者,整体来看 ERNIE-4.5-300B-A47B 综合表现更突出 。

picture.image

复杂逻辑推理

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

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

picture.image

2、结果可视化分析:复杂逻辑推理任务中,ERNIE - 4.5 - 300B - A47B 在推理逻辑路径、回答效率(Tokens 速度)、推理风格总结维度表现更优,仅输出 Tokens 总量少于 DeepSeek - R1;DeepSeek - R1 虽输出内容丰富,但效率指标低,二者推理结论一致,验证逻辑正确,展现出不同推理风格与效率特点 。

picture.image

专业知识适配

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

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

picture.image

2、结果可视化分析:生物视角抗生素无效机制解读任务中,ERNIE - 4.5 - 300B - A47B 在逻辑拆解深度、表达风格专业性及回答效率(Tokens 速度)上优势显著,输出 Tokens 总量少;DeepSeek - R1 输出内容丰富,然逻辑拆解、表达风格专业度及回答效率均不及前者,二者呈现 "专业深度型" 与 "内容丰富型" 差异化表现

picture.image

文心 vs. Qwen 3.0

picture.image

基础文本理解与生成

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

picture.image

2、结果可视化分析:介绍芒种含义与农事关联任务中,ERNIE - 4.5 - 300B - A47B 与 Qwen3 - 30B - A3B 风格有别,前者语言、信息呈现、创作视角表现均衡,回答效率也不弱;后者在各维度得分略高,输出内容更丰富,且回答效率(Tokens 速度)与前者相近,二者以不同风格诠释节气,展现模型差异化表达力

picture.image

复杂逻辑推理

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

picture.image

2、结果可视化分析:逻辑推理任务中,ERNIE - 4.5 - 300B - A47B 与 Qwen3 - 30B - A3B 推理方法、结论一致,展现逻辑正确性。ERNIE 表达简洁,回答效率(Tokens 速度)高、输出量少;Qwen3 - 30B - A3B 表达细致,输出内容丰富但效率稍低,二者体现出 “高效简洁” 与 “详实全面” 的差异化推理风格 。

picture.image

专业知识适配

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

picture.image

2、结果可视化分析:分析抗生素对病毒性感冒无效的任务中,ERNIE-4.5-300B-A47B 与 Qwen3-30B-A3B 在核心逻辑、表达风格维度表现相近,ERNIE-4.5-300B-A47B 回答效率(Tokens 速度)更高,输出 Tokens 总量少;Qwen3-30B-A3B 输出内容更丰富,二者展现出 "高效简洁" 与 "详实全面" 的不同知识输出风格 。

picture.image

评测总结

picture.image

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

从测评结果来看,ERNIE - 4.5 - 300B - A47B 在语言生动性、信息完整性、逻辑推理完整性、生物医学逻辑深度四个维度,得分均为最高,综合表现最优;Qwen3 - 30B - A3B 各维度得分次之,整体实力较强;DeepSeek - R1 在各维度得分相对偏低,表现稍弱,ERNIE - 4.5 - 300B - A47B 综合能力领先,Qwen3 - 30B - A3B 可作为有效补充,DeepSeek - R1 在这些测评维度上有较大提升空间 。

文心 vs. DeepSeek vs. Qwen 3.0 总结

picture.image

文心 ERNIE - 4.5 系列模型与 Qwen3、DeepSeek - V3 在不同能力维度(通用、推理、数学、知识、编码 )下,基于多种基准测试的性能对比数据:

  • 模型整体表现:不同模型在各基准测试里各有优劣,像 ERNIE - 4.5 - 300B - A4TB - Base 在多个通用基准(如 C - Eval、CMMLU 等 )中成绩突出,显示出在通用能力上的优势;Qwen3 - 30B - A3B - Base 在部分推理基准(如 ARC - Easy、ARC - Challenge )表现亮眼,体现推理能力特点
  • 能力维度差异:通用能力里,各模型在不同子项(C - Eval、CMMLU 等 )排名有别,反映对不同类型通用知识的掌握侧重;推理方面,不同基准下模型表现波动,说明应对不同推理场景能力不同;数学、知识、编码维度同理,各有擅长与薄弱板块,体现模型在特定知识领域和技能上的优势区与提升点
  • 模型对比优势:比如 ERNIE - 4.5 系列部分版本在部分基准(如 C - Eval 中 ERNIE - 4.5 - 300B - A4TB - Base 成绩突出 )领先,可看出其在对应能力维度的竞争力;Qwen3、DeepSeek - V3 也有各自优势板块,展现不同技术路线或训练侧重的成果,能为模型迭代、选型提供参考,比如侧重数学能力可选某类表现好的模型,侧重编码则看对应编码基准成绩选

总结

本次围绕百度开源文心 4.5 系列大模型,介绍其多参数规模、创新架构、开源协议及部署与 Web UI 开发方式,并对比显示,ERNIE - 4.5 - 300B - A47B 在语言生动性、信息完整性等维度表现最佳,适配专业研究、报告撰写;Qwen3 - 30B - A3B 表现次之,因文艺细腻风格适配知识科普、文案创作;DeepSeek - R1 虽整体稍弱,但凭借平实表达与推理风格,适用于基础概念科普。不同模型各有优势,需要根据具体需求场景来选择。

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

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

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

如果大家想和我一起感受百度开源文心4.5系列开源大模型:一起来玩转文心大模型吧

👉文心大模型免费下载地址https://ai.gitcode.com/theme/1939325484087291906

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
VikingDB:大规模云原生向量数据库的前沿实践与应用
本次演讲将重点介绍 VikingDB 解决各类应用中极限性能、规模、精度问题上的探索实践,并通过落地的案例向听众介绍如何在多模态信息检索、RAG 与知识库等领域进行合理的技术选型和规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论