# LLM_Studio **Repository Path**: Lss__sjk/llm_studio ## Basic Information - **Project Name**: LLM_Studio - **Description**: 个人用来学习大模型推理的空间 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-30 - **Last Updated**: 2026-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这是一个为您量身定制的、执行颗粒度精确到**每一天**的 30 天“地狱级”进阶路线。 这份计划的假设前提是:**你需要具备极强的动手能力,不仅要会用工具,还要看懂源码,甚至能手写算子。** --- ### 第一周:基石——从模型数学到硬件物理 **本周目标:** 能够在大脑中建立 Transformer 数据流与 GPU 硬件执行流的映射关系。 * **Day 1: Transformer 数学与显存解剖** * **任务:** 手写 Transformer Block 推理代码(Python),不依赖 `nn.Linear`,纯用 `torch.matmul`。 * **重点:** 手动计算 Llama-3-8B 在 Context Window=8192 时的 KV Cache 大小(GB)。 * **产出:** 一个 Excel 表格,输入 Batch Size 和 Sequence Length,自动计算显存占用。 * **Day 2: 性能指标与 Roofline Model(已详细介绍)** * **任务:** 使用 `thop` 或手动计算 Day 1 代码的 FLOPs。 * **重点:** 绘制 A100 vs 4090 的 Roofline 曲线图,标出 Llama-3 Decoding 阶段所在的点。 * **产出:** 明确回答:为什么 Batch Size 从 1 增加到 8,延迟几乎没变? * **Day 3: GPU 体系结构 (Memory Hierarchy)** * **学习:** HBM -> L2 Cache -> L1 Cache/Shared Memory -> Registers 的速度差异。 * **概念:** Bank Conflict, Coalesced Access (合并访存)。 * **任务:** 阅读 NVIDIA Hopper Architecture Whitepaper (H100)。 * **核心:** 理解为什么 FlashAttention要把数据切块放进 SRAM。 * **Day 4: GPU 计算原理 (Compute & Scheduling)** * **概念:** SM (Streaming Multiprocessor), Warp (32 threads), Kernel, Grid, Block。 * **重点:** 什么是 Warp Divergence (线程束分歧)?为什么写 CUDA 尽量不用 `if-else`? * **任务:** 解释 SIMT (Single Instruction Multiple Threads) 模型。 * **Day 5: 性能分析工具 (Profiling Basics)** * **工具:** `Nsight Systems (nsys)`。 * **实战:** 对一个简单的 PyTorch 矩阵乘法脚本进行 Profile。 * **分析:** 在 Timeline 上区分 CPU 准备时间、PCIe 传输时间、GPU Kernel 执行时间。 * **Day 6: PyTorch Profiler 与算子融合** * **概念:** Kernel Launch Overhead。为什么 Python for-loop 慢? * **技术:** `torch.compile` (PyTorch 2.0) 的原理。 * **实战:** 对比 Eager Mode 和 Compiled Mode 运行一个简单 MLP 的时间差异。 * **Day 7: 第一周复盘与面试题攻克** * **面试题:** “解释一下为什么 Transformer 的 Attention 复杂度是 $O(N^2)$?” “GPU 的 Occupancy 是什么意思?” * **复习:** 重新看一遍 Day 1 的代码,想象它在 Day 3/4 的硬件上是如何流动的。 --- ### 第二周:算法核心——打破显存墙 **本周目标:** 掌握所有能让模型变小、变快的算法原理。 * **Day 8: 量化原理 (Quantization Basics)** * **理论:** 浮点数 (FP16/BF16) vs 定点数 (INT8)。 * **公式:** $X_{int} = \text{round}(X_{fp} / S + Z)$。理解 Scale 和 Zero-point。 * **任务:** 手写一个简单的 Python 函数,实现 Tensor 的对称量化和反量化,计算量化误差。 * **Day 9: 高级量化 (PTQ: AWQ & GPTQ)** * **痛点:** 为什么直接 Rounding 会由于 Outlier 导致精度崩盘? * **算法:** 深入阅读 **AWQ** 论文。理解“保留 1% 显著权重”的思想。 * **实战:** 使用 `AutoAWQ` 量化一个 7B 模型。 * **Day 10: Attention 优化 (FlashAttention V1)** * **核心:** **Tiling (分块)** 和 **Recomputation (重计算)**。 * **逻辑:** 怎么做到既不存 $N \times N$ 的 Attention Matrix,又能算准结果? * **任务:** 画出 FlashAttention 的数据切块流程图。 * **Day 11: 进阶 Attention (FlashAttn V2 & FlashDecoding)** * **差异:** V2 相比 V1 优化了什么?(Warp 间并行 vs Block 间并行)。 * **场景:** **FlashDecoding** 专门针对长文本生成(Decoding 阶段),解决了什么问题?(Seq len 维度的并行)。 * **Day 12: 显存管理革命 (PagedAttention)** * **类比:** 操作系统的虚拟内存 (Virtual Memory) & 页表 (Page Table)。 * **痛点:** 传统 KV Cache 的显存碎片浪费。 * **任务:** 阅读 vLLM 的 PagedAttention 论文图解。 * **Day 13: 投机采样 (Speculative Decoding)** * **原理:** “Draft Model (小模型) 猜,Target Model (大模型) 改”。 * **收益:** 将 Memory-Bound 任务转换为 Compute-Bound 任务。 * **实战:** 运行一段投机采样 Demo,观察 Acceptance Rate。 * **Day 14: 第二周复盘与实战挑战** * **挑战:** 给你一个 16GB 显存的 T4 卡,如何跑起来 Llama-2-13B?(答案组合:INT4量化 + Offloading)。 * **面试题:** “AWQ 和 GPTQ 的区别是什么?选型怎么选?” --- ### 第三周:系统架构——工业级部署方案 **本周目标:** 能够独立搭建高吞吐的推理服务,理解 vLLM 和 TRT-LLM 内部构造。 * **Day 15: 分布式推理基础 (Parallelism)** * **核心:** **Tensor Parallelism (TP)**。 * **细节:** MLP 层和 Attention 层分别怎么切?哪里需要 `AllReduce`? * **通信:** 了解 NCCL 库。NVLink 的重要性。 * **Day 16: 连续批处理 (Continuous Batching)** * **革命:** 也就是 Orca 论文提到的 In-flight batching。 * **对比:** 传统 Static Batching 为什么会因为“短板效应”浪费算力? * **理解:** 它是如何做到“来一个请求处理一个,结束一个释放一个”的。 * **Day 17: 源码阅读 —— vLLM (Scheduler)** * **目标:** 打开 GitHub vLLM 仓库。 * **定位:** 找到 `scheduler.py`。 * **问题:** vLLM 是如何决定当前 Step 处理哪些 Request 的?(Waiting -> Running -> Swapped)。 * **Day 18: 源码阅读 —— vLLM (Block Manager)** * **定位:** 找到 `block_manager.py`。 * **逻辑:** 物理 Block 和 逻辑 Block 是如何映射的?引用计数是怎么做的? * **Day 19: 工业界大杀器 —— TensorRT-LLM** * **流程:** HF Checkpoint -> Build Engine -> Runtime。 * **特点:** 静态图优化、算子深度融合。 * **实战:** 跑通 TRT-LLM 的 Llama example。 * **Day 20: 服务化框架 (Triton Inference Server)** * **架构:** Model Repository, Ensemble Model。 * **协议:** gRPC vs HTTP。 * **任务:** 将 TRT-LLM 引擎通过 Triton Server 部署起来。 * **Day 21: 压力测试 (Benchmarking)** * **工具:** `Locust` 或 vLLM 自带的 `benchmark_serving.py`。 * **指标:** 测量不同并发下的 Throughput 和 P99 Latency。 * **产出:** 一份专业的性能测试报告。 --- ### 第四周:专家进阶——手写算子与系统设计 **本周目标:** 突破 Python 限制,触碰底层 Kernel,并具备架构师视角的系统设计能力。 * **Day 22: OpenAI Triton 编程 (入门)** * **理由:** 比 CUDA 简单,是目前写 Kernel 的首选。 * **任务:** 阅读 Triton 官方教程 `01-vector-add`。 * **代码:** 在 Colab 上跑通向量加法 Kernel。 * **Day 23: OpenAI Triton 编程 (进阶)** * **任务:** 写一个 **Fused Softmax**。 * **难点:** 这里的 Reduction 操作是怎么做的? * **意义:** 理解算子融合到底省了什么(省了读写全局显存的时间)。 * **Day 24: 混合专家模型 (MoE) 推理优化** * **模型:** Mixtral-8x7B, DeepSeek-V2。 * **难点:** 专家路由带来的显存跳跃访问。 * **技术:** Expert Parallelism (EP)。 * **Day 25: 长文本优化 (Long Context)** * **位置编码:** 彻底理解 **RoPE (Rotary Positional Embeddings)**。 * **外推:** ALiBi, YaRN。 * **问题:** KV Cache 太大存不下怎么办?(KIVI, StreamingLLM)。 * **Day 26: 系统设计面试模拟 (System Design)** * **题目:** “设计一个日均百万调用量的企业级 RAG 推理平台”。 * **考点:** 显存规划、自动扩缩容、Batching 策略、多级缓存。 * **Day 27: 前沿技术扫描** * **关键词:** MLA (Multi-Head Latent Attention - DeepSeek的技术), FP8 Training/Inference。 * **任务:** 快速浏览本月 Arxiv 上关于 LLM Efficiency 的两篇论文。 * **Day 28: 简历打磨与深度复盘** * **任务:** 将这 28 天的项目经验(手写的量化、vLLM 源码阅读、Triton Kernel)转化为简历上的 Bullet Points。 * **话术:** “深入理解” -> “实现了...”,“熟悉” -> “优化了...”。 * **Day 29: 模拟面试 (Behavioral & Technical)** * **自问自答:** “如果在生产环境遇到首字延迟突然飙高,你如何排查?” (网络 -> 队列积压 -> 显存碎片 -> 硬件故障)。 * **Day 30: 终极实战** * **项目:** 选取一个未被 vLLM 官方支持的冷门小模型架构(或者魔改一个),尝试将其接入 vLLM 或为其写一个简单的推理脚本。 * **心态:** 恭喜,你现在已经具备了资深专家的知识体系。 --- ### 给您的执行建议 1. **关于代码:** 不要只看,一定要**跑**。哪怕只是 Copy 官方的 Example 跑通,也是巨大的进步。 2. **关于论文:** 资深专家必须读论文。不要怕数学符号,结合代码看公式。 3. **关于工具:** 遇到不懂的概念(如 NVLink 带宽),直接问 ChatGPT 或搜索 NVIDIA 官方文档,不要由着性子猜。 加油!这30天会很痛苦,但回报巨大。