基于ACK使用TGI部署Qwen模型推理服务

news2024/12/16 10:03:09

本文以Qwen1.5-4B-Chat模型、GPU类型为A10卡为例,演示如何在ACK中使用Hugging Face的TGI(Text Generation Inference)框架部署Qwen(通义千问)模型推理服务。

背景信息

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat是阿里云基于Transformer大语言模型研发的40亿参数模型,模型在超大规模的预训练数据(预训练数据类型多样且覆盖广泛,包括大量网络文本、专业书籍、代码等)上进行训练得到。更多模型信息,请参见Qwen GitHub代码库。

TGI(Text Generation Inference

TGI是Hugging Face开源的用于部署大语言模型推理服务的工具,能够简单快速的部署常见的大语言模型,支持Flash Attention、Paged Attention、Continuous batching、 Tensor parallelism等功能来加速推理性能,更多信息,请参见TGI官方文档。

前提条件

  • 已创建包含A10卡GPU的Kubernetes集群,且集群版本为1.22及以上。具体操作,请参见创建GPU集群。

    建议GPU节点使用525版本驱动,您可以通过为GPU节点池添加标签ack.aliyun.com/nvidia-driver-version:525.105.17指定驱动版本为525.105.17。具体操作,请参见通过指定版本号自定义节点GPU驱动版本。

  • 已安装最新版Arena客户端。具体操作,请参见配置Arena客户端。

步骤一:准备模型数据

本文以Qwen1.5-4B-Chat模型为例,演示如何下载模型、上传模型至OSS,以及在ACK集群中创建对应的存储卷PV和存储卷声明PVC。

如需上传模型至NAS,请参见使用NAS静态存储卷。

    1. 下载模型文件。

      1. 执行以下命令,安装Git。

        # 可执行yum install git或apt install git安装。
        yum install git
      2. 执行以下命令,安装Git LFS(Large File Support)插件。

        # 可执行yum install git-lfs或apt install git-lfs安装。
        yum install git-lfs
      3. 执行以下命令,将ModelScope上的Qwen1.5-4B-Chat仓库克隆到本地。

        GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
      4. 执行以下命令,进入Qwen1.5-4B-Chat目录,下载LFS管理的大文件。

        cd Qwen1.5-4B-Chat
        git lfs pull
    2. 将下载的Qwen1.5-4B-Chat文件上传至OSS。

      1. 登录OSS控制台,查看并记录已创建的Bucket名称。

        如何创建Bucket,请参见创建存储空间。

      2. 安装和配置ossutil,用于管理OSS资源。具体操作,请参见安装ossutil。

      3. 执行以下命令,在OSS创建名为Qwen1.5-4B-Chat的目录。

        ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
      4. 执行以下命令,上传模型文件至OSS。

        ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
    3. 为目标集群配置存储卷PV和存储声明PVC。具体操作,请参见使用OSS静态存储卷。

      • 以下为示例PV的配置信息:

        配置项

        说明

        存储卷类型

        OSS

        名称

        llm-model

        访问证书

        配置用于访问OSS的AccessKey ID和AccessKey Secret。

        Bucket ID

        选择已创建的OSS Bucket。

        OSS Path

        选择模型所在的路径,如/models/Qwen1.5-4B-Chat。

      • 以下为示例PVC的配置信息:

        配置项

        说明

        存储声明类型

        OSS

        名称

        llm-model

        分配模式

        选择已有存储卷

        已有存储卷

        单击选择已有存储卷链接,选择已创建的存储卷PV。

步骤二:部署推理服务

重要

TGI不支持旧型号的GPU卡(例如V100、T4等),需要您将推理服务部署到A10或者更新架构的GPU节点上。

  1. 执行下列命令,通过Arena部署一个自定义类型的推理服务。

    部署的推理服务名称为tgi-qwen-4b-chat,版本为v1,需要使用一个GPU,副本数为1,并且配置就绪检测。模型是一种特殊类型的数据,因此可以使用--data参数将已创建的模型PVC挂载到容器中的/model/Qwen1.5-4B-Chat目录下。

    arena serve custom \
        --name=tgi-qwen-4b-chat \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/text-generation-inference:2.0.2-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "text-generation-launcher --model-id /model/Qwen1.5-4B-Chat --num-shard 1 -p 8000"

    参数说明如下所示:

    参数

    说明

    --name

    指定推理服务名称。

    --version

    指定推理服务版本。

    --gpus

    指定单个推理服务副本需要使用的GPU卡数。

    --replicas

    指定推理服务副本数。

    --restful-port

    指定推理服务对外暴露的端口。

    --readiness-probe-action

    指定就绪探针连接类型,支持HttpGet、Exec、gRPC、TCPSocket。

    --readiness-probe-action-option

    指定就绪探针连接方式。

    --readiness-probe-option

    指定就绪探针配置。

    --data

    挂载共享存储卷PVC到运行环境中。它由两部分组成,通过英文冒号(:)分割。冒号左侧是您已经准备好的PVC名称。您可以通过命令arena data list查看当前集群可用的PVC列表;冒号右侧是您想将PVC的挂载到运行环境中的路径,也是您训练代码要读取数据或模型的本地路径。这样通过挂载的方式,您的代码就可以访问PVC中的数据或模型。

    --image

    指定推理服务的镜像地址。

    预期输出:

    service/tgi-qwen-4b-chat-v1 created
    deployment.apps/tgi-qwen-4b-chat-v1-custom-serving created
    INFO[0001] The Job tgi-qwen-4b-chat has been submitted successfully
    INFO[0001] You can run `arena serve get tgi-qwen-4b-chat --type custom-serving -n default` to check the job status

    输出结果表明推理服务已成功部署。

  2. 执行下列命令,查看推理服务详细信息。

    arena serve get tgi-qwen-4b-chat

    预期输出:

    Name:       tgi-qwen-4b-chat
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        3m
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                                 STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                                 ------   ---  -----  --------  ---  ----
      tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq  Running  3m   1/1    0         1    cn-beijing.192.168.XX.XX

    输出结果表明该推理服务的一个Pod(tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq)正在稳定运行,且已准备好提供服务。

步骤三:验证推理服务

  1. 执行以下命令,在推理服务与本地环境之间建立端口转发。

    重要

    请注意kubectl port-forward建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。更多关于Kubernetes集群内生产可用的网络方案的信息,请参见Ingress概述。

    kubectl port-forward svc/tgi-qwen-4b-chat-v1 8000:8000

    预期输出:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000
  2. 执行以下命令,向Triton模型推理服务发送一条模型推理请求。

    curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json"  -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "测试一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

    预期输出:

    {"id":"","object":"text_completion","created":1716274541,"model":"/model/Qwen1.5-4B-Chat","system_fingerprint":"2.0.2-sha-6073ece","choices":[{"index":0,"message":{"role":"assistant","content":"好的,请问您有什么需要测试的吗?"},"logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":21,"completion_tokens":10,"total_tokens":31}}

    输出结果表明模型可以根据给定的输入(在这个例子中是一条测试消息)生成相应的回复。

(可选)步骤四:清理环境

如果不再使用已创建的资源,请及时清理。

  • 执行以下命令,删除已部署的模型推理服务。

    arena serve delete tgi-qwen-4b-chat
  • 执行以下命令,删除已创建的PV和PVC。

    kubectl delete pvc llm-model
    kubectl delete pv llm-model

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

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

相关文章

MSciNLI—— 针对科学自然语言推理任务提出的多样化数据集用于训练语言模型和大规模语言模型建立基线

概述 论文地址&#xff1a;https://arxiv.org/pdf/2404.08066 源码地址&#xff1a;https://github.com/msadat3/mscinli 自然语言推理&#xff08;NLI&#xff09;是一项识别两个句子之间语义关系的任务。第一个句子称为 “前提”&#xff0c;第二个句子称为 “假设”。传统的…

REVERSE-COMPETITION-CISCN-2025

REVERSE-COMPETITION-CISCN-2025 rand0mezCskydumpcython rand0m 3.12版本的pyd逆向 读16进制&#xff0c;分成4个4字节的int&#xff0c;每个int做两步运算 第一步&#xff0c;右移28bit&#xff0c;左移4bit&#xff0c;然后拼接 注意左移4bit后又&0x3a3affff&#xff0…

批量合并多个Excel到一个文件

工作中&#xff0c;我们经常需要将多个Excel的数据进行合并&#xff0c;很多插件都可以做这个功能。但是今天我们将介绍一个完全免费的独立软件【非插件】&#xff0c;来更加方便的实现这个功能。 准备Excel 这里我们准备了两张待合并的Excel文件 的卢易表 打开的卢易表软件…

【算法】—— 前缀和

一、区间求和问题 给定一个长度为n的序列a&#xff0c;有m次查询&#xff0c;每次查询输出一个连续区间的和。 使用暴力做法求解是将每次查询都遍历该区间求和 //暴力做法import java.util.Scanner;public class Test {public static void main(String[] args){Scanner scan…

股市投资策略升级:掌握马尔可夫决策过程与强化学习,提升交易技能

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a;本文将深入探讨马尔可夫决策过程&#xff08;MDP&#xff09;和强化学习在股票交易中的运用。通过阐述MDP的基本原理和其在交易策略中的实际应用&#xff0c;试图向您揭示这些…

jvm结构介绍

1. 垃圾回收&#xff08;Garbage Collection, GC&#xff09;&#xff1a;JVM自动管理内存的机制&#xff0c;负责回收不再使用的对象占用的内存空间。常见的垃圾回收算法包括标记-清除&#xff08;Mark-Sweep&#xff09;、复制&#xff08;Copying&#xff09;、标记-整理&am…

基于智能电能表的智能家居能源管理系统设计

目录 引言系统设计 硬件设计软件设计系统功能模块 电能测量模块数据传输模块能源管理模块控制算法 数据采集与处理算法能源优化算法代码实现 电能测量模块实现数据传输模块实现系统调试与优化结论与展望 1. 引言 随着智能家居的发展&#xff0c;电能管理成为智能家居系统中的…

【计算机组成原理】实验二:通用寄存器单元实验

实验二&#xff1a;通用寄存器单元实验 一、实验目的 了解通用寄存器的组成和硬件电路&#xff0c;利用通用寄存器实现数据的置数、左移、右移等功能。 二、实验内容 数据输入通用寄存器 寄存器内容无进位位左移实验 寄存器内容无进位位右移实验 三、实验步骤和结果 实…

codeforces一些题目思路复盘

codeforces round 919 dv2 C Partitioning the Array 大致题意&#xff0c;对于n约数i&#xff0c;我们把原数组分成份&#xff0c;并且每份中有i个元素&#xff0c;对于每个分组情况&#xff0c;如果存在一个数m使得数组中元素modm后使得每个部分的数组完全相同&#xff0c;如…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

又细又长的马尾:tail

英语里边有一个单词 tail&#xff0c;意为“尾巴”&#xff0c;这应当是众所周知的事情了。 不过&#xff0c;tail 这条尾巴&#xff0c;并不简单&#xff0c;因为它还是一个词根&#xff0c;也就是说 tail 其实是自由词素。 事实上&#xff0c;tail 最初来自 马尾 这样一个概…

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理

一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中&#xff0c;系列指的是图表中的数据集合&#xff0c;它通常代表着一个数据源。每个系列都可以包含多个数据点&#xff0c;这些数据点在图表中以特定的形式展现&#xff0c;如柱状图中的柱子&#xff0c;折线图中…

使用Qt Creator设计可视化窗体(一)

一、创建项目 打开 Qt Creator &#xff0c;在菜单栏中选中&#xff1a; “文件” --------> “新建文件或项目” &#xff1b;或者使用快捷键&#xff1a;Ctrl n&#xff1b;或者直接点击&#xff1a;“new” Qt 中的构建工具有三种可供选择&#xff0c;分别是&#…

Rust之抽空学习系列(四)—— 编程通用概念(下)

Rust之抽空学习系列&#xff08;四&#xff09;—— 编程通用概念&#xff08;下&#xff09; 1、函数 函数用来对功能逻辑进行封装&#xff0c;能够增强复用、提高代码的可读 以下是函数的主要组成部分&#xff1a; 名称参数返回类型函数体 1.1、函数名称 在Rust中&…

springboot423玩具租赁系统boot(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装玩具租赁系统软件来发挥其高效地信息处理的作用&#xff0c…

.NET6 WebAPI从基础到进阶--朝夕教育

1、环境准备 1. Visual Studio 2022 2. .NET6 平台支持 3. Internet Information Services 服务器&#xff08; IIS &#xff09; 4. Linux 服务器 【 CentOS 系统】 ( 跨平台部署使用 ) 5. Linux 服务器下的 Docker 容器&#xff08; Docker 部署使用&#xff09; …

Attentive Fusion论文精读

OPV2V: An Open Benchmark Dataset and Fusion Pipeline for Perception with Vehicle-to-Vehicle Communication 文章目录 背景创新点1.提出新的数据2.提出了一种注意力中间融合管道 2.相关工作车对车感知早期融合晚期融合中间融合 车对车数据集 3. OPV2V 数据集A.数据收集模…

Datawhale AI冬令营(第一期)task2--微调玩法攻略

目录 1.微调玩法攻略 1.1.微调思路 1.2.什么是大模型人格化&#xff1f; 1.3. 大模型人格化的应用场景 1.4 构建对应格式的数据集 1.4.1 选择数据格式 1.4.2 Alpaca 格式要求 1.4.3 构建数据集 1.4.4 没有剧本怎么办 1.4.5 整理成 json 格式 1.微调玩法攻略 1.1.微…

VQ-VAE和VAE 的区别是什么?

第一行所展示的就是普通的VAE,它的核心是通过encoder和decoder&#xff0c;将像素空间的图像压缩到一个提取了核心特征的隐变量向量。VQ-VAE的思想是&#xff0c;即使VAE中压缩的这个隐变量中的向量提取了图片中的核心特征信息&#xff0c;但是这些信息仍然可能存在冗余&#x…

Redis--高并发分布式结构

目录 一、引言 二、redis 1.什么是redis&#xff1f; 三、基础概念 1.什么是分布式&#xff1f; 2.应用服务和数据库服务分离 3.负载均衡 4.分库分表 5.微服务架构 四、总结 一、引言 本篇文章就简单介绍一下什么是redis&#xff0c;以及一些关于高并发和分布式结构的…