> 技术文档 > AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理

AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理


系列篇章💥

No. 文章 1 AI大模型ms-swift框架实战指南(一):框架基础篇之全景概览 2 AI大模型ms-swift框架实战指南(二):开发入门之环境准备 3 AI大模型ms-swift框架实战指南(三):模型部署初体验 4 AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南

目录

  • 系列篇章💥
  • 1. 前言
  • 2. 推理概述
  • 3. 环境准备
    • 3.1服务器
    • 3.2安装依赖
    • 3.3模型准备
  • 4. 文本模型推理
    • 4.1 命令行推理
    • 4.2 Python推理
  • 5. 多模态模型推理
    • 5.1 命令行推理
    • 5.2. Python推理
  • 6. 结语

1. 前言

在大模型的开发与应用中,推理环节扮演着至关重要的角色。它是将训练好的模型投入实际使用,让模型根据输入数据生成有价值输出的关键步骤。无论是智能客服为用户解答问题,还是内容创作工具自动生成文案,又或是智能助手完成各种任务,背后都离不开高效准确的推理过程。ms-swift框架作为大模型开发的得力助手,为我们提供了强大且灵活的推理功能,使我们能够轻松将大模型集成到各种应用场景中。本篇文章将深入探讨ms-swift框架的大模型推理实践,从基础的环境搭建,到命令行和代码层面的推理操作,全方位地展示如何利用ms-swift框架实现高效的大模型推理。

2. 推理概述

推理,简单来说,就是使用已经训练好的模型对新的输入数据进行预测或生成输出的过程。在大模型的语境下,推理可以涵盖多种任务,如文本生成、问答系统、文本分类、情感分析等。通过推理,大模型能够依据其在训练过程中学习到的知识和模式,对新的输入数据进行分析和处理,从而给出合理的预测结果。

高效的推理不仅能够提高模型的响应速度,还能降低资源消耗,提升用户体验。对于一些实时性要求较高的应用,如在线聊天机器人,快速的推理速度能够确保用户得到及时的回复,增强用户的使用体验。而对于一些需要处理大量数据的应用,如智能推荐系统,高效的推理可以在短时间内处理海量数据,为用户提供服务。

ms-swift框架的推理功能设计旨在满足不同开发者的需求,无论是希望通过简单的命令行操作快速实现推理的初学者,还是需要进行深度定制和灵活控制的高级开发者,都能在ms-swift框架中找到适合自己的推理方式。

3. 环境准备

在大模型本地部署前,确保硬件与软件环境就绪是关键。若已有合适配置的服务器并安装了必要依赖,可跳过此步骤。

3.1服务器

在大模型本地部署前,需精心准备硬件与软件环境。硬件上,根据模型规模和计算需求选服务器配置,如用NVIDIA GeForce RTX 4090D GPU(24GB显存)。软件方面,操作系统选Ubuntu 22.04,Python选3.10版本,安装PyTorch 2.1.2及Cuda 11.8,为AI开发、模型运行及加速训练推理提供支持。

3.2安装依赖

接下来,需安装一系列软件依赖以支持模型运行。通过以下命令完成:

# 克隆ms-swift仓库git clone https://github.com/modelscope/ms-swift.gitcd ms-swiftpip install -e .# 安装vllm,用于模型转换和推理pip install vllm# 安装modelscope,提供模型下载和管理功能pip install modelscope

3.3模型准备

为了下载所需的大模型,我们将利用modelscope库中的snapshot_download函数。首先,在/root/autodl-tmp目录下创建一个名为model_download.ipynb的Jupyter Notebook文件,并添加以下Python代码:

from modelscope import snapshot_download# 定义模型名称和下载路径model_name = \'Qwen/Qwen2.5-7B-Instruct\'cache_dir = \'/root/autodl-tmp\'# 使用snapshot_download函数下载模型model_dir = snapshot_download(model_name, cache_dir=cache_dir, revision=\'master\')print(f\"Model downloaded and stored in: {model_dir}\")

执行上述代码后,snapshot_download函数将自动处理模型的下载和解压过程,并将模型存储在指定的cache_dir路径下。此步骤完成后,即将拥有一个可在本地部署和运行的大模型,为后续的模型微调和推理任务打下坚实基础。

我们也可以采用命令行的方式下载:

# 下载git-lfs ,git - lfs就能够稳稳地将大模型文件从远程服务器下载到本地,确保文件的完整性和下载速度。curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bashsudo apt-get install git-lfs# 下载模型git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git

4. 文本模型推理

4.1 命令行推理

CUDA_VISIBLE_DEVICES=0 swift infer \\ --model /root/autodl-tmp/Qwen/Qwen2.5-7B-Instruct \\ --stream true \\ --infer_backend pt \\ --max_new_tokens 2048

推理效果如下:
AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理

GPU资源消耗:模型部署消耗GPU资源(nvidia - smi)
AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理

4.2 Python推理

import osos.environ[\'CUDA_VISIBLE_DEVICES\'] = \'0\'from swift.llm import PtEngine, RequestConfig, InferRequestmodel = \'/root/autodl-tmp/Qwen/Qwen2.5-7B-Instruct\'# 加载推理引擎engine = PtEngine(model, max_batch_size=2)request_config = RequestConfig(max_tokens=512, temperature=0)# 这里使用了2个infer_request来展示batch推理infer_requests = [ InferRequest(messages=[{\'role\': \'user\', \'content\': \'who are you?\'}]), InferRequest(messages=[{\'role\': \'user\', \'content\': \'浙江的省会在哪?\'}, {\'role\': \'assistant\', \'content\': \'浙江省的省会是杭州。\'}, {\'role\': \'user\', \'content\': \'这里有什么好玩的地方\'},]),]resp_list = engine.infer(infer_requests, request_config)query0 = infer_requests[0].messages[0][\'content\']print(f\'response0: {resp_list[0].choices[0].message.content}\')print(f\'response1: {resp_list[1].choices[0].message.content}\')

代码执行打印输出如下:

response0: I am Qwen, a large language model created by Alibaba Cloud. I am here to assist with a wide variety of tasks and provide information on numerous topics. How can I help you today?response1: 杭州有很多好玩的地方,以下是一些推荐:1. **西湖**:被誉为“人间天堂”,是杭州最著名的景点之一,四季景色各异,有苏堤春晓、断桥残雪等著名景点。2. **宋城**:以宋代文化为背景,结合现代科技手段,展现宋代风情和历史文化的主题公园。3. **灵隐寺**:位于杭州西郊,是中国著名的佛教寺庙之一,环境幽静,适合静心游览。4. **西溪国家湿地公园**:是中国第一个国家湿地公园,自然风光优美,可以体验到江南水乡的独特魅力。5. **杭州乐园**:适合家庭游玩,有各种游乐设施和表演。6. **雷峰塔**:与白娘子的故事紧密相连,不仅有美丽的传说,还有精美的建筑和周边的风景。7. **中国茶叶博物馆**:了解中国茶文化的好地方,可以参观茶园,品尝各种名茶。8. **杭州植物园**:拥有丰富的植物资源,是休闲散步的好去处。这些地方各有特色,可以根据个人兴趣选择合适的景点游览。

5. 多模态模型推理

5.1 命令行推理

CUDA_VISIBLE_DEVICES=0 \\MAX_PIXELS=1003520 \\VIDEO_MAX_PIXELS=50176 \\FPS_MAX_FRAMES=12 \\swift infer \\ --model /root/autodl-tmp/Qwen/Qwen2.5-VL-3B-Instruct \\ --stream true \\ --infer_backend pt \\ --max_new_tokens 2048

推理效果如下:

<<< <image><image>这两张图有什么区别Input an image path or URL <<< /root/autodl-tmp/images/cat.pngInput an image path or URL <<< /root/autodl-tmp/images/animal.png这两张图片的区别在于它们的动物种类和场景。1. **第一张图片**: - 动物:一只小猫。 - 场景:背景是模糊的,可能是室内环境,但具体细节不清晰。2. **第二张图片**: - 动物:四只羊。 - 场景:背景是一个绿色的草地,有山丘和蓝天白云,显得非常自然和田园风光。总结来说,第一张图片展示了一只小猫,而第二张图片展示了四只羊在一个自然的环境中。--------------------------------------------------

输入“这两张图有什么区别”之后,控制台会自动的输出“Input an image path or URL <<<” 提示输入图片地址

示例解释
输入 这两张图有啥区别
这里的标签表示接下来要输入的是图像数据。
表示有两个图像需要输入。
这两张图有啥区别 是文本部分,描述了用户想要模型完成的任务。
模型会根据 标签的位置,将图像数据嵌入到 inputs_embeds 中,并结合文本部分进行推理。

模型推理消耗GPU资源(nvidia - smi)
AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理

5.2. Python推理

import osos.environ[\'CUDA_VISIBLE_DEVICES\'] = \'0\'os.environ[\'MAX_PIXELS\'] = \'1003520\'os.environ[\'VIDEO_MAX_PIXELS\'] = \'50176\'os.environ[\'FPS_MAX_FRAMES\'] = \'12\'from swift.llm import PtEngine, RequestConfig, InferRequestmodel = \'/root/autodl-tmp/Qwen/Qwen2.5-VL-3B-Instruct\'# 加载推理引擎engine = PtEngine(model, max_batch_size=2)request_config = RequestConfig(max_tokens=512, temperature=0)# 这里使用了3个infer_request来展示batch推理infer_requests = [ InferRequest(messages=[{\'role\': \'user\', \'content\': \'who are you?\'}]), InferRequest(messages=[{\'role\': \'user\', \'content\': \'两张图的区别是什么?\'}],  images=[\'/root/autodl-tmp/images/cat.png\', \'/root/autodl-tmp/images/animal.png\']), InferRequest(messages=[{\'role\': \'user\', \'content\': \'}],  videos=[\'https://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/baby.mp4\']),]resp_list = engine.infer(infer_requests, request_config)query0 = infer_requests[0].messages[0][\'content\']print(f\'response0: {resp_list[0].choices[0].message.content}\')print(f\'response1: {resp_list[1].choices[0].message.content}\')print(f\'response2: {resp_list[2].choices[0].message.content}\')

代码执行打印输出如下:

response0: I am a large language model created by Alibaba Cloud. I am called Qwen.response1: 这两张图片展示了完全不同的主题和风格。以下是它们之间的主要区别:1. **主题**- 第一张图片展示了一只可爱的猫咪,具有卡通风格的绘画。 - 第二张图片展示了一群卡通风格的绵羊,背景是一个绿色的草地和山丘。2. **风格**- 第一张图片采用了卡通风格,色彩鲜艳,细节丰富,尤其是猫咪的眼睛和表情非常生动。 - 第二张图片同样采用了卡通风格,但更偏向于简洁和可爱,颜色柔和,整体画面更加和谐。3. **内容**- 第一张图片中的猫咪是主角,占据了画面的主要部分,显得非常突出。 - 第二张图片中的绵羊是一组角色,每只绵羊都有独特的特征,但都保持了统一的卡通风格。总结来说,第一张图片专注于一只可爱的猫咪,而第二张图片则是一组卡通风格的绵羊,背景和主题完全不同。response2: A baby wearing glasses is sitting on a bed and reading a book. The baby is holding the book with both hands and is looking down at it. The baby is wearing a light blue shirt and pink pants. The baby is sitting on a white blanket. The baby is looking at the book and appears to be enjoying it. The baby is not moving much, just slightly shifting its head and body as it reads.

6. 结语

通过本文的介绍,我们对ms-swift框架的大模型推理实践有了较为全面的了解。从环境搭建到命令行推理和代码推理,我们学习了如何利用ms-swift框架实现高效的大模型推理。无论您是初学者还是高级开发者,ms-swift框架都提供了灵活且强大的工具,帮助您将大模型集成到各种应用场景中,为用户提供这些强大模型的智能能力。

希望本文能够帮助您更好地理解和应用ms-swift框架的大模型推理功能。在未来的学习和实践中,您可以进一步探索更多高级功能和优化技巧,不断提升模型性能和应用体验。

AI大模型ms-swift框架实战指南(四):大模型推理实践完全指南_使用ms-swift进行推理

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!