手写最基础的大模型推理并使用Profile监控GPU性能消耗情况

torch.profiler 来监控大模型推理,这样可以得到 GPU/CPU 使用情况、时间消耗、内存占用 ,比简单的 psutil 更精确。下面完整示例:


python 复制代码
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import time

# 1️⃣ 模型和 tokenizer
model_name = "distilgpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)

# 输入 prompt
prompt = "Hello, I am a small language model. I can"
inputs = tokenizer(prompt, return_tensors="pt").to(device)

# 2️⃣ 使用 torch.profiler 监控推理
with torch.profiler.profile(
    schedule=torch.profiler.schedule(wait=1, warmup=1, active=2, repeat=1),
    on_trace_ready=torch.profiler.tensorboard_trace_handler("./log"),
    record_shapes=True,
    profile_memory=True,
    with_stack=True
) as prof:
    
    # 模拟多步推理,方便 profiler 捕捉
    for step in range(4):
        outputs = model.generate(
            **inputs,
            max_length=50,
            do_sample=True,
            temperature=0.7,
            top_k=50,
            top_p=0.95,
            no_repeat_ngram_size=2
        )
        prof.step()  # 标记 step,方便分析

# 3️⃣ 打印统计信息
print(prof.key_averages().table(
    sort_by="self_cpu_time_total", row_limit=20
))

# 4️⃣ TensorBoard 查看
print("Profiler traces saved to ./log, run:")
print("tensorboard --logdir=./log")

✅ 功能说明

  1. Profiler 配置
  • record_shapes=True → 记录每个操作的 tensor 形状
  • profile_memory=True → 记录显存/内存占用
  • with_stack=True → 打印调用堆栈,定位耗时操作
  1. Schedule
python 复制代码
schedule=torch.profiler.schedule(wait=1, warmup=1, active=2, repeat=1)
  • wait:等待 step 数不记录
  • warmup:热身 step,不计入统计
  • active:记录 step 数
  • repeat:重复几次 schedule
  • 用于多步生成或批量生成时统计更准确
  1. Profiler 输出
  • prof.key_averages() → CPU/GPU 每个操作耗时、显存消耗
  • 可以排序(self_cpu_time_total / cuda_time_total)找到瓶颈
  1. TensorBoard 可视化
bash 复制代码
tensorboard --logdir=./log
  • 可以看到每步操作的 GPU/CPU 时间、内存曲线
  • 直观分析模型推理性能

💡 优化建议

  • 如果模型更大(7B+),可以结合 torch.autocast("cuda") 做混合精度,节省显存并提升速度:
python 复制代码
with torch.autocast(device_type="cuda", dtype=torch.float16):
    outputs = model.generate(...)
  • 可以在 profiler 的 on_trace_ready 回调中写自定义分析,比如打印每层显存占用。

访问

https://ui.perfetto.dev/#!/viewer?local_cache_key=0-json


相关推荐
Jiamiren3 小时前
WEEX:长鑫科技上市大涨,宇树科技合约同步走高,传统资产交易迎来新路径
人工智能·科技·区块链
海兰3 小时前
mcporter — 安装部署及使用完全指南(二)
人工智能·agent
一拳不是超人3 小时前
LangChain 们的丧钟?DeepSeek 把 Agent 开发变成了拼乐高
人工智能·agent
麻雀飞吧3 小时前
零基础选量化工具,先把问题说清楚
人工智能·python
向成科技3 小时前
新品亮相|向成电子IPCA_3588H AI边缘网关重磅发布,算力下沉,自主可控
人工智能·边缘计算·国产化·硬件·边缘网关·主板·端侧ai
段一凡-华北理工大学3 小时前
AI推动工业智能化转型~系列文章20:工业 AI 平台架构:云-边-端协同的技术体系
人工智能·python·架构·工业平台·云-边协同
IT_陈寒3 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
CodeBlog-star3 小时前
Harness Engineering:Pi Agent 架构深度解析
人工智能·python·架构·harness工程
chen_zn954 小时前
《VLA 系列》Human-to-Robot Transfer | 人类视频共训练 | 跨本体涌现迁移 | 论文解析
人工智能·深度学习·transformer·具身智能·vla
CCC:CarCrazeCurator4 小时前
DeepSeek‑Harness Windows 本地快速上手
深度学习·数据挖掘