[ PROMPT_NODE_22688 ]
profiling
[ SKILL_DOCUMENTATION ]
# 性能分析指南
使用 TensorBoard 对机器学习模型进行分析和优化的完整指南。
## 目录
- PyTorch Profiler
- TensorFlow Profiler
- GPU 利用率
- 内存分析
- 瓶颈检测
- 优化策略
## PyTorch Profiler
### 基础分析
python
import torch
import torch.profiler as profiler
model = MyModel().cuda()
optimizer = torch.optim.Adam(model.parameters())
# 分析训练循环
with profiler.profile(
activities=[
profiler.ProfilerActivity.CPU,
profiler.ProfilerActivity.CUDA,
],
on_trace_ready=torch.profiler.tensorboard_trace_handler('./runs/profiler'),
record_shapes=True,
with_stack=True
) as prof:
for step, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data.cuda())
loss = F.cross_entropy(output, target.cuda())
loss.backward()
optimizer.step()
# 标记分析步骤
prof.step()
if step >= 10: # 分析前 10 步
break
### 分析器配置
python
with profiler.profile(
activities=[
profiler.ProfilerActivity.CPU, # 分析 CPU 操作
profiler.ProfilerActivity.CUDA, # 分析 GPU 操作
],
schedule=profiler.schedule(
wait=1, # 预热步数 (跳过分析)
warmup=1, # 预热分析器步数
active=3, # 活跃分析步数
repeat=2 # 重复周期 2 次
),
on_trace_ready=torch.profiler.tensorboard_trace_handler('./runs/profiler'),
record_shapes=True, # 记录张量形状
profile_memory=True, # 跟踪内存分配
with_stack=True, # 记录源代码堆栈跟踪
with_flops=True # 估算 FLOPS
) as prof:
for step, batch in enumerate(train_loader):
train_step(batch)
prof.step()
### 推理分析
python
model.eval()
with profiler.profile(
activities=[profiler.ProfilerActivity.CPU, profiler.ProfilerActivity.CUDA],
on_trace_ready=torch.profiler.tensorboard_trace_handler('./runs/inference_profiler')
) as prof:
with torch.no_grad():
for i in range(100):
data = torch.randn(1, 3, 224, 224).cuda()
output = model(data)
prof.step()
### 分析数据
python
# 打印分析摘要
print(prof.key_averages().table(sort_by="cuda_time_total", row_limit=10))
# 导出 Chrome 追踪文件 (用于 chrome://trac