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

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

按照我这个路线来部署,网速快五分钟就能零基础跑通模型 一起来轻松玩转文心大模型吧一文心大模型免费下载地址: https://ai.gitcode.com/theme/

计算机配置

组件配置GPUNVIDIA A8000 SXM4 80GB × 1CPU15 核处理器内存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):

“””处理流式响应”””

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]’:

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, end=”, flush=True)

except json.JSONDecodeError:

continue

except KeyboardInterrupt:

print(” [中断]”)

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):

“””显示帮助信息”””

help_text = “””

033[1m可用命令:033[0m

/help – 显示帮助信息

/clear – 清除对话历史

/history – 显示对话历史

/system – 设置系统提示词文心一言 ERNIE Bot 教程

/models – 显示可用模型

/status – 检查服务器状态

/temp

– 设置温度参数 (0.0-2.0)

/tokens

– 设置最大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” – “)

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”流式输出模式: “)

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”, 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(” 使用 /exit 退出程序”)

continue

except EOFError:

print(” 再见!”)

break

except Exception as e:

print(f” 错误: {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(‘ 正在退出…’)

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上,如有需要可以去上面自行下载。记得给我点星星哦

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

更多专栏:

 一图读懂系列 一文读懂系列 持续更新 人生经验

掘金账号 夸智账号

感谢订阅专栏 三连文章

上一篇推荐:

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

下一篇推荐:

一文读懂 XX?

center>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/265446.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月12日 下午7:54
下一篇 2026年3月12日 下午7:54


相关推荐

关注全栈程序员社区公众号