【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署
- 按照我这个路线来部署,网速快五分钟就能零基础跑通模型
一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906
计算机配置
| 组件 | 配置 |
|---|---|
| GPU | NVIDIA A8000 SXM4 80GB × 1 |
| CPU | 15 核处理器 |
| 内存 | 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 & 
- 这个时候就能够问模型了,此时模型的沟通端口是暴露在本地的,访问127.0.0.1:8181 即可

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": "你好,文心一言"}]}' - 将上面代码直接复制粘贴,就能与模型进行对话了。怎么样,是不是非常简单呢?
多功能界面窗口
效果

- 这个界面集成了几个基本的功能,如温度值调控、最大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() 部署流程
将文件放好

运行
python3 ernie_chat.py --url http://localhost:8180 --model baidu/ERNIE-4.5-21B-A3B-Base-Paddle 文心一言(Ernie)是由百度研发的一款大规模预训练语言模型,旨在提供更加智能、流畅和多元化的自然语言处理能力。文心一言作为一种通用AI语言模型,已经在多个领域取得了很大的突破。以下是文心一言模型的几个主要特点和应用:
- 多模态理解能力
文心一言不仅支持文本的理解和生成,还可以处理图像等多模态数据,具备较强的跨模态推理能力。用户可以通过文字和图像结合的方式进行交互,模型能够理解并生成相关内容。 - 大规模预训练
文心一言采用了超大规模的训练数据集,基于深度学习技术进行预训练,涵盖了广泛的领域,包括文本、知识库、百科全书等,使得它能够在各种任务中进行高效的知识迁移。 - 语义理解与生成
文心一言具备强大的语义理解和生成能力,可以根据用户的输入进行准确的语义分析并生成合理的自然语言输出。例如,可以用于自动写作、智能问答、情感分析等任务。 - 开放能力
文心一言的开放平台为开发者提供了丰富的API接口,支持多个编程语言和技术框架,方便开发者将其集成到各种应用中,扩展到聊天机器人、内容生成、信息检索等领域。 - 应用场景
对话生成:文心一言可以作为智能客服或聊天助手,自动回答用户问题。
内容创作:帮助企业自动生成文章、广告文案、博客等内容。
情感分析:分析文本中的情感倾向,适用于社交媒体、客户反馈等领域。
搜索引擎:增强搜索引擎的智能问答能力,提供更精准的搜索结果。
- 技术特点
自然语言生成:通过大规模的文本预训练,模型能够在没有明确指导的情况下生成连贯和富有逻辑的文本。
迁移学习能力:能够通过少量数据对特定任务进行快速适应,降低训练成本。
大规模并行计算:文心一言背后使用了大规模并行计算架构,保证了其在处理大规模数据时的高效性。
- 版本与发展
文心一言的开发经历了多个版本的更新,逐步提升了模型的智能水平和应用范围。例如,文心一言4.5版(如你提到的)相较之前的版本在推理速度、准确度以及跨模态能力上都有较大改进。

结束语
你好,我是Qiuner. 为帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner⭐ gitee https://gitee.com/Qiuner 🌹
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
代码都在github或gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍
如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,ZEEKLOG评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号
更多专栏:📊 一图读懂系列📝 一文读懂系列🌟 持续更新🎯 人生经验
掘金账号ZEEKLOG账号感谢订阅专栏 三连文章
上一篇推荐:
- Java程序员快又扎实的学习路线
- 一文读懂 AI
- 一文读懂 服务器
- 某马2024SpringCloud微服务开发与实战 bug记录与微服务知识拆解(MybatisPlus、Docker、MQ、ES、Redis)第四章重制版
下一篇推荐:
center>