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

「源力觉醒 创作者计划」_文心开源模型(ERNIE-4.5-VL-28B-A3B-PT)使用心得

文章目录

  • 背景
  • 操作流程
    • 开源模型选择
    • 算力服务器平台开通
    • 部署一个算力服务器
    • 登录GPU算力服务器进行模型的部署
    • FastDeploy 快速部署服务
      • 安装paddlepaddle-gpu
        • 1. 降级冲突的库版本
      • 安装fastdeploy
    • 直接部署模型(此处大约花费15分钟时间)
      • 放行服务端口供公网访问
      • 最后一个错误,马上部署成功
        • 1. 手动配置 `/etc/hosts` 文件
    • 调用大模型服务
      • 官方demo调用
      • 文字交互demo
      • 文+图+连续对话版本(python代码)
      • openai的接口调用方式
  • 总结

背景

文心大模型全面开源!

作为备受关注的文心大模型,历经发展与积淀,如今迎来重要一步——全面开源并免费开放下载体验!

我们相信,开放协作、集思广益,是推动大模型技术长远发展和释放其真正价值的关键。此次开源,正是迈出了坚实的一步。

我亲身体验后,整体感受超出预期!现将详细的体验流程整理如下,供大家参考:

操作流程

开源模型选择

今天搞这个模型:
ERNIE-4.5-VL-28B-A3B-PT

ERNIE-4.5-VL-28B-A3B 是一个多模态 MoE 聊天模型,拥有 28B 总参数和每个标记激活的 3B 参数。

操作文档在这里:

https://gitcode.com/paddlepaddle/ERNIE-4.5-VL-28B-A3B-PT

咱们使用单卡部署,至少需要80G的内存,咱们直接使用A100,那么哪里可以搞到物美价廉的A100呢?

算力服务器平台开通

经过我的多方折腾,发现有个地方还是很不错的,推荐给大家:
猛戳这里!——优云智算

没错,就是这个平台,上去实名认证之后,就可以获得10元券,然后就可以跑咱们这次要搞的文心一言的开源大模型ERNIE-4.5-VL-28B-A3B-PT 啦

部署一个算力服务器

在优云智算平台上,点击部署GPU实例,选择平台镜像,然后选择pytorch + ubutu ,然后在实例配置中的更多型号里,选择A100,我们选择豪华的A100(正好80G显存)来跑今天的模型,具体的配置参照下图,PyTouch的相关版本选择如下,大家别搞错了
在实例配置中,选择A100。

然后点击立即部署即可(这里我们选择按量计费,该计费类型支持关机不收费,磁盘、镜像关机正常计费)这种方式更友好一些,有事了就先关机,回来了就开机继续搞,这里的10元代金券可以直接抵扣,只要操作不失误应该是够用的,如果对自己没信心,也别担心,这是后付费的,在系统给出回收的提示之前付清费用,服务器都是会保留的。(一般只留24小时)

选好之后,点击立即部署,服务器就会将相应的环境部署好。

这里的状态变为已运行的时候,就说明已经部署好了,就可以进行登录使用了。

现在已经是运行中了,代表服务器环境已经部署好了!

登录GPU算力服务器进行模型的部署

咱们点击登录,进入到这个服务器中开始部署模型(或者直接复制相应的ssh代码和密码,自己进入终端或者其他工具中进行登录都可以)。

复制这里的密码,然后进行远程登录


登陆成功之后界面如下:

FastDeploy 快速部署服务

咱们这次主要使用官方推荐的FastDeploy 快速部署服务
其中用到了 FastDeploy 快速部署服务,
https://github.com/PaddlePaddle/FastDeploy
咱们这次用的A100的部署,详细部署信息可以查看:

https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/get_started/installation/nvidia_gpu.md

如果不想看文档嫌麻烦的,也可以直接按照本文进行操作即可。

咱们本次实际的操作步骤总结如下图:

安装paddlepaddle-gpu

1.先运行安装 paddlepaddle-gpu(此处大约花费15分钟时间)

python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/

这里安装完毕会报错,

这是因为:

  1. 版本不匹配:PyTorch 2.4.0+cu124 明确要求特定版本的 CUDA 工具链(如 nvidia-cublas-cu1212.4.2.65、nvidia-cudnn-cu129.1.0.70 等),但你的环境中安装的是更新的版本(如 12.6.4.1、9.5.1.17 等)。
  2. 依赖解析限制:pip 的依赖解析器在安装时可能未考虑所有已安装包的兼容性,导致不兼容的版本被安装。

然后进行解决

1. 降级冲突的库版本

根据 PyTorch 的要求,手动降级所有 CUDA 相关库至指定版本:

pip install nvidia-cublas-cu12==12.4.2.65 \nvidia-cuda-cupti-cu12==12.4.99 \nvidia-cuda-nvrtc-cu12==12.4.99 \nvidia-cuda-runtime-cu12==12.4.99 \nvidia-cudnn-cu12==9.1.0.70 \nvidia-cufft-cu12==11.2.0.44 \nvidia-curand-cu12==10.3.5.119 \nvidia-cusolver-cu12==11.6.0.99 \nvidia-cusparse-cu12==12.3.0.142 \nvidia-nccl-cu12==2.20.5 \nvidia-nvjitlink-cu12==12.4.99 \nvidia-nvtx-cu12==12.4.99 \triton==3.0.0

解决完毕后验证环境:

import torch
print(torch.__version__)  # 输出: 2.4.0+cu124
print(torch.cuda.is_available())  # 应输出 True

安装fastdeploy

此处花费时间不超过1分钟。
注意,此处咱们只安装这个 stable release即可,不用按照教程安装latest Nightly build

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


这是安装完毕的图片,看起来好像有一些报错,咱们先不管,继续往下执行即可。

直接部署模型(此处大约花费15分钟时间)

python -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-VL-28B-A3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--enable-mm \--reasoning-parser ernie-45-vl \--max-num-seqs 32

报错了


报错的原因显示:
表明 Python 在尝试加载 PaddlePaddle 的核心库时,找不到 GCC 的 OpenMP 运行时库。

既然缺失了,那咱们马上就安装,安排,解决!

执行以下代码进行解决:

apt-get update
apt-get install -y libgomp1

解决完毕之后,继续执行部署模型:

可以看到,已经开始部署了,说明环境已经正常了,等待模型部署完毕,我们进行调用即可。

放行服务端口供公网访问

此处需要将8180的端口在防火墙放行,这样在公网才能访问我们部署好的模型:
在云服务器实例的操作页面,选择更多操作——配置防火墙,然后在其中放行 8180端口。

点击编辑防火墙规则:

点击添加规则,然后填写相应的信息:

放行成功后效果如下

最后一个错误,马上部署成功

模型部署完了,但是最后果然又报错了:

这个错误是由于系统无法解析主机名(hostname)对应的 IP 地址导致的,具体来说,这行代码尝试通过主机名获取 IP 地址时失败了(错误 [Errno -2] Name or service not known 表示名称解析失败)。

解决方案:

1. 手动配置 /etc/hosts 文件

通过修改 /etc/hosts,将主机名映射到本地 IP(通常是 127.0.0.1 或内网 IP):

步骤:

  1. 查看当前主机名:bash
hostname
# 假设输出为:eb1879bc7658(你的容器ID或主机名)
  1. 编辑 /etc/hosts 文件:bash
vi /etc/hosts
  1. 在文件中添加一行,将主机名映射到 127.0.0.1:****

(如果已有 127.0.0.1 localhost,直接在后面加上主机名即可)

  1. 保存退出(vi 中按 Esc,输入 :wq 回车)。

然后又重新跑一下(跑一次大概15分钟左右)


出现图中显示的Uvicorn running on http://0.0.0.0:8180 的时候就代表服务已经部署成功了!咱们现在就将文心一言开源大模型 拥有 28B 总参数的多模态 MoE 聊天模型ERNIE-4.5-VL-28B-A3B 在自己的服务器上部署成功了!

调用大模型服务

接下来可以进行相关的调用来试一下模型的表现了。

官方demo调用

以下是官方给的demo,是让模型识别一个图片链接,然后输出图片描述的。

我改造了一个python调用的版本,代码如下:

使用python代码访问已经部署的模型:

import requests
import json# 定义 API 接口的 URL
url = "http://你的服务器公网IP:8180/v1/chat/completions"# 定义请求头
headers = {"Content-Type": "application/json"
}# 定义请求体
payload = {"messages": [{"role": "user", "content": [{"type": "image_url", "image_url": {"url": "https://paddlenlp.bj.bcebos.com/datasets/paddlemix/demo_images/example2.jpg"}},{"type": "text", "text": "Descript this image"}]}],"metadata": {"enable_thinking": False}
}# 发送 POST 请求
try:response = requests.post(url, headers=headers, data=json.dumps(payload))# 检查响应状态码response.raise_for_status()  # 抛出 HTTPError 异常,如果状态码不是 200-299# 解析 JSON 响应response_json = response.json()# 打印响应结果print(json.dumps(response_json, indent=2, ensure_ascii=False))  # 美化输出,支持中文except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")
except json.JSONDecodeError as e:print(f"JSON 解析错误: {e}")
except Exception as e:print(f"发生其他错误: {e}")

注意使用的时候把你的服务器公网IP替换进去


可以看到模型已经可以正常返回了。

文字交互demo

接下来,咱们给他发送文字,让模型进行正常的回复:

代码如下:

import requests
import json# 定义 API 接口的 URL
url = "http://你的服务器公网IP/v1/chat/completions"# 定义请求头
headers = {"Content-Type": "application/json"
}# 定义请求体 - 文本聊天
def generate_text_chat_payload(user_message):""""""  """生成文本聊天请求的 payload。Args:user_message: 用户发送的文本消息 (string)。Returns:一个 Python 字典,代表请求体。"""payload = {"messages": [{"role": "user", "content": user_message}],"metadata": {}  # 可以包含其他元数据,比如 {"enable_thinking": False}}return payload# 设置用户消息
user_message = "你好,你现在是一个人工智能助手。随便聊一些事情。"# 生成请求体 payload
payload = generate_text_chat_payload(user_message)# 发送 POST 请求
try:response = requests.post(url, headers=headers, data=json.dumps(payload))# 检查响应状态码response.raise_for_status()  # 抛出 HTTPError 异常,如果状态码不是 200-299# 解析 JSON 响应response_json = response.json()# 打印响应结果print("响应:")print(json.dumps(response_json, indent=2, ensure_ascii=False))  # 美化输出,支持中文# 提取模型回复内容 (如果 API 响应结构不同,你需要相应地修改这部分)try:model_response = response_json["choices"][0]["message"]["content"]print("\n模型回复:")print(model_response)except (KeyError, IndexError) as e:print(f"\n无法提取模型回复: {e}")except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")
except json.JSONDecodeError as e:print(f"JSON 解析错误: {e}")
except Exception as e:print(f"发生其他错误: {e}")

文+图+连续对话版本(python代码)

好吧,合并在一起,并且可以连续对话的版本应运而生:

import requests
import json
import io
from PIL import Image# 定义 API 接口的 URL
url = "http://你的服务器公网IP:8180/v1/chat/completions"# 请求头
headers = {"Content-Type": "application/json"
}def display_image_from_url(image_url):"""从 URL 显示图片"""try:response = requests.get(image_url, stream=True)response.raise_for_status()img = Image.open(io.BytesIO(response.content))img.show()except requests.exceptions.RequestException as e:print(f"无法从 URL 获取图片: {e}")except Exception as e:print(f"显示图片时发生错误: {e}")def generate_chat_payload(messages, metadata={}):"""生成聊天请求的 payload。Args:messages (list):  包含对话消息的列表,每个消息是一个字典。metadata (dict, optional): 元数据字典。 默认为 {}.Returns:dict: 聊天请求的 payload。"""payload = {"messages": messages,"metadata": metadata  # 可以添加 enable_thinking: False 等}return payloadconversation_history = []def main():global conversation_historywhile True:user_input_type = input("请输入 (1: 文字, 2: 图片URL): ")if user_input_type == "1":user_text = input("请输入文字: ")user_message = {"role": "user", "content": user_text}elif user_input_type == "2":image_url = input("请输入图片 URL: ")user_message = {"role": "user","content": [{"type": "image_url", "image_url": {"url": image_url}},{"type": "text", "text": "请描述这张图片"}  # 提示模型描述]}else:print("无效的输入类型。")continueconversation_history.append(user_message)payload = generate_chat_payload(conversation_history)try:response = requests.post(url, headers=headers, data=json.dumps(payload))response.raise_for_status()response_json = response.json()# print("\nAPI 响应:")# print(json.dumps(response_json, indent=2, ensure_ascii=False))if "choices" in response_json and response_json["choices"]:model_response = response_json["choices"][0]["message"]conversation_history.append(model_response)print("\n模型回复:")if isinstance(model_response["content"], str):print(model_response["content"])elif isinstance(model_response["content"], list):for item in model_response["content"]:if item["type"] == "text":print(item["text"])elif item["type"] == "image_url":print("显示图片...")display_image_from_url(item["image_url"]["url"])else:print("无法处理的模型回复内容类型")else:print("\n没有从模型收到回复。")except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")except json.JSONDecodeError as e:print(f"JSON 解析错误: {e}")except (KeyError, IndexError) as e:print(f"从响应中提取信息时出错: {e}")except Exception as e:print(f"发生其他错误: {e}")continue_chat = input("继续对话? (y/n): ")if continue_chat.lower() != "y":breakif __name__ == "__main__":main()

openai的接口调用方式

当然,咱们这种部署方式同样也兼容openai的接口调用方式,如:

import openai
host = "117.50.192.15"
port = "8180"
client = openai.Client(base_url=f"http://{host}:{port}/v1", api_key="null")response = client.chat.completions.create(model="null",messages=[{"role": "system", "content": "I'm a helpful AI assistant."},{"role": "user", "content": "给我写一首关于爱情的诗"},],stream=True,
)
for chunk in response:if chunk.choices[0].delta:print(chunk.choices[0].delta.content, end='')
print('\n')

这就提供了很多思路,可以直接把这个接口对接到dify等工具上,然后打造自己的专属工作流,知识库等,这绝不亚于市面上的那些大模型。

并且如果感觉回复的内容不是很符合自己的要求,还可以针对模型进行微调,比其他非开源只能调用api-key的模型想象空间大了很多!!!

总结

本文详细介绍了如何使用FastDeploy快速部署大模型服务的全过程,涵盖了从选择开源模型到在GPU算力服务器上完成部署并开放公网访问的各个步骤。首先,我们回顾了相关的背景信息,并介绍了操作流程。接着,文章通过具体的部署实例,逐步展示了如何解决可能出现的库版本冲突问题、安装必要的软件包以及如何配置系统文件(如/etc/hosts)来确保模型服务的顺利运行。

通过使用FastDeploy,用户能够更加高效地部署大规模机器学习模型,并能够方便地进行文字、图像及连续对话版本的交互测试。此外,文章还分享了官方demo和openai接口的调用方式,帮助读者更好地理解和应用模型服务。

本文不仅为读者提供了清晰的操作指南,还解决了在模型部署过程中常见的技术难题,使读者能够轻松搭建和使用高效的AI服务。

文心大模型的开源标志着技术权力从巨头垄断向全民共创的转移。然而,开源的本质不是慈善,而是通过开放降低生态摩擦,让创新在自由流动中爆发更大价值。

一起来轻松玩转文心大模型吧一文心大模型免费下载地址:
https://ai.gitcode.com/theme/1939325484087291906

http://www.dtcms.com/a/279059.html

相关文章:

  • linux系统下Ollama 模型下载出现 “no space left on device” 错误(非Docker)怎么删缓存/没下完的模型?
  • Docker入门基础
  • Vue+axios
  • Cadence操作说明
  • STM32固件升级设计——SD卡升级固件
  • 论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
  • 如何在 React + TypeScript 中实现 JSON 格式化功能
  • 【React Natve】NetworkError 和 TouchableOpacity 组件
  • MySQL的可重复读隔离级别实现原理分析
  • 银河麒麟KYSEC安全机制详解
  • 在echarts中legend中设置rich中第二项的宽度不起作用的处理方案。
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例
  • 鸿蒙Next开发,配置Navigation的Route
  • 26-计组-多处理器
  • HCIA认证核心知识体系全解析
  • OpenCV计算机视觉实战(15)——霍夫变换详解
  • Mars3d的走廊只能在一个平面的无法折叠的解决方案
  • UNet 改进(36):引入ELAN-FR模块(通道注意力+空间注意力)
  • 华为OD 消消乐游戏
  • 机器学习/深度学习训练day1
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署
  • Java 中的类加载机制:从 Class 文件到内存中的类
  • 11、鸿蒙Harmony Next开发:列表布局 (List)
  • Mysql用户管理及在windows下安装Mysql5.7(压缩包方式)远程连接云服务器(linux)上的Mysql数据库
  • spring bean初始化异步执行
  • Java字符串、时间、数字知识点
  • dify 原生mcp应用案例
  • 美丽田园发布盈喜公告,预计净利增长超35%该咋看?
  • 【Linux-云原生-笔记】Rsyslog日志相关
  • AI进化论13:生成式AI的浪潮——AI不光能“说”,还能“画”和“拍”