基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,视频资源包5000点
简介: 本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。

一、测试环境准备
1.1硬件信息
ECS 云主机配置: 32核心 128G内存 400G SSD硬盘
GPU加速卡:NVIDIA A30 * 8
半精度:165 TFLOPS
显存:24G

1.2 系统软件环境要求
要求:根据NVIDIA官方给出的驱动版本安装对应的CUDA及对应软件包环境。参考如下图1:
操作系统: Ubuntu-22.04
Kernel: 6.5.0-27
Python 3.11
gcc版本:12.3
NVIDIA驱动版本:NVIDIA-Linux-x86_64-550.54.15
CUDA 版本:cuda_12.4.0_550.54.15
Pytorch:2.4.0
image.png
图1:CUDA与NVIDIA驱动对应版本
image.png
图2: NVIDIA-Dirvier 550.54.15
image.png
图3: 驱动支持的NVIDIA GPU卡型号
image.png
图4:NVIDIA-550.54.15驱动支持的Linux操作系统版本
1.3 安装 NVIDIA 驱动、CUDA及Pytorch

驱动安装命令:

chmod +x NVIDIA-Linux-x86_64-550.54.15.run
sudo ./NVIDIA-Linux-x86_64-550.54.15.run -no-x-check -no-nouveau-check -no-opengl-files

-no-x-check: 安装时关闭X服务;
-no-nouveau-check: 安装时禁用nouveau;
-no-opengl-files: 只安装驱动文件,不安装OpenGL文件。

image.png

CUDA安装命令:

wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.4.0_550.54.15_linux.run
# sudo sh cuda_12.4.0_550.54.15_linux.run
# nvcc -V     ##查看 CUDA版本

image.png
image.png
image.png
注意: pytorch 需要与 cuda python 版本对应,如下图6:
image.png

1.4 查看GPU摘要信息
image.png

二、大模型之-Qwen1.5-72B-chat部署
本次我们主要基于通义千问72B大模型进行性能基准测试,包括模型下载、环境设置、使用 vLLM框架进行推理的方法,以及本地部署参数及常见问题,特别是关于显存管理和API测试的详细说明。
2.1 Qwen介绍
(1) 模型细节
通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模的模型。Qwen-72B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-72B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-72B-Chat。本仓库为Qwen-72B-Chat的仓库。
(2)通义千问-72B(Qwen-72B)主要有以下特点:

  1. 大规模高质量训练语料:使用超过3万亿tokens的数据进行预训练,包含高质量中、英、多语言、代码、数学等数据,涵盖通用及专业领域的训练语料。通过大量对比实验对预训练语料分布进行了优化。
  2. 强大的性能:Qwen-72B在多个中英文下游评测任务上(涵盖常识推理、代码、数学、翻译等),效果显著超越现有的开源模型。具体评测结果请详见下文。
  3. 覆盖更全面的词表:相比目前以中英词表为主的开源模型,Qwen-72B使用了约15万大小的词表。该词表对多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强和扩展。
  4. 更长的上下文支持:Qwen-72B支持32k的上下文长度。
    系统指令跟随:Qwen-72B-Chat可以通过调整系统指令,实现角色扮演,语言风格迁移,任务设定,和行为设定等能力。

2.2 Qwen72B模型部署环境和硬件要求
(1)硬件环境要求:

  • 运行BF16或FP16模型需要多卡至少144GB显存
  • 运行Int4模型至少需要48GB显存
  • 支持的显卡:
    • Tesla A100 40GB/ 80GB
    • Tesla A800 40GB/80GB
    • Tesla H100 80GB
    • Tesla H800 80GB
    • Tesla L40 48GB
    • Tesla A40 48GB
    • Tesla A30 24GB
    • Tesla A10 24G
    • Tesla A16 64G
    • RTX 6000 Ada 48G
    • RTX A6000 48G
    • RTX A5500 24G
    • RTX A5000 24G
    • RTX 8000 48G
      (2)软件环境:
      python 3.8及以上版本
      pytorch 1.12及以上版本,推荐2.0及以上版本
      建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)
      vLLM(Virtualized Language Learning Model)是一种用于自然语言处理(NLP)的模型架构或框架,旨在提高大规模语言模型(如GPT等)的性能和效率。vLLM安装版本0.6.2 。

2.3 下载大模型(魔塔)
qwen/Qwen1.5-72B-Chat为模型的ID,当前国内主要可以在魔搭社区和HuggingFace下载。
魔塔: https://modelscope.cn/models/qwen/Qwen-72B/summary
HuggingFace: https://huggingface.co/Qwen/Qwen1.5-72B-Chat

这里,我们通过魔塔工具命令进行模型下载:

# 安装 modeslcope命令
pip install modelscope

# 使用 modelscope下载整个模型
mkdir Qweb-download-cache
modelscope download --model 'Qwen/Qwen1.5-72B-Chat' --cache_dir './Qweb-download-cache' --local_dir './Qweb-download-cache'

## 参数选项###
--model 'Qwen/Qwen1.5-72B-Chat'    ##指定下载的模型;
--cache_dir './Qweb-download-cache'   ##指定下载的cache_dir,模型文件将被下载到cache_dir/Qwen/Qwen1.5-72B-Chat;
--local_dir '/data/llm-test'            ##指定下载的模型存放目录,模型文件将被下载到./local_dir/下;

#下载模型
modelscope download --model 'Qwen/Qwen1.5-72B-Chat' --local_dir '/data/llm-test/Qwen-download'

image.png
模型总大小 135GB

2.5 使用 vLLM 本地部署 Qwen1.5-72B-Chat

(1)官方部署方式

python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat

(2)本地化部署命令 (踩坑测试)

#备注:8卡A30 ,cuda12.4
python -m vllm.entrypoints.openai.api_server --host 0.0.0.0 --port 8000 --gpu-memory-utilization 0.9 --max-model-len 29856  --model Qwen1.5-72B-Chat --tensor-parallel-size 8

参数说明:

  • --host 0.0.0.0 # 模型运行监听IP地址
  • --port 18000 # 监听端口
  • --gpu-memory-utilization 0.9 # 占用GPU 内存比例;
  • --max-model-len 29856 # 上下文长度
  • --model Qwen1.5-72B-Chat # 指定文件位置
  • --tensor-parallel-size 8 # 指定8张卡运行大模型

(3)常见问题:

在模型推理过程中,最容易出现 OOM内存溢出问题,可以尝试修改两个参数。第一个参数是--max-model-len,我们提供的默认最大位置嵌入 (max_position_embedding) 为 32768, 因此服务时的最大长度也是这个值;这样会导致更高的内存需要。
因此,将此值适当的减小,通常有助于解决 OOM 问题。 第二个参数是 --gpu-memory-utilization。 默认情况下,该值是0.9 ,我们可以将其调高以应对 OOM 问题。 这也是为什么 LLM (大语言模型)服务总是占用大量内存的原因。

问题例1:The model's max seq len (29856) is larger than the maximum number of tokens that can be stored in KV cache (3936). Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine., Traceback (most recent call last):

原因分析:
出现该问题的原因主要是因为模型的最大序列长度(29856)超出了 KV 缓存所能支持的最大令牌数(3936)。在推理过程中,KV 缓存用于存储中间计算结果,以加速模型推理,但其容量有限。当输入的序列长度超过该限制时,就会导致报错。因此,确保模型的输入长度在 KV 缓存的范围内是关键。

解决方案:

  • 设置合理的 --max-model-len:建议将其设置为 3936 或更低,以避免 KV 缓存错误。
  • 调整 --gpu-memory-utilization:可以设置为较低值,例如 0.8,以确保在推理过程中有足够的显存余量。
  • 使用合适的张量并行度:确保 --tensor-parallel-size 设置为 8,这样可以充分利用所有 GPU。
  • 安装 vllm-flash-attn

优化后的推理部署命令:

python  -m vllm.entrypoints.openai.api_server  \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.9 \
--max-model-len 1024 \
--model Qwen1.5-72B-Chat \ 
--tensor-parallel-size 8

部署成功:
image.png
image.png

查看 GPU 运行显存、功耗、进程等概况信息:
image.png

三、大模型API测试

3.1 API提问测试
(1)API提问测试

curl --location --request POST 'http://127.0.0.1:8000/v1/chat/completions' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
   
  "model": "Qwen1.5-72B-Chat",
  "messages": [
    {
   
      "role": "user",
      "content": "帮我写一个PPT大纲,要10个章节,每个章节有3个小标题,PPT的主题是《AI的应用与发展》"
    }
  ]
}'

(2)测试结果:
服务端测试响应:

image.png

客户端回答结果:

image.png

(3)JSON格式化输出结果:

{
   
    "id": "chat-622a4bd175154ba69d94af454db21144",
    "object": "chat.completion",
    "created": 1728452929,
    "model": "Qwen1.5-72B-Chat",
    "choices": [
        {
   
            "index": 0,
            "message": {
   
                "role": "assistant",
                "content": "一、引言\n1.1 什么是AI(人工智能)\n1.2 AI的历史发展\n1.3 AI在现代生活中的重要性\n\n二、AI的基础技术\n2.1 机器学习\n2.1.1 监督学习\n2.1.2 无监督学习\n2.1.3 强化学习\n2.2 人工智能算法\n2.2.1 决策树\n2.2.2 神经网络\n2.2.3 支持向量机\n2.3 大数据与云计算在AI中的作用\n2.3.1 大数据的定义与应用\n2.3.2 云计算的原理与功能\n2.3.3 大数据与云计算的结合\n\n三、AI在工业领域的应用\n3.1 智能制造\n3.1.1 自动化生产线\n3.1.2 预测性维护\n3.1.3 质量控制\n3.2 工业机器人\n3.2.1 机器人在生产线上的角色\n3.2.2 服务机器人\n3.2.3 未来发展趋势\n\n四、AI在医疗领域的应用\n4.1 诊断辅助\n4.1.1 影像识别\n4.1.2 病理分析\n4.1.3 个性化医疗\n4.2 患者管理\n4.2.1 健康监测\n4.2.2 远程医疗\n4.2.3 患者咨询服务\n\n五、AI在教育领域的应用\n5.1 智能教学\n5.1.1 个性化学习路径\n5.1.2 人工智能教师\n5.1.3 在线评估系统\n5.2 教育管理\n5.2.1 学生行为分析\n5.2.2 资源推荐\n5.2.3 教学资源的智能化\n\n六、AI在交通领域的应用\n6.1 自动驾驶\n6.1.1 无人驾驶汽车\n6.1.2 无人机配送\n6.1.3 智能交通管理\n6.2 交通预测与规划\n6.2.1 交通流量预测\n6.2.2 交通路线优化\n6.2.3 共享出行服务\n\n七、AI在金融领域的应用\n7.1 风险评估\n7.1.1 信用评级\n7.1.2 诈骗检测\n7.1.3 投资策略\n7.2 金融服务\n7.2.1 个性化理财\n7.2.2 自动化交易\n7.2.3 无人银行\n\n八、AI在娱乐领域的应用\n8.1 个性化推荐\n8.1.1 视频推荐\n8.1.2 音乐推荐\n8.1.3 游戏AI\n8.2 虚拟现实与增强现实\n8.2.1 VR/AR技术\n8.2.2 内容创造\n8.2.3 互动体验\n\n九、AI的伦理与挑战\n9.1 隐私保护\n9.1.1 数据安全\n9.1.2 用户隐私\n9.2 工作岗位影响\n9.2.1 自动化失业\n9.2.2 职业转型\n9.3 AI决策的透明度与公平性\n\n十、AI的未来展望\n10.1 AI技术的持续创新\n10.1.1 量子计算\n10.1.2 量子人工智能\n10.2 AI的社会影响\n10.2.1 社会结构变化\n10.2.2 全球化趋势\n10.3 人与AI的共生\n10.3.1 人机合作\n10.3.2 AI伦理法规建设\n10.3.3 AI教育与培训的必要性",
                "tool_calls": []
            },
            "logprobs": null,
            "finish_reason": "stop",
            "stop_reason": null
        }
    ],
    "usage": {
   
        "prompt_tokens": 48,
        "total_tokens": 917,
        "completion_tokens": 869
    },
    "prompt_logprobs": null
}

image.png

API测试结果分析:

INFO 10-09 13:48:49 logger.py:36] Received request chat-622a4bd175154ba69d94af454db21144: prompt: '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n帮我写一个PPT大纲,要10个章节,每个章节有3个小标题,PPT的主题是《AI的应用与发展》<|im_end|>\n<|im_start|>assistant\n', params: SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, repetition_penalty=1.0, temperature=0.7, top_p=1.0, top_k=-1, min_p=0.0, seed=None, use_beam_search=False, length_penalty=1.0, early_stopping=False, stop=[], stop_token_ids=[], include_stop_str_in_output=False, ignore_eos=False, max_tokens=976, min_tokens=0, logprobs=None, prompt_logprobs=None, skip_special_tokens=True, spaces_between_special_tokens=True, truncate_prompt_tokens=None), prompt_token_ids: [151644, 8948, 198, 2610, 525, 264, 10950, 17847, 13, 151645, 198, 151644, 872, 198, 108965, 61443, 46944, 47, 2828, 116472, 3837, 30534, 16, 15, 18947, 113066, 3837, 103991, 113066, 18830, 18, 110026, 60396, 3837, 47, 2828, 109151, 20412, 26940, 15469, 106736, 111636, 25067, 151645, 198, 151644, 77091, 198], lora_request: None, prompt_adapter_request: None.
INFO 10-09 13:48:49 engine.py:288] Added request chat-622a4bd175154ba69d94af454db21144.
INFO 10-09 13:48:50 metrics.py:351] Avg prompt throughput: 9.6 tokens/s, Avg generation throughput: 2.2 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.8%, CPU KV cache usage: 0.0%.
INFO 10-09 13:48:55 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 2.5%, CPU KV cache usage: 0.0%.
INFO 10-09 13:49:00 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 4.1%, CPU KV cache usage: 0.0%.
INFO 10-09 13:49:05 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 5.8%, CPU KV cache usage: 0.0%.
INFO 10-09 13:49:10 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 7.4%, CPU KV cache usage: 0.0%.
INFO 10-09 13:49:15 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 9.1%, CPU KV cache usage: 0.0%.
INFO 10-09 13:49:20 metrics.py:351] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 27.3 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 10.9%, CPU KV cache usage: 0.0%.

根据上述Qwen-72B-chat大模型推理部署测试结果,可以从以下几个指标分析系统的性能和效率:

  1. Prompt吞吐量:Avg prompt throughput 9.6 tokens/s,表明在输入初期有一定的prompt处理速度;
  2. 生成吞吐量(Throughput):Avg generation throughput 27.3,表示系统生成响应的速度为每秒生成27.3个token;
  3. KV缓存使用率:在推理过程中,GPU KV缓存的使用率逐渐增加,从0.8%上升到10.9%。这表明随着推理过程的进行,模型需要在GPU中存储更多的中间状态数据,但增长率稳定且控制在低水平,说明缓存管理较为高效。
  4. 请求处理状态:
    • Running requests: 只有1个请求在处理(Running: 1 reqs);
    • Pending:没有带处理的状态(Pending: 0 reqs);
    • Swapped requests:被交换出去的请求(Swapped: 0 reqs);

测试结果统计
image.png

(4)显存占用情况:
显存使用情况,可用通过nvidia-smi 工具搜集GPU加速卡概况信息中查看,情况见下图:
(1)测试前:8张GPU卡显存使用均为0MB;
(2)测试中:8张GPU卡平均显存使用为 21441.25MB;

image.png

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
3天前
|
弹性计算 双11 开发者
阿里云ECS“99套餐”再升级!双11一站式满足全年算力需求
11月1日,阿里云弹性计算ECS双11活动全面开启,在延续火爆的云服务器“99套餐”外,CPU、GPU及容器等算力产品均迎来了全年最低价。同时,阿里云全新推出简捷版控制台ECS Lite及专属宝塔面板,大幅降低企业和开发者使用ECS云服务器门槛。
|
21天前
|
存储 弹性计算 人工智能
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
阿里云弹性计算产品线、存储产品线产品负责人Alex Chen(陈起鲲)及团队内多位专家,和中国电子技术标准化研究院云计算标准负责人陈行、北京望石智慧科技有限公司首席架构师王晓满两位嘉宾,一同带来了题为《通用计算新品发布与行业实践》的专场Session。本次专场内容包括阿里云弹性计算全新发布的产品家族、阿里云第 9 代 ECS 企业级实例、CIPU 2.0技术解读、E-HPC+超算融合、倚天云原生算力解析等内容,并发布了国内首个云超算国家标准。
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
|
3天前
|
人工智能 弹性计算 文字识别
基于阿里云文档智能和RAG快速构建企业"第二大脑"
在数字化转型的背景下,企业面临海量文档管理的挑战。传统的文档管理方式效率低下,难以满足业务需求。阿里云推出的文档智能(Document Mind)与检索增强生成(RAG)技术,通过自动化解析和智能检索,极大地提升了文档管理的效率和信息利用的价值。本文介绍了如何利用阿里云的解决方案,快速构建企业专属的“第二大脑”,助力企业在竞争中占据优势。
|
1天前
|
人工智能 自然语言处理 安全
创新不设限,灵码赋新能:通义灵码新功能深度评测
自从2023年通义灵码发布以来,这款基于阿里云通义大模型的AI编码助手迅速成为开发者心中的“明星产品”。它不仅为个人开发者提供强大支持,还帮助企业团队提升研发效率,推动软件开发行业的创新发展。本文将深入探讨通义灵码最新版本的三大新功能:@workspace、@terminal 和 #team docs,分享这些功能如何在实际工作中提高效率的具体案例。
|
7天前
|
负载均衡 算法 网络安全
阿里云WoSign SSL证书申请指南_沃通SSL技术文档
阿里云平台WoSign品牌SSL证书是由阿里云合作伙伴沃通CA提供,上线阿里云平台以来,成为阿里云平台热销的国产品牌证书产品,用户在阿里云平台https://www.aliyun.com/product/cas 可直接下单购买WoSign SSL证书,快捷部署到阿里云产品中。
1850 6
阿里云WoSign SSL证书申请指南_沃通SSL技术文档
|
10天前
|
Web App开发 算法 安全
什么是阿里云WoSign SSL证书?_沃通SSL技术文档
WoSign品牌SSL证书由阿里云平台SSL证书合作伙伴沃通CA提供,上线阿里云平台以来,成为阿里云平台热销的国产品牌证书产品。
1789 2
|
19天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
26天前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5386 15
|
13天前
|
人工智能 关系型数据库 Serverless
1024,致开发者们——希望和你一起用技术人独有的方式,庆祝你的主场
阿里云开发者社区推出“1024·云上见”程序员节专题活动,包括云上实操、开发者测评和征文三个分会场,提供14个实操活动、3个解决方案、3 个产品方案的测评及征文比赛,旨在帮助开发者提升技能、分享经验,共筑技术梦想。
1142 152
|
21天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1585 14