基于千问大模型Intel G8i开发主动问询导购助手

news2024/11/23 8:22:57

文章目录

    • 1. 背景
    • 2.环境介绍
      • 2.1 硬件环境
      • 2.2 软件环境
    • 3. 大模型环境部署
      • 3.1 准备硬件资源
    • 3.2 大模型部署
      • 3.1 部署Docker
      • 3.2 部署Intel xFasterTransformer容器
      • 3.3 准备模型数据
      • 3.4 运行模型进行AI对话
    • 4. 构建主动问询导购助手应用

1. 背景

北京又开始发放消费券啦!这次的活动是 2024 北京家电以旧换新补贴,一直持续到年底,面向消费者开始发放家电 8 折消费券,可用于线上和线下渠道。为了帮助大家更好的选择自己喜欢的家电产品。我们团队使用通义千问大模型&Intel G8i开发主动问询导购助手帮助大家作为AI智能向导购买更合适的商品
在当下网络购物环境中,当用户登录购物网站开始选购商品时,往往是用户主动去询问客服,以了解商品的各种特性与详情。但现在,我们开发了基于百川大模型深度的智能导购助手。它会主动向用户发出询问,耐心且细致地收集用户所需的商品参数信息。待收集任务完成后,会以清晰的格式将参数信息打印出来,方便用户查看。当这个智能导购助手成功收集到顾客对于商品参数的具体偏好后,便能够从规模庞大、种类繁多的商品数据库中迅速筛选出符合用户需求的商品并返回给用户。通过这样的方式,它可以更好地帮助用户在海量的商品海洋中精准地找到最适合自己的商品,进而显著提高商品的转化率,为用户带来更为便捷、高效、满意的购物体验。

2.环境介绍

本次部署应用使用到的软硬件资源如下

2.1 硬件环境

硬件配置:

  • 阿里云平台的英特尔至强可扩展处理器的G8i云环境

g8i 实例采用 CIPU+飞天技术架构,搭载第四代英特尔® 至强® 可扩展处理器,网络性能及存储 I/O 均实现大幅演进。尤其可圈可点的是,g8i 还标配阿里云自研 eRDMA 大规模加速能力,标志着 eRDMA 能力的全面商业化。阿里云 CIPU 所独有的 eRDMA 可让网络时延低至 8 微秒2**,且可依托** RDMA 协议栈的高性能、低开销特性,将 CPU 负载更多释放出来,使其更专注于业务处理。

这些独具的优势,在第四代英特尔® 至强® 可扩展处理器具备的 DDR5、CXL1.1、PCIe 5.0 等全新特性及内置加速器的支持下,使得 g8i 更加如虎添翼,全核睿频 p0n 达到 3.2GHz,性能相比上一代实例最大提升 60%,在计算、网络、存储、安全等方面均有炸裂般表现。

第四代英特尔® 至强® 可扩展处理器性能全面提升

2.2 软件环境

  • 大模型选取Qwen-72B-Chat大模型

通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。而Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的基于大语言模型的AI助手,是通义千问对外开源的72B规模参数量的经过人类指令对齐的Chat模型。

  • BigDL-LLM.

BigDL-LLM是一个专为大型语言模型优化设计的加速库,它提供了多种低精度优化选项(例如 INT4、INT5、INT8等),并可利用Intel® CPU集成的多种硬件加速技术(例如AVX、VNNI、AMX等)以及最新的软件优化,从而赋能大语言模型在Intel® 平台上实现更高效的优化和更快速的运行。

  • 操作系统

    Alibaba Cloud Linux 3.2104 LTS 64位

3. 大模型环境部署

3.1 准备硬件资源

登录阿里云ECS控制台
https://ecs-buy.aliyun.com/ecs#/custom/prepay/cn-shanghai

准备购买阿里云云主机

这里我们选择实例规格为ecs.g8i.8xlarge

image-20240915004625958

操作系统选择Alibaba Cloud Linux 3.2104 LTS 64位

Qwen-72B-Chat的运行需要下载多个模型文件,会占用大量存储空间,为了保证模型顺利运行,数据盘设置为300 GiB。

image-20240915004802839

配置完成后,进行下单
image-20240915005000321

3.2 大模型部署

远程登录购买的G8i主机

image-20240915005303264

3.1 部署Docker

参考网页https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance?spm=a2c4g.11186623.0.0.12647f93tez0na

  1. 登录ECS管理控制台,找到目标ECS实例,单击实例ID,进入实例详情页。

  2. 选择****定时与自动化任务** > *安装/卸载扩展程序* > *安装扩展程序***。

    image

  3. 安装扩展程序对话框,要安装的扩展程序选择Docker社区版,然后单击下一步,按照界面提示完成操作。

    image

    当任务状态为已完成时,说明Docker已安装。

    image

docker hub中下载bigdl-llm-serving-cpu镜像。

bigdl-llm-serving-cpu镜像中已包含运行通义千问所需的环境,启动容器后可直接使用。

3.2 部署Intel xFasterTransformer容器

获取并运行Intel xFasterTransformer容器。

xFasterTransformer是由Intel官方开源的推理框架,为大语言模型(LLM)在CPU X86平台上的部署提供了一种深度优化的解决方案,支持多CPU节点之间的分布式部署方案,使得超大模型在CPU上的部署成为可能。此外,xFasterTransformer提供了C++和Python两种API接口,涵盖了从上层到底层的接口调用,易于用户使用并将xFasterTransformer集成到自有业务框架中。

sudo docker pull registry.openanolis.cn/openanolis/xfastertransformer:1.7.3-23
sudo docker run -it --name xFT -h xFT --privileged --shm-size=16g --network host -v /mnt:/mnt -w /mnt/xFasterTransformer registry.openanolis.cn/openanolis/xfastertransformer:1.7.3-23

image-20240915011043612

更新xFasterTransformer脚本代码。

xFasterTransformer镜像中已包含对应版本的脚本代码,可以更新升级到最新的测试脚本。

yum update -y
yum install -y git
cd /root/xFasterTransformer
git pull

image-20240915011745141

3.3 准备模型数据

  1. 在容器中安装依赖软件。

    yum update -y
    yum install -y wget git git-lfs vim tmux
    

    image-20240915011806375

  2. 启用Git LFS。

    下载预训练模型需要Git LFS的支持。

    git lfs install
    

    image-20240915011822567

  3. 创建并进入模型数据目录。

    mkdir /mnt/data
    cd /mnt/data
    
  4. 创建一个tmux session。

tmux

image-20240915011944069

下载Qwen-7B-Chat预训练模型。

git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git /mnt/data/qwen-7b-chat

image-20240915012026369

转换模型数据。

由于下载的模型数据是HuggingFace格式,需要转换成xFasterTransformer格式。生成的模型文件夹为/mnt/data/qwen-7b-chat-xft

python -c 'import xfastertransformer as xft; xft.QwenConvert().convert("/mnt/data/qwen-7b-chat")'

image-20240915015055771

3.4 运行模型进行AI对话

cd /root/xFasterTransformer/examples/pytorch
OMP_NUM_THREADS=$(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') / 2)) LD_PRELOAD=libiomp5.so numactl -C $(seq -s, 0 2 $(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') - 2))) -m 0 python demo.py -t /mnt/data/qwen-7b-chat -m /mnt/data/qwen-7b-chat-xft -d bf16 --chat true

image-20240915015340766

在容器中,依次执行以下命令,安装WebUI相关依赖软件。

cd /root/xFasterTransformer/examples/web_demo
pip install -r requirements.txt

执行以下命令,启动WebUI。使用作为API进行调用

OMP_NUM_THREADS=$(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') / 2)) GRADIO_SERVER_NAME="0.0.0.0" numactl -C $(seq -s, 0 2 $(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') - 2))) -m 0 python Qwen.py -t /mnt/data/qwen-7b-chat -m /mnt/data/qwen-7b-chat-xft -d bf16

image-20240915015758127

4. 构建主动问询导购助手应用

使用vscode调用大模型
大模型API使用

使用nginx反向代理来解决跨域问题

image-20240915015958628

后端python代码,使用python的flask框架来启动服务

from flask import Flask, request, Response, send_from_directory
from agents import chat, init_thread

app = Flask(__name__, static_folder="static")


@app.route("/")
def index():
    return send_from_directory(app.static_folder, 'index.html')


@app.route("/chat", methods=["POST"])
def main():
    data = request.get_json()
    input_prompt = data.get("prompt", "你好")
    thread_id = data.get("sessionId", "")
    if thread_id is None:
        response = init_thread()
        print(response)
        thread_id = response['thread_id']

    response = Response(
        chat(input_prompt=input_prompt, thread_id=thread_id),
        mimetype='text/event-stream'
    )
    return response


# 运行 web 程序
app.run(host="0.0.0.0", port=9000)

执行结果如下

image-20240915020851392

image-20240915020842416

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整个场面要hold住-《分析模式》漫谈32

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第一章有这么一句: It is important to be clear to them that I am not holding them up as gospel, and if they are not comfortable, I will …

RedisTemplate操作ZSet的API

文章目录 ⛄概述⛄常见命令有⛄RedisTemplate API❄️❄️ 向集合中插入元素,并设置分数❄️❄️向集合中插入多个元素,并设置分数❄️❄️按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部❄️❄️获得指定元素的分数❄️❄️返回集合内的成员个数❄️❄…

鸿蒙应用开发:音频播放

鸿蒙系统提供了多样化的API,来帮助开发者完成音频播放的开发,不同的API适用于不同音频数据格式、音频资源来源、音频使用场景,甚至是不同开发语言。因此,选择合适的音频播放API,有助于降低开发工作量,实现更佳的音频播放效果。 本节介绍通过Media Kit实现音频播放。 AVP…

【机器学习】--- 深度学习中的注意力机制

深度学习中的注意力机制 在深度学习领域,注意力机制(Attention Mechanism)已经成为近年来最受瞩目的研究热点之一。它不仅提升了现有模型的性能,更启发了全新的网络结构,如Transformer模型。注意力机制被广泛应用于自…

SMA2:代码实现详解——Image Encoder篇(Hiera章)

SMA2:代码实现详解——Image Encoder篇(Hiera) 写在前面 大家在SMA2:代码实现详解——Image Encoder篇(FpnNeck)下的留言我已收到,感谢大家的支持,后面如果遇到比较难以讲清的部分可能会使用视频的形式。…

jsp+sevlet+mysql图书管理系统

jspsevletmysql图书管理系统 一、系统介绍二、功能展示1.图书查询(学生)2.借阅信息(学生)3.借阅历史(学生)4.借阅历史(管理员)5.读者管理(管理员)6.图书分类(管理员)7.图书借阅信息(管理员)8.图书归还信息(管理员) 四、其它1.其他系统实现 一、系统介绍 系统主要功能&#xff…

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版副本集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…

机器学习和深度学习的常见概念总结(多原创图)

目录 使用说明一、未分类损失函数(Loss Function)1. **损失函数的作用**2. **常见的损失函数**2.1. **均方误差(MSE, Mean Squared Error)**2.2. **均方根误差(RMSE, Root Mean Squared Error)**2.3. **平均…

【云原生安全篇】一文掌握Harbor集成Trivy应用实践

【云原生安全篇】一文掌握Harbor集成Trivy应用实践 目录 1 概念 1.1 什么是 Harbor 和 Trivy? 1.1.1 Harbor 1.1.2 Trivy 1.2 Harbor 与 Trivy 的关系 Trivy 在 Harbor 中的作用: 1.3 镜像扫描工作流程 2 实战案例:在Harbor 配置 Trivy …

SafaRi:弱监督引用表达式分割的自适应序列转换器

引用表达式分割(reference Expression Segmentation, RES)旨在提供文本所引用的图像(即引用表达式)中目标对象的分割掩码。 目前存在的挑战 1)现有的方法需要大规模的掩码注释。 2)此外,这种方法不能很好地推广到未见/零射击场景 改进 1)提出了一个弱…

探索自动化的魔法:Python中的pyautogui库

文章目录 探索自动化的魔法:Python中的 pyautogui 库背景:为什么选择pyautogui?pyautogui是什么?如何安装pyautogui?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索自动化的魔法:Python中的 …

VirtualBox桥接网卡消失,安装Docker后导致桥接网卡服务消失问题解决记录

问题记录:VirtualBox虚拟机的桥接网卡消失 记录时间:2024.9.14 系统:win10 问题已解决。 原因: 猜测是由于安装Docker,也会使用我们的网卡进行虚拟化,导致网卡与virtualbox的桥接服务丢失。 解决方案…

基于python+django+vue的鲜花商城系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

三维点云处理(C++)学习记录——PDAL

一、OSGeo4W简概 OSGeo4W是一个基于Windows系统(版本7-11)的开源地理软件二进制包发布平台。OSGeo4W包括开源GIS桌面应用程序(QGIS、GRASS GIS)、地理空间库(PROJ、GDAL/OGR、GEOS、SpatiaLite、SAGA GIS)、…

org.flowable.bpmn.exceptions.XMLException: 元素类型 必须由匹配的结束标记

flowable在流程部署时经常汇报这个错误: org.flowable.bpmn.exceptions.XMLException: 元素类型... 必须由匹配的结束标记 经检查发现是数据库存的中午乱码导致xml结构异常了 解决办法如下: 在catalina.bat文件中找到如下地方,加入 -Dfile.…

Python爬取某猫投诉数据(含signature参数分析与算法还原)

文章目录 1. 写在前面2. 接口分析3. 爬虫实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

电商数据采集分析全流程分享||电商数据API接口

电商数据监测,能为品牌发展提供参考依据,已经成为了业内共识。依托智能系统,将电商数据转换为有价值的营销情报,只需三步: 数据采集 可采集30多个电商平台数据,采集字段高达40多个,包含标题、价…

网络穿透:TCP 打洞、UDP 打洞与 UPnP

在现代网络中,很多设备都处于 NAT(网络地址转换)或防火墙后面,这使得直接访问这些设备变得困难。在这种情况下,网络穿透技术就显得非常重要。本文将介绍三种常用的网络穿透技术:TCP 打洞、UDP 打洞和 UPnP。…

数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年8月刊

本文为大家整理了墨天轮数据社区2024年8月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等,分享给大…

【Python电商项目汇报总结】**采集10万+淘宝商品详情数据注意事项总结汇报**

大家好,今天我想和大家聊聊我们在采集10万淘宝商品详情数据时需要注意的一些关键问题。这不仅仅是一个技术活,更是一场细心与合规的较量。下面,我就用咱们都听得懂的话,一一给大家说道说道。 **一、明确目标,有的放矢…