【源力觉醒 创作者计划】文心开源大模型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

学生党申请github教育优惠到获取github-copilot pro一条龙教程

学生党申请github教育优惠到获取github-copilot pro一条龙教程

25年9月最新 申请GitHub教育优惠 到 获取GitHub co-pilot pro 一条龙教程(需要自备edu教育邮箱) 2025.9.4 博主亲测有效,可申请到两年教育优惠,无论您是否为在校学生,只要有一个可用的教育邮箱即可申请 by ZEEKLOG:Rem丶昕 注意:本教程的所有填写全部用英文! 一、前期准备 1. 需要自备自己学校的 edu 教育邮箱,例如博主的教育邮箱格式为 [email protected],准备的 edu 邮箱得搜索到对应的学校 2. 想申请教育邮箱的GitHub账号不能是新号,至少注册时间3天以上 二、绑定 edu 教育邮箱 2.1 在GitHub设置中添加自己的教育邮箱 登录 GitHub,点击右上方头像,在下拉列表中选 Settings

By Ne0inhk

极致压缩:Whisper.cpp 量化版本清单与 ggml 格式模型下载

Whisper.cpp 量化模型下载指南 Whisper.cpp 是 OpenAI Whisper 语音识别模型的高效 C++ 实现,支持量化技术来减小模型尺寸,实现“极致压缩”。量化通过降低模型参数的精度(如从 32 位浮点数到 4 位整数)来减少存储和计算需求,同时保持合理的准确性。ggml 格式是一种轻量级模型格式,专为资源受限设备优化。以下信息基于 Whisper.cpp 官方 GitHub 仓库(真实可靠),我将逐步引导您获取量化版本清单和下载链接。 1. 量化版本清单 Whisper.cpp 支持多种量化级别,每种对应不同的压缩率和精度权衡。以下是常见量化版本清单(基于最新官方数据): * q4_0:4 位量化,极致压缩,模型尺寸最小,适合内存受限设备(如嵌入式系统)。精度损失较高。

By Ne0inhk

Lostlife2.0下载官网整合LLama-Factory引擎,增强NPC对话逻辑

Lostlife2.0整合LLama-Factory引擎,重塑NPC对话逻辑 在文字冒险游戏的世界里,玩家最怕什么?不是任务太难,也不是剧情平淡——而是和一个“话术机械、反应呆板”的NPC对话时,那种瞬间出戏的割裂感。明明世界观设定是末世废土,结果NPC张口就是“绝绝子”“破防了”,这种语言风格的崩塌足以让沉浸感荡然无存。 《Lostlife2.0》作为一款以深度叙事和角色互动为核心卖点的文字冒险游戏,在开发过程中就直面了这一难题。早期版本中,NPC的对话依赖传统的决策树系统:每句台词都由编剧手动编写,每个分支都需要精确配置。这不仅导致内容维护成本极高,更带来了“选项爆炸”问题——新增一条剧情线,往往要额外添加数十个节点,最终形成一张难以管理的复杂网络。 真正的转机出现在团队引入 LLama-Factory 之后。这个开源的大模型微调框架,原本主要用于科研与企业级AI定制,但《Lostlife2.0》团队敏锐地意识到:它或许能成为解决NPC智能瓶颈的关键工具。通过将LLama-Factory深度集成到开发流程中,他们成功构建了一套动态、可进化、风格一致的对话生成系统,彻底改变了传

By Ne0inhk

AI编程工具深度对比:Cursor、Copilot、Trae与Claude Code,2025年开发者该如何选择?

2025年,AI编程助手已从新奇技术演变为生产力核心,但面对众多选择,开发者如何才能找到最适合自己的智能编程伙伴? 一、四大AI编程工具的核心定位与市场格局 2025年的AI编程工具市场已经形成了明显的分层格局。根据最新的开发者使用数据,这些工具不再仅仅是代码补全助手,而是朝着专业化、场景化方向发展。

By Ne0inhk