当前位置: 首页 > news >正文

【源力觉醒 创作者计划】文心开源大模型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 signalclass ERNIEChatCLI:def __init__(self, base_url="http://localhost:8180", model_name="baidu/ERNIE-4.5-21B-A3B-Base-Paddle"):self.base_url = base_urlself.model_name = model_nameself.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 == 200except:return Falsedef 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 Noneexcept:return Nonedef 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 responseelse: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):"""处理流式响应"""content = ""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]':breaktry: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 += chunkprint(chunk, end='', flush=True)except json.JSONDecodeError:continueexcept KeyboardInterrupt:print("\n[中断]")return contentdef 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):"""显示帮助信息"""help_text = """
\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[0mCtrl+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("请确保服务器正在运行并且端口正确")returnprint("\033[32m服务器连接正常\033[0m")print("输入 /help 查看帮助信息,输入 /exit 退出")print("-" * 50)# 配置参数temperature = 0.7max_tokens = 2048stream_mode = Truewhile 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("再见!")breakelif 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_modeprint(f"流式输出模式: {'开启' if stream_mode else '关闭'}")elif cmd == '/save':filename = cmd_parts[1] if len(cmd_parts) > 1 else Noneself.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", end='', 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 退出程序")continueexcept EOFError:print("\n再见!")breakexcept Exception as e:print(f"\n错误: {e}")continuedef 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

img

结束语

img

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

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

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

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,CSDN评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号

更多专栏:
  • 📊 一图读懂系列
  • 📝 一文读懂系列
  • 🌟 持续更新
  • 🎯 人生经验

掘金账号 CSDN账号

感谢订阅专栏 三连文章

上一篇推荐:

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

下一篇推荐:

一文读懂 XX?

center>

http://www.lryc.cn/news/586690.html

相关文章:

  • 文心一言大模型4.5系列开源测评
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序在私域运营中的协同创新研究
  • 笔记-极客-DDD实战-基于DDD的微服务拆分与设计
  • mysql复合条件匹配的查询优化
  • jeepay开源项目开发中金支付如何像其他支付渠道对接那样简单集成,集成服务商模式,极简集成工具。
  • (dp、贪心)洛谷 P8179 Tyres 题解
  • 012_PDF处理与文档分析
  • hash表的模拟--开放定址法
  • AI 助力:如何批量提取 Word 表格字段并导出至 Excel
  • 学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
  • 行测速算之假设分配法
  • 在 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm 等)中如何新建一个 PlantUML 文件
  • Java集合框架深度解析:LinkedList vs ArrayList 的对决
  • 【Linux | 网络】应用层(HTTP)
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 【PTA数据结构 | C语言版】简单计算器
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • 详解Linux下多进程与多线程通信(二)
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • linux上的软挂载操作方法
  • DAY02:【ML 第一弹】KNN算法
  • 分类问题-机器学习
  • 掌握系统设计的精髓:12个核心设计模式的通俗解读
  • NW756NW815美光固态闪存NW821NW828
  • 设计模式深度解析:单例、工厂、适配器与代理模式
  • 【leetcode】字符串,链表的进位加法与乘法
  • 5G NR PDCCH之处理流程
  • Web攻防-PHP反序列化原生内置类Exception类SoapClient类SimpleXMLElement
  • 预处理器完整功能介绍和示例演示(LESS/SCSS)
  • MYSQL笔记1