Skip to content

Lab 1: 大模型qwen3 部署

个人作业 · 占总成绩 10% · 机器学习系统ISTE6002P.01

DDL
第 5 周周一(3.30) 23:59

1 实验目标

  • 独立使用 transformers 运行 Qwen3,理解从输入文本到生成文本的完整链路
  • 手动拆分 Prefill / Decode 两阶段并分别计时
  • 分析输入长度、输出长度、batch size 对推理性能的影响规律

2 背景知识

阶段计算特征瓶颈所在
Prefill并行处理全部输入 token,计算 KV Cache。Compute-bound,GPU 利用率高。计算量随输入长度线性增长 → TTFT 上升
Decode每步只生成 1 个 token,但需读取完整 KV Cache。Memory-bound,计算单元长期闲置。内存带宽 & KV Cache 大小 → TBT 瓶颈

性能指标说明:

  • TTFT(Time to First Token):首 token 延迟,反映 Prefill 耗时
  • TBT(Time Between Tokens):相邻 token 平均间隔,反映 Decode 单步耗时
  • Throughput(tokens/s):单位时间生成 token 总数
  • 峰值显存(GB):推理过程中 GPU 显存最大占用

3 实验步骤

Step 1 · 模型选择

按显存选择模型:

模型名称官方下载链接 (Hugging Face)预估权重显存占用核心特点
Qwen3-4B-Instruct-FP8Qwen/Qwen3-4B-Instruct-2507-FP8~4.5 GB (FP8)通用对话量化版:极低显存开销的通用对话模型,响应迅速,适合轻量级任务和快速部署,非思考模式。
Qwen3-4B-InstructQwen/Qwen3-4B-Instruct-2507~8.0 GB (BF16/FP16)全能长文与平衡:通用指令微调版,支持超长上下文,综合性能优异,适合日常对话、代码与 RAG,非思考模式。

想要快速上手 Qwen3,建议首先尝试使用 transformers 进行推理(https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507-FP8#quickstart), 会自动从 Hugging Face 的服务器下载model的权重(model.safetensors),默认地址~/.cache/huggingface/hub/。

注:如果Hugging Face下载太慢或经常断线,可以去ModelScope把权重文件下载下来,再将分词器和模型权重路径直接换成对应的本地路径。

可参考官方推理指南https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html


Step 2 · 基础推理

调用 model.generate() 跑通任意 prompt,截图终端输出与 nvidia-smi,作为报告中的提交内容。

参数探索:可以尝试修改 temperaturetop_p 等解码参数,对比不同随机性设定下,模型输出表现的差异。


Step 3 · Prefill / Decode 分段计时

不使用 generate(),手动拆分两阶段:

  • Prefill:单独调用 model.forward(input_ids),记录耗时与 KV Cache 大小,即 TTFT
  • Decode:循环调用 model.forward(next_token, past_key_values=kv),记录每步耗时,计算 TBT 均值

提示:通过开启 use_cache=True,让模型吐出计算过程中产生的所有历史键值对 (outputs.past_key_values)在 prefill 结束后保留供 decode 复用,这正是实际推理框架的核心机制之一。

注: 想了解具体模型结构、Embedding、Forward或Generate的可以查看模型代码,下载模型后可以在 Transformers 库的源码中找到。


Step 4 · 参数影响实验

固定其余参数,每次只改变一个变量,填写以下三组表格。

A · 输入长度对 Prefill 的影响

如固定 output_len=128, batch=1

指标input=64input=256input=512input=1024
TTFT (ms)
Prefill Throughput (tok/s)
显存占用 (GB)

B · 输出长度对 Decode 的影响

如固定 input_len=128, batch=1

指标output=64output=256output=512output=1024
TBT 均值 (ms)
Decode Throughput (tok/s)
KV Cache 增量 (GB)

C · Batch Size 的影响

如固定 input_len=128, output_len=128(超出显存上限可跳过)

指标batch=1batch=4batch=8batch=16
TTFT (ms)
Throughput (tok/s)
内存占用 (GB)

4 交付要求

代码

文件说明
infer.py包含 prefill/decode 分离计时逻辑的完整推理脚本
benchmark.pyStep 4 三组实验的自动化测量脚本
requirements.txtenvironment.yml环境依赖
README.md复现步骤与模型路径配置说明

实验报告(PDF)

章节内容要求
1 环境配置GPU 型号与显存、CUDA / PyTorch / transformers 版本、模型选择理由
2 实验数据实验数据表,附prompt推理截图
3 数据分析简单进行性能测试总结

5 评分标准(满分 100,折合总成绩 10%)

维度分值说明
代码可复现性25脚本可运行,README 清晰,依赖完整
Prefill / Decode 分离计时测试25两阶段独立测量,方法合理
三组参数实验数据完整30数据齐全,图表清晰
实验报告20结合数据,分析总结

提交方式:代码文件 + PDF 上传至研究生综合服务平台:https://yjs1.ustc.edu.cn/

提交格式学号_姓名_lab1.zip


Released under CC BY-NC-SA 4.0 License.