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

Spring Boot 部署优化:打包体积缩小 80% 的秘诀

Spring Boot 部署优化:打包体积缩小 80% 的秘诀

✨道路是曲折的,前途是光明的! 📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! 在微服务架构盛行的今天,Spring Boot 应用的打包体积直接影响着部署效率和资源成本。本文将分享如何通过一系列优化手段,将一个典型 Spring Boot 应用的打包体积从 150MB 缩减至 30MB,缩减幅度达 80%。 目录 * 问题背景 * 体积分析 * 优化策略 * 实战演示 * 效果对比 * 最佳实践 问题背景 典型场景 假设我们有一个标准的 Spring Boot Web 应用,包含以下依赖: # 项目依赖概览dependencies:- spring-boot-starter-web - spring-boot-starter-data-jpa - spring-boot-starter-security - spring-boot-starter-validation - mysql-connector-java - lombok

By Ne0inhk

Mysql超详细安装配置教程(保姆级)

MySQL 一、下载 MySQL (一)下载地址 官网下载社区版 MySQL,推荐选择 MySQL 8.0.44 社区版(稳定版,兼容性强),下载地址:MySQL Community Downloads (二)下载步骤 1. Select Operating System 选择 Microsoft Windows; 2. 下载选项选择: * 推荐:Windows (x86, 64-bit), ZIP Archive(免安装压缩包,灵活配置),文件大小约 231.7M,点击 Download; * 备选:MySQL Installer for Windows(图形化安装程序,

By Ne0inhk
Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战

Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 health_connector_core 的鸿蒙化适配指南 - 实现具备跨平台标准的数据采集与同步架构、支持端侧健康指标建模与设备总线协同实战 前言 在进行 Flutter for OpenHarmony 的运动健身、个人健康管理或数字疗法类应用开发时,如何统一管理来自不同传感器(如心率计、血糖仪、计步器)的异构数据?health_connector_core 是一款专注于健康数据标准化处理的底层库。它提供了从指标建模到数据聚合的完整逻辑框架。本文将探讨如何在鸿蒙端构建极致、严谨的健康数据中枢。 一、原直观解析 / 概念介绍 1.1 基础原理 health_connector_core 建立在“标准指标(Standard Metrics)”系统之上。它将杂乱无章的原生生理信号抽象为统一的 Record 模型。

By Ne0inhk
AI Agent 架构:基础组成模块深度解析

AI Agent 架构:基础组成模块深度解析

AI Agent 架构:基础组成模块深度解析 📝 本章学习目标:本章是入门认知部分,帮助零基础读者建立对AI Agent的初步认知。通过本章学习,你将全面掌握"AI Agent 架构:基础组成模块深度解析"这一核心主题。 一、引言:为什么这个话题如此重要 在AI Agent快速发展的今天,AI Agent 架构:基础组成模块深度解析已经成为每个开发者和研究者必须了解的核心知识。无论你是技术背景还是非技术背景,理解这一概念都将帮助你更好地把握AI时代的机遇。 1.1 背景与意义 💡 核心认知:AI Agent正在从"对话工具"进化为"执行引擎",能够主动完成任务、调用工具、与外部世界交互。这一变革正在深刻改变我们的工作和生活方式。 从2023年AutoGPT的横空出世,到如今百花齐放的Agent生态,短短一年多时间,执行式AI已经从概念走向落地。根据最新统计,

By Ne0inhk