【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署

【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署
  • 按照我这个路线来部署,网速快五分钟就能零基础跑通模型
    一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906

计算机配置

组件配置
GPUNVIDIA A8000 SXM4 80GB × 1
CPU15 核处理器
内存249GB 内存
硬盘系统盘 100GB + 数据盘 50GB
  • 部署使用的电脑都是只有系统的云电脑,部署过程中的性能差异,评估它们的运行效率和资源消耗,从而为不同需求的开发者和研究者提供参考依据。
  • 文心模型汇总

环境配置与部署

1. 更换镜像源(使用阿里云镜像源):

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list sudo apt update 

2. 切换当前工作目录:

cd / pwd 

3. 安装虚拟环境工具:

sudo apt update sudo apt install -y python3-venv 

4. 创建虚拟环境:

python3 -m venv --without-pip /fastdeploy-env source /fastdeploy-env/bin/activate 

  • 使用虚拟环境能是的python依赖保持干净独立

5. 安装 pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py 

6. 安装 PaddlePaddle GPU 版本:

python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/ 

7. 安装 FastDeploy GPU 稳定版本:

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 

8. 安装 FastDeploy GPU 最新开发构建版本:

python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/nightly/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 
  • 六到八步有一个要点,得更具GPU选对版本。具体参考
  • 到这一步都没问题那你其实就是基本成功了,因为接下来只需要用FastDeploy 来跑AI就好,基本不会有什么问题。

9.ERNIE-4.5-21B-A3B-Base-Paddle

python -m fastdeploy.entrypoints.openai.api_server \ --model baidu/ERNIE-4.5-21B-A3B-Base-Paddle \ --port 8180 \ --metrics-port 8181 \ --engine-worker-queue-port 8182 \ --max-model-len 32768 \ --max-num-seqs 32 & 
image-20250712182717774
  • 这个时候就能够问模型了,此时模型的沟通端口是暴露在本地的,访问127.0.0.1:8181 即可
image-20250712184414348
curl http://127.0.0.1:8181/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "baidu/ERNIE-4.5-0.3B-Base-Paddle", "messages": [{"role": "user", "content": "你好,文心一言"}]}' 
  • 将上面代码直接复制粘贴,就能与模型进行对话了。怎么样,是不是非常简单呢?

多功能界面窗口

效果

image-20250713154216770
  • 这个界面集成了几个基本的功能,如温度值调控、最大token数量。还可以支持多个文心切换,相当实用

代码

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ERNIE-4.5 命令行聊天界面 支持与本地部署的ERNIE-4.5模型进行交互 """ import json import requests import sys import os import time from datetime import datetime import argparse import signal class ERNIEChatCLI: def __init__(self, base_url="http://localhost:8180", model_name="baidu/ERNIE-4.5-21B-A3B-Base-Paddle"): self.base_url = base_url self.model_name = model_name self.session = requests.Session() self.conversation_history = [] self.system_prompt = "你是一个有用的AI助手。" def check_server_status(self): """检查服务器状态""" try: response = self.session.get(f"{self.base_url}/health", timeout=5) return response.status_code == 200 except: return False def get_models(self): """获取可用模型列表""" try: response = self.session.get(f"{self.base_url}/v1/models", timeout=10) if response.status_code == 200: return response.json() return None except: return None def chat_completion(self, messages, temperature=0.7, max_tokens=2048, stream=False): """发送聊天请求""" payload = { "model": self.model_name, "messages": messages, "temperature": temperature, "max_tokens": max_tokens, "stream": stream } try: response = self.session.post( f"{self.base_url}/v1/chat/completions", json=payload, timeout=60, stream=stream ) if stream: return response else: if response.status_code == 200: return response.json() else: return {"error": f"HTTP {response.status_code}: {response.text}"} except Exception as e: return {"error": str(e)} def stream_response(self, response): """处理流式响应""" try: for line in response.iter_lines(): if line: line = line.decode('utf-8') if line.startswith('data: '): data = line[6:] if data.strip() == '[DONE]': break try: json_data = json.loads(data) if 'choices' in json_data and len(json_data['choices']) > 0: delta = json_data['choices'][0].get('delta', {}) if 'content' in delta: chunk = delta['content'] content += chunk print(chunk,, flush=True) except json.JSONDecodeError: continue except KeyboardInterrupt: print("\n[中断]") return content def format_message(self, role, content): """格式化消息""" timestamp = datetime.now().strftime("%H:%M:%S") if role == "user": return f"\033[36m[{timestamp}] 你: \033[0m{content}" else: return f"\033[32m[{timestamp}] AI: \033[0m{content}" def show_help(self): """显示帮助信息"""" \033[1m可用命令:\033[0m /help - 显示帮助信息 /clear - 清除对话历史 /history - 显示对话历史 /system - 设置系统提示词 /models - 显示可用模型 /status - 检查服务器状态 /temp <n> - 设置温度参数 (0.0-2.0) /tokens <n> - 设置最大token数 /stream - 切换流式输出模式 /save - 保存对话到文件 /load - 从文件加载对话 /exit - 退出程序 \033[1m快捷键:\033[0m Ctrl+C - 中断当前响应 Ctrl+D - 退出程序 """ print(help_text) def save_conversation(self, filename=None): """保存对话到文件""" if not filename: filename = f"conversation_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json" try: with open(filename, 'w', encoding='utf-8') as f: json.dump({ "system_prompt": self.system_prompt, "conversation": self.conversation_history }, f, ensure_ascii=False, indent=2) print(f"对话已保存到: {filename}") except Exception as e: print(f"保存失败: {e}") def load_conversation(self, filename): """从文件加载对话""" try: with open(filename, 'r', encoding='utf-8') as f: data = json.load(f) self.system_prompt = data.get("system_prompt", self.system_prompt) self.conversation_history = data.get("conversation", []) print(f"对话已从 {filename} 加载") except Exception as e: print(f"加载失败: {e}") def run(self): """运行聊天界面""" print("\033[1m=== ERNIE-4.5 命令行聊天界面 ===\033[0m") print(f"模型: {self.model_name}") print(f"服务器: {self.base_url}") # 检查服务器状态 if not self.check_server_status(): print(f"\033[31m错误: 无法连接到服务器 {self.base_url}\033[0m") print("请确保服务器正在运行并且端口正确") return print("\033[32m服务器连接正常\033[0m") print("输入 /help 查看帮助信息,输入 /exit 退出") print("-" * 50) # 配置参数 temperature = 0.7 max_tokens = 2048 stream_mode = True while True: try: user_input = input("\033[36m> \033[0m").strip() if not user_input: continue # 处理命令 if user_input.startswith('/'): cmd_parts = user_input.split() cmd = cmd_parts[0].lower() if cmd == '/help': self.show_help() elif cmd == '/exit': print("再见!") break elif cmd == '/clear': self.conversation_history.clear() print("对话历史已清除") elif cmd == '/history': if not self.conversation_history: print("暂无对话历史") else: for msg in self.conversation_history: print(self.format_message(msg['role'], msg['content'])) elif cmd == '/system': if len(cmd_parts) > 1: self.system_prompt = ' '.join(cmd_parts[1:]) print(f"系统提示词已设置为: {self.system_prompt}") else: print(f"当前系统提示词: {self.system_prompt}") elif cmd == '/models': models = self.get_models() if models: print("可用模型:") for model in models.get('data', []): print(f" - {model.get('id', 'N/A')}") else: print("无法获取模型列表") elif cmd == '/status': if self.check_server_status(): print("\033[32m服务器状态: 正常\033[0m") else: print("\033[31m服务器状态: 异常\033[0m") elif cmd == '/temp': if len(cmd_parts) > 1: try: temperature = float(cmd_parts[1]) temperature = max(0.0, min(2.0, temperature)) print(f"温度参数设置为: {temperature}") except ValueError: print("无效的温度值") else: print(f"当前温度: {temperature}") elif cmd == '/tokens': if len(cmd_parts) > 1: try: max_tokens = int(cmd_parts[1]) max_tokens = max(1, min(32768, max_tokens)) print(f"最大token数设置为: {max_tokens}") except ValueError: print("无效的token数") else: print(f"当前最大token数: {max_tokens}") elif cmd == '/stream': stream_mode = not stream_mode print(f"流式输出模式: {'开启' if stream_mode else '关闭'}") elif cmd == '/save': filename = cmd_parts[1] if len(cmd_parts) > 1 else None self.save_conversation(filename) elif cmd == '/load': if len(cmd_parts) > 1: self.load_conversation(cmd_parts[1]) else: print("请指定文件名") else: print(f"未知命令: {cmd}") continue # 构建消息 messages = [{"role": "system", "content": self.system_prompt}] messages.extend(self.conversation_history) messages.append({"role": "user", "content": user_input}) # 显示用户消息 print(self.format_message("user", user_input)) # 发送请求 print(f"\033[32m[{datetime.now().strftime('%H:%M:%S')}] AI: \033[0m",, flush=True) if stream_mode: response = self.chat_completion(messages, temperature, max_tokens, stream=True) if hasattr(response, 'iter_lines'): ai_response = self.stream_response(response) print() # 换行 else: ai_response = "连接错误" print(ai_response) else: result = self.chat_completion(messages, temperature, max_tokens, stream=False) if 'error' in result: ai_response = f"错误: {result['error']}" else: ai_response = result['choices'][0]['message']['content'] print(ai_response) # 保存到历史记录 self.conversation_history.append({"role": "user", "content": user_input}) self.conversation_history.append({"role": "assistant", "content": ai_response}) # 限制历史记录长度 if len(self.conversation_history) > 20: self.conversation_history = self.conversation_history[-20:] except KeyboardInterrupt: print("\n使用 /exit 退出程序") continue except EOFError: print("\n再见!") break except Exception as e: print(f"\n错误: {e}") continue def main(): parser = argparse.ArgumentParser(description='ERNIE-4.5 命令行聊天界面') parser.add_argument('--url', default='http://localhost:8180', help='服务器URL') parser.add_argument('--model', default='baidu/ERNIE-4.5-21B-A3B-Base-Paddle', help='模型名称') args = parser.parse_args() # 处理中断信号 def signal_handler(sig, frame): print('\n正在退出...') sys.exit(0) signal.signal(signal.SIGINT, signal_handler) # 创建并运行聊天界面 cli = ERNIEChatCLI(args.url, args.model) cli.run() if __name__ == "__main__": main() 

部署流程

将文件放好

image-20250713154600302

运行

python3 ernie_chat.py --url http://localhost:8180 --model baidu/ERNIE-4.5-21B-A3B-Base-Paddle 

文心一言(Ernie)是由百度研发的一款大规模预训练语言模型,旨在提供更加智能、流畅和多元化的自然语言处理能力。文心一言作为一种通用AI语言模型,已经在多个领域取得了很大的突破。以下是文心一言模型的几个主要特点和应用:

  1. 多模态理解能力
    文心一言不仅支持文本的理解和生成,还可以处理图像等多模态数据,具备较强的跨模态推理能力。用户可以通过文字和图像结合的方式进行交互,模型能够理解并生成相关内容。
  2. 大规模预训练
    文心一言采用了超大规模的训练数据集,基于深度学习技术进行预训练,涵盖了广泛的领域,包括文本、知识库、百科全书等,使得它能够在各种任务中进行高效的知识迁移。
  3. 语义理解与生成
    文心一言具备强大的语义理解和生成能力,可以根据用户的输入进行准确的语义分析并生成合理的自然语言输出。例如,可以用于自动写作、智能问答、情感分析等任务。
  4. 开放能力
    文心一言的开放平台为开发者提供了丰富的API接口,支持多个编程语言和技术框架,方便开发者将其集成到各种应用中,扩展到聊天机器人、内容生成、信息检索等领域。
  5. 应用场景
    对话生成:文心一言可以作为智能客服或聊天助手,自动回答用户问题。

内容创作:帮助企业自动生成文章、广告文案、博客等内容。

情感分析:分析文本中的情感倾向,适用于社交媒体、客户反馈等领域。

搜索引擎:增强搜索引擎的智能问答能力,提供更精准的搜索结果。

  1. 技术特点
    自然语言生成:通过大规模的文本预训练,模型能够在没有明确指导的情况下生成连贯和富有逻辑的文本。

迁移学习能力:能够通过少量数据对特定任务进行快速适应,降低训练成本。

大规模并行计算:文心一言背后使用了大规模并行计算架构,保证了其在处理大规模数据时的高效性。

  1. 版本与发展
    文心一言的开发经历了多个版本的更新,逐步提升了模型的智能水平和应用范围。例如,文心一言4.5版(如你提到的)相较之前的版本在推理速度、准确度以及跨模态能力上都有较大改进。
img

结束语

你好,我是Qiuner. 为帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner⭐ gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在github或gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,ZEEKLOG评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号
更多专栏:📊 一图读懂系列📝 一文读懂系列🌟 持续更新🎯 人生经验

掘金账号ZEEKLOG账号感谢订阅专栏 三连文章

上一篇推荐:

  1. Java程序员快又扎实的学习路线
  2. 一文读懂 AI
  3. 一文读懂 服务器
  4. 某马2024SpringCloud微服务开发与实战 bug记录与微服务知识拆解(MybatisPlus、Docker、MQ、ES、Redis)第四章重制版

下一篇推荐:

一文读懂 XX?

center>

Read more

《开源圈聚焦的技术新作:讯飞 Astron Agent 的 “工作流编排 + MCP 工具集”,如何降低企业智能体开发门槛》

《开源圈聚焦的技术新作:讯飞 Astron Agent 的 “工作流编排 + MCP 工具集”,如何降低企业智能体开发门槛》

前引:今天我们不谈趣味互动类的小智能体,而是聚焦又一个开源的企业级智能体 “基建”—— 讯飞星辰推出的 Astron Agent。作为讯飞首个开源的企业级智能体平台,它把 AI 工作流编排、RPA 自动化、MCP 工具集打包成了可直接复用的基座,刚上线 GitHub 就拿下 6k+ Star,连科技圈都在讨论它怎么降低企业做智能体的门槛! 本文将聚焦于:与其同时开源的RPA介绍及智能体平台Astron Agent 中各个工具的详细使用                                    不是广告!不是广告!不是广告!真心推荐! 目录  【一】Astron智能体平台介绍 【二】RPA介绍 【三】Astron部署登录 (2)登录过程 (2)全程体验 【四】几个重要工具详解 (1)什么是系统/用户提示词 (2)代码节点 (3)什么时候用知识库 (4)

By Ne0inhk
解决Markdown笔记图片失效问题:Gitee+PicGo图床搭建全攻略

解决Markdown笔记图片失效问题:Gitee+PicGo图床搭建全攻略

引言:为什么要解决搭建图床? 你是否遇到过这样的场景: * 用 Obsidian 写了半年的知识库,换电脑时发现 所有图片都变成 “破碎图标”; * 把 Markdown 笔记分享给同事,对方打开后 图片全是本地路径,根本看不到内容; * 尝试用云盘链接替代,却因为 “防盗链” 或 “链接过期”,图片还是无法正常显示…… 本地 Markdown 笔记的 “图片依赖本地路径”,是困扰无数创作者的痛点。而解决这个问题的核心,就是搭建一个 “图床” —— 把图片托管到云端,让链接永远有效。 本文将带你用 “Gitee(国内免费仓库)+ PicGo(自动上传工具)+ Node.js(运行环境)” 搭建图床,不仅解决 “图片失效”,还能实现: * ✔️ 国内访问快:Gitee 服务器在国内,无需科学上网,图片秒加载; * ✔️ 完全免费:Gitee

By Ne0inhk
深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍

深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍

深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍 Claude Code 已经很强大,但如果搭配这些精心设计的 Skills,它将变身超级生产力工具。本文为你深度解析 GitHub 上最受欢迎的 10 大 Claude Skills,帮助你找到最适合的配置方案。 引言:为什么 Claude Skills 如此重要? 在 2025-2026 年,Claude Code 生态经历了爆发式增长。Skills 系统的出现,让 Claude 从一个"对话助手"升级为"专业工具"。通过安装不同的 Skills,你可以:

By Ne0inhk
Git 到底是干啥的?零基础小白听完都懂了并且轻松驾驭它

Git 到底是干啥的?零基础小白听完都懂了并且轻松驾驭它

git,通俗的来说就是一种用来多人文件版本合作的工具,但是对一些非程序员的项目小白或者没有程序基础的但是想要入行做程序员的人来说,完完全全理解起来稍微有点困难。这篇文章不像很多文章一样是枯涩的码字教学。现在,我们就用最通俗易懂的方式,让你从零基础理解他,并且使用他。这种教学方法不是把你当白痴的教学方法,反而是让你快速入门深刻理解它,并记住它的教学方法。因为可能说得比较详细,篇幅较长,还得请你耐心的把他看完。 一、git的作用 1、git的版本控制 文件永远不会只有一个版本,这句话我们似乎用亲身经历证明过。你是否有过以下经历👇 📘论文会有“终稿v1、终稿v2、终稿最终版”、 ✍设计稿会有“改版A、改版B、改版C”、 🧺甚至自己写的文章也会来回改十几遍。 🥚更不用说单独只通过一个本地夹操刀一个大型项目了 突然有一天你觉得你的论文、设计稿、文章、项目某一个节点开始脱离了原本的方向或者发生了一些错误,但是你已经对其进行多处修改了,单独再修改不仅费事废经历,还容易发生遗漏。 你或许信誓旦旦的告诉我,你可以这样做。。。👇 论文_最终v1.docx 论文_

By Ne0inhk