Skip to content

About

一套以 Jupyter Notebook 为主线的现代大语言模型课程。它不是把模型当成 黑盒调用,而是用 PyTorch 亲手实现核心组件:Tokenizer、Embedding、Attention、Transformer Block、 训练循环、MoE、LoRA、RLHF、解码、KV Cache、长上下文、VLM、评测、蒸馏和 On-Policy Distillation。

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

LLM Notebook · 大语言模型自学与实践

一套从零开始、动手实现的大语言模型学习笔记。从 Tokenizer 到 Transformer,从训练技巧到推理加速,从 VLM 前沿到生产部署,循序渐进,亲手写代码理解每一个核心概念。


⚠️ 内容来源声明

本项目中的 Notebook 内容并非原创,是基于以下开源教程进行的个人学习笔记整理:

使用目的:本仓库仅用于 个人学习与练习,所有代码、结构、讲解思路均参考自上述原始项目。 如需将内容用于其他用途,请以原作者发布的版本为准,并遵守原项目的许可证协议。


📚 项目简介

本项目是一套完整的大语言模型(LLM)自学实践教程,采用 Jupyter Notebook 形式组织。每个 Notebook 聚焦一个主题,包含原理讲解、可运行的代码实现、以及配套的练习题(作业)。

学习路径设计原则:

  • 由浅入深:先掌握基础组件(Tokenizer / Embedding / Transformer Block),再串成完整模型
  • 动手优先:每个概念都有对应的最小可运行实现,不只是"讲原理"
  • 注释详尽:代码中包含大量中文注释,方便对照理解

📂 目录结构

LLM-NOTEBOOK/
├── part1-foundation/          # 第一部分 · 基础
│   ├── 01-tokenizer-basics.ipynb      # Tokenizer 基础(字符级 / 词级 / 子词级)
│   ├── 02-bpe-tokenizer.ipynb         # 从零实现 BPE 子词算法
│   ├── 03-embedding.ipynb             # 词嵌入(Embedding)原理与实现
│   ├── 04-position-encoding.ipynb     # 位置编码(Sinusoidal / Learnable)
│   ├── 05-transformer-block.ipynb     # Transformer Block:自注意力 + FFN
│   ├── 06-mini-gpt.ipynb              # 实现 Mini-GPT:Decoder-only 语言模型
│   ├── 07-bert-encoder.ipynb          # 实现 BERT Encoder:双向编码模型
│   ├── karpathy_models.py             # 参考模型代码(Karpathy 风格)
│   └── data/
│       └── shakespeare_char/input.txt # 莎士比亚字符级语料
│
├── part2-training/            # 第二部分 · 训练技巧
│   ├── 08-gpt2-to-modern-models.ipynb # GPT-2 架构演进到现代 LLM
│   ├── 09-model-config.ipynb          # 模型配置与超参管理
│   ├── 10-moe.ipynb                   # 混合专家模型(Mixture of Experts)
│   ├── 11-training-loss.ipynb         # 训练损失函数与优化技巧
│   ├── 12-scaling-laws.ipynb          # Scaling Laws:模型规模定律
│   ├── 13-distributed-training.ipynb  # 分布式训练(DDP / ZeRO)
│   ├── 14-data-engineering.ipynb      # 数据工程:清洗、混合、打包
│   ├── 15-lora.ipynb                  # LoRA:低秩适配微调
│   ├── 16-function-calling.ipynb      # Function Calling 工具调用
│   ├── 17-rlhf-alignment.ipynb        # RLHF 对齐(SFT / RM / PPO)
│   └── 18-mla-kv-cache.ipynb          # MLA 与 KV Cache 优化
│
├── part3-inference/           # 第三部分 · 推理加速
│   ├── 19-generation.ipynb            # 生成策略(Greedy / Beam / Top-p / Top-k)
│   ├── 20-inference-acceleration.ipynb# 推理加速技巧总览
│   ├── 21-quantization.ipynb          # 量化(GPTQ / AWQ / INT8)
│   ├── 22-speculative-decoding.ipynb  # 投机解码
│   └── 23-inference-systems.ipynb     # 推理系统:vLLM / TensorRT-LLM
│
├── part4-frontiers/            # 第四部分 · 前沿方向
│   ├── 24-long-context.ipynb          # 长上下文技术(RoPE / YaRN / ALiBi)
│   ├── 25-cot-thinking.ipynb          # 思维链与推理型模型
│   ├── 26-vlm.ipynb                   # 视觉语言模型(VLM):Patchify + Projector + CLIP
│   └── 27-efficient-attention.ipynb   # 高效注意力机制
│
├── part5-production/            # 第五部分 · 生产部署
│   ├── 28-evaluation.ipynb            # 模型评估指标与基准
│   ├── 29-distillation.ipynb          # 知识蒸馏
│   ├── 30-opd.ipynb                   # OPD:按需推理优化
│   └── 31-llm-deployment.ipynb        # LLM 部署实战
│
└── appendix-advanced/         # 附录 · 高级主题
    ├── A-gpu-hardware.ipynb            # GPU 硬件架构与显存
    ├── B-flops-memory-accounting.ipynb # FLOPs 与显存占用估算
    ├── C-mixed-precision-training.ipynb# 混合精度训练(FP16 / BF16)
    ├── D-collective-communications.ipynb# 集合通信(AllReduce / AllGather)
    ├── E-parallelism-strategies.ipynb  # 并行策略(TP / PP / EP)
    ├── F-flash-attention.ipynb         # Flash Attention 原理
    ├── G-advanced-kernels.ipynb        # 高级 CUDA Kernel 基础
    └── H-probability-information.ipynb # 概率论与信息论基础


🚀 快速开始

环境要求

项目 最低版本 推荐版本
Python 3.10+ 3.11
PyTorch 2.0+ 2.3+
Jupyter Lab 3.6+ 4.0+

安装依赖

# 克隆项目
git clone <repository-url>
cd LLM-NOTEBOOK

# 推荐使用 conda 创建虚拟环境
conda create -n llm-notebook python=3.11
conda activate llm-notebook

# 安装核心依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install jupyterlab matplotlib numpy tiktoken transformers datasets accelerate sentencepiece

# 启动 Jupyter Lab
jupyter lab

学习顺序

建议按照目录编号顺序学习:Part 1 → Part 2 → Part 3 → Part 4 → Part 5,附录可按需穿插查阅。

每个 Notebook 末尾均附有 作业题,建议亲手完成以加深理解。


🎨 图片风格规范指南

本章节为项目贡献者和维护者提供统一的图片风格规范。所有插入 Notebook 或项目文档中的图片、图表、示意图均应遵循以下规范,以确保视觉风格的一致性和专业性。

1. 色彩方案

1.1 主色调(Brand Primary Colors)

项目采用 科技蓝 + 深紫 的配色体系,传达「专业、理性、创新」的技术调性。

用途 色名 Hex 代码 RGB 示例
主色 · 标题 / 主元素 Deep Blue #1E3A8A 30, 58, 138 标题文字、核心模块边框
主色 · 强调 Brand Blue #3B82F6 59, 130, 246 按钮、链接、关键标注
辅色 · 渐变 Violet #8B5CF6 139, 92, 246 渐变终点、高级强调
辅色 · 背景 Light Indigo #EEF2FF 238, 242, 255 区块背景、浅色底纹

1.2 功能色(Semantic Colors)

用于图表和示意图中的类别区分。

语义 色名 Hex 代码 适用场景
正确 / 通过 Success Green #10B981 验证通过、正向指标
警告 / 注意 Warning Amber #F59E0B 注意事项、中间状态
错误 / 损失 Error Red #EF4444 错误路径、Loss 曲线
信息 / 次要 Info Slate #64748B 辅助信息、次要曲线
中性 / 文本 Neutral Gray #334155 正文文字、坐标轴

1.3 多类别调色板(Charts)

图表中超过 4 条曲线时使用以下有序调色板:

Palette 1 (8色):
#3B82F6 → #8B5CF6 → #10B981 → #F59E0B → #EF4444 → #06B6D4 → #EC4899 → #6366F1

Palette 2 (渐变色):
蓝色渐变: #DBEAFE → #93C5FD → #3B82F6 → #1D4ED8 → #1E3A8A
紫色渐变: #EDE9FE → #C4B5FD → #8B5CF6 → #6D28D9 → #4C1D95

1.4 禁止使用的颜色

  • ❌ 高饱和荧光色:如 #FF00FF、#00FFFF 等刺眼配色
  • ❌ 彩虹渐变无序使用:多色图必须使用有序调色板,不可随机配色
  • ❌ 纯黑纯白边框:使用 #1E293B 替代纯黑,#F8FAFC 替代纯白
  • ❌ 红绿障碍配色:不可仅用红/绿区分对比,需同时辅以形状或纹理

2. 构图原则

2.1 布局规则

规则 说明 示例
留白充足 图片四周保留 8%~12% 的边距,避免内容触边 图表四周留空,不贴边
信息聚焦 单张图片只表达一个核心信息,不堆砌过多内容 一张架构图只画一个模块
对齐对称 元素沿网格线对齐,同类元素间距一致 框图左右/上下对称排布
层次分明 通过大小、颜色、透明度表达主次关系 主路径粗线深色,旁路细线浅色

2.2 排版规范

┌─────────────────────────────────────┐
│  ← 8% margin                        │  ← 标题区(12~16 pt 字重 600)
│  ┌───────────────────────────────┐  │
│  │                               │  │  ← 内容区(占图面 70%~80%)
│  │        核心示意图 / 图表       │  │
│  │                               │  │
│  └───────────────────────────────┘  │
│  图例 / 标注 / 来源(9~10 pt)        │  ← 说明区
│  ← 8% margin                        │
└─────────────────────────────────────┘

2.3 视觉流向

架构图/流程图的箭头方向应保持一致:

  • 横向图:从左到右(输入 → 处理 → 输出)
  • 纵向图:从上到下(输入 → 处理 → 输出)
  • 禁止:同一图中出现双向混乱的箭头流向,除非明确标注回流路径

3. 视觉元素规范

3.1 字体规范

图片内所有文字统一使用以下字体优先级:

平台 中文首选 英文首选 数字首选
Windows 微软雅黑 (Microsoft YaHei) Segoe UI Segoe UI Semibold
macOS PingFang SC SF Pro Text SF Mono
导出 SVG Source Han Sans CN Inter JetBrains Mono

字号阶梯(按 1.25 比例递增):

标注: 9pt  →  图例: 10pt  →  轴标: 11pt  →  正文: 12pt  →  小标题: 14pt  →  标题: 16/18pt

3.2 线条与边框

元素类型 线宽 颜色 圆角
主路径 / 主边框 2.0 px #1E3A8A 8 px
次要路径 / 分区线 1.25 px #64748B 6 px
辅助线 / 网格线 0.75 px #CBD5E1,虚线 4-2 0 px
连接线 / 箭头 1.5 px #3B82F6 —

3.3 形状与图标

  • 矩形框图:统一圆角 8px,不使用尖锐直角
  • 圆形节点:描边 1.5px,内填充使用主色系的浅色(10%~15% 透明度)
  • 箭头:统一使用实心箭头,箭头大小 ≈ 线宽 × 6
  • 图标风格:统一使用线性风格(stroke),禁止线性与面性(filled)图标混用

3.4 代码块与公式

  • 代码片段插图:使用浅色背景 #F1F5F9,边框 #E2E8F0,代码字体 JetBrains Mono 10pt
  • 数学公式:使用 LaTeX 渲染,统一 Computer Modern 字体;公式编号居右
  • 高亮标注:红框/黄框标注代码行时,边框 2.5px,不填充,层内透明

4. 图片分辨率与尺寸

4.1 分辨率要求

图片类型 推荐分辨率 最低分辨率 DPI
Notebook 内联示意图 1600 × 900 px 1200 × 675 px 150
架构图 / 模块图 1920 × 1080 px 1440 × 810 px 150
实验结果图表(曲线图) 2000 × 1200 px 1600 × 960 px 200
对比表格截图 宽度 ≥ 1200 px 宽度 ≥ 900 px 150
Banner / 封面图 2400 × 1350 px 1920 × 1080 px 150

4.2 宽高比约定

用途 宽高比 说明
横向架构图 / 流程图 16 : 9 通用默认比例
纵向流程图 / 对比图 3 : 4 多步骤纵向展开
方形对比图 / 缩略图 1 : 1 网格排列的示例图
曲线图(单图) 5 : 3 Matplotlib 默认优化比例

4.3 文件体积

  • 单张图片文件大小 ≤ 500 KB(Notebook 内联场景)
  • 超过 1MB 的图片必须进行压缩(可使用 Squoosh / TinyPNG 等工具)

5. 文件格式

格式 扩展名 适用场景 说明
可缩放矢量图形 .svg ✅ 架构图 / 流程图 / 示意图 首选格式,放大不失真,体积小
便携式网络图形 .png ✅ 截图 / 图表 / 带透明背景 无损压缩,推荐用于曲线图、结果图
WebP 格式 .webp ✅ 照片 / 示例图片 / 高压缩场景 同等质量下比 PNG 小 30%~50%
PDF 矢量 .pdf 📌 论文插图 / 高质量打印 高清导出使用
JPEG .jpg ⚠️ 仅实景照片 禁止用于截图、文字、图表(产生伪影)
GIF .gif ⚠️ 简短动画(<5秒) 颜色限制 256 色,仅用于简单流程演示
BMP / TIFF — ❌ 不允许 体积过大,禁止使用

格式选择决策树

是否包含文字 / 线条 / 几何图形?
    ├── 是  →  使用 SVG(首选) 或  PNG
    └── 否(实景照片 / 真实图像)
            ├── 是否需要透明背景?
            │     ├── 是  →  PNG
            │     └── 否  →  WebP(首选)或 JPG

6. 适用场景与图片类型映射

场景章节 推荐图片类型 推荐格式 分辨率 示例内容
Part 1 基础 · Transformer 结构 模块架构图 SVG 1920×1080 Self-Attention QKV 数据流
Part 1 基础 · 位置编码 3D 曲面图 / 热力图 PNG 2000×1200 Sinusoidal PE 可视化
Part 2 训练 · Loss 曲线 折线图 + 置信区间 SVG / PNG 2000×1200 训练 / 验证 Loss 对比
Part 2 训练 · Scaling Laws 双对数坐标图 PNG 2000×1200 Loss vs 参数规模曲线
Part 3 推理 · 量化对比 分组柱状图 SVG / PNG 2000×1200 FP16 / INT8 / INT4 精度对比
Part 4 前沿 · VLM 多模态数据流图 SVG 1920×1080 图片→Patch→Token→LLM 流程
Part 4 前沿 · 注意力热力图 热力图 + 颜色条 PNG 1600×900 Attention Weight 可视化
Part 5 生产 · 部署架构 系统部署拓扑图 SVG 1920×1080 Client → Gateway → Model Worker
附录 · GPU 硬件 硬件结构示意图 SVG + PNG 1600×900 SM / 显存 / 带宽结构图

7. 品牌调性一致性

7.1 核心调性关键词

专业 · 清晰 · 克制 · 技术美感

原则 具体要求
专业感 不使用卡通风格、手绘风格、表情包式插图;使用简洁几何图形表达技术概念
清晰度 所有文字 9pt 以上(150 DPI 下),线条不小于 0.75px;导出后缩放到 50% 仍可读
克制原则 每张图最多使用 3 种主色 + 2 种辅色;不添加无意义的装饰元素(渐变阴影、立体浮雕等)
技术美感 黄金分割 / 网格对齐 / 对称布局;元素间距统一,体现秩序感

7.2 水印与署名

  • 项目内部图片 不添加水印
  • 引用外部图片必须在右下角注明来源(8pt,#64748B,格式:© Source / CC BY-SA)
  • 原创架构图如需对外发布,可在右下角添加项目标识(不超过图面 5%)

7.3 一致性检查清单 ✅

提交新图片前,请确认:

  • 色彩使用了规范中的主 / 辅 / 功能色,未出现荧光色 / 纯黑
  • 文字字体、字号符合规范,最小字号 ≥ 9pt
  • 线条宽度 ≥ 0.75px,主路径 ≥ 2.0px
  • 四周留白 ≥ 8%,内容未触边
  • 分辨率达到最低要求(示意图 ≥ 1200×675)
  • 文件格式正确(架构图用 SVG,曲线图用 PNG/ SVG)
  • 文件体积 ≤ 500KB(已压缩)
  • 箭头方向一致,元素对齐,布局平衡
  • 引用图片已标注来源,无版权风险
  • 同类图片(如多张 Loss 曲线图)配色方案统一

8. 示例图片参考

以下是符合本规范的优秀示例,供创作时参考:

编号 类型 参考链接 符合点说明
01 Transformer 架构图 The Illustrated Transformer 模块化布局、蓝紫色调、清晰箭头流向
02 Self-Attention 热力图 Attention is All You Need 可视化 有序颜色渐变、标注清晰
03 VLM 多模态架构 LLaVA 论文 Figure 1 左右分栏、模块分明、配色克制
04 Loss 训练曲线 Karpathy nanoGPT 示例图 5:3 比例、双轴标注、浅网格线
05 GPU 架构图 NVIDIA A100 Whitepaper 第 8 页 专业硬件示意图风格、分区清晰
06 矩阵运算流程图 Visualizing Matrix Multiplication 色块表示矩阵、配色专业、对齐严谨

注意:以上外部图片版权归原作者所有,仅用于风格参考。请勿直接复制使用,应自行重新绘制。


9. 如何获取与创建符合规范的图片资源

9.1 绘图工具推荐

工具 适用场景 格式输出 成本 推荐度
draw.io / diagrams.net 架构图 / 流程图 / 数据流图 SVG / PNG / PDF 免费 ⭐⭐⭐⭐⭐
Excalidraw 手绘风格技术示意图(需调至线性风格) SVG / PNG 免费 ⭐⭐⭐⭐
Figma 精细排版的架构图 / Banner SVG / PNG 免费版可用 ⭐⭐⭐⭐⭐
Matplotlib / Seaborn 曲线图 / 柱状图 / 热力图(代码生成) SVG / PNG 免费 ⭐⭐⭐⭐⭐
Plotly 交互式图表导出静态图 SVG / PNG 免费 ⭐⭐⭐⭐
Graphviz / Mermaid 代码生成流程图 / 依赖图 SVG / PNG 免费 ⭐⭐⭐⭐
Inkscape 专业 SVG 矢量编辑 SVG / PNG 免费 ⭐⭐⭐⭐
Squoosh.app 图片压缩 / WebP 转换 任意 免费 ⭐⭐⭐⭐⭐

9.2 Matplotlib 统一绘图模板(符合色彩规范)

将以下代码加入 Notebook 顶部,即可全局使用规范配色:

import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import font_manager

# =============== 项目统一绘图风格模板 ===============

# 1. 字体设置(优先顺序:微软雅黑 → 思源黑体 → 默认)
font_candidates = ['Microsoft YaHei', 'Source Han Sans CN', 'PingFang SC', 'Noto Sans CJK SC']
for font in font_candidates:
    try:
        mpl.rcParams['font.sans-serif'] = [font]
        break
    except:
        pass
mpl.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
mpl.rcParams['font.family'] = 'sans-serif'

# 2. 项目配色规范
BRAND_COLORS = {
    'blue':   '#3B82F6',
    'violet': '#8B5CF6',
    'green':  '#10B981',
    'amber':  '#F59E0B',
    'red':    '#EF4444',
    'cyan':   '#06B6D4',
    'pink':   '#EC4899',
    'indigo': '#6366F1',
}

PALETTE_8 = list(BRAND_COLORS.values())  # 8 色有序调色板
GRADIENT_BLUE = ['#DBEAFE', '#93C5FD', '#3B82F6', '#1D4ED8', '#1E3A8A']  # 蓝渐变
GRADIENT_PURPLE = ['#EDE9FE', '#C4B5FD', '#8B5CF6', '#6D28D9', '#4C1D95']  # 紫渐变

# 3. 全局样式
plt.style.use('seaborn-v0_8-whitegrid')
mpl.rcParams.update({
    'figure.dpi': 150,              # 输出分辨率 150 DPI
    'savefig.dpi': 200,             # 导出分辨率 200 DPI
    'savefig.bbox': 'tight',        # 导出时自动紧凑裁剪
    'savefig.pad_inches': 0.15,     # 导出边距
    'axes.linewidth': 1.25,         # 坐标轴线宽
    'axes.edgecolor': '#64748B',    # 坐标轴颜色
    'axes.labelcolor': '#334155',   # 轴标签颜色
    'axes.titleweight': 600,        # 标题字重
    'axes.titlesize': 14,           # 标题字号
    'axes.labelsize': 11,           # 轴标签字号
    'axes.prop_cycle': mpl.cycler(color=PALETTE_8),  # 默认曲线配色
    'xtick.color': '#475569',       # x 轴刻度颜色
    'ytick.color': '#475569',       # y 轴刻度颜色
    'xtick.labelsize': 10,          # x 轴刻度字号
    'ytick.labelsize': 10,          # y 轴刻度字号
    'grid.color': '#CBD5E1',        # 网格颜色
    'grid.linewidth': 0.75,         # 网格线宽
    'grid.linestyle': '--',         # 网格虚线
    'grid.alpha': 0.6,              # 网格透明度
    'legend.fontsize': 10,          # 图例字号
    'legend.framealpha': 0.95,      # 图例透明度
    'legend.edgecolor': '#E2E8F0',  # 图例边框
    'lines.linewidth': 2.0,         # 默认曲线粗细
    'lines.markersize': 6,          # 默认标记大小
    'patch.linewidth': 1.25,        # 柱形 / 形状边框
})

# 4. 推荐输出尺寸(5:3 比例)
FIG_SIZES = {
    'small':  (8, 4.8),    # 单图小尺寸
    'medium': (10, 6),     # 默认尺寸(推荐)
    'large':  (13, 7.8),   # 多子图 / 大图
    'wide':   (16, 9),     # 16:9 架构流程对比
}

# 5. 保存辅助函数
def save_figure(fig, name, path='./figures/', formats=('svg', 'png')):
    """
    按规范保存图片:同时导出 SVG 和 PNG 两种格式
    使用示例: save_figure(plt.gcf(), 'loss_curve')
    """
    import os
    os.makedirs(path, exist_ok=True)
    for fmt in formats:
        fig.savefig(f"{path}/{name}.{fmt}", dpi=200 if fmt == 'png' else 150)
    print(f"已保存: {path}/{name}.svg + .png")

print("✅ LLM Notebook 绘图风格模板已加载")

9.3 draw.io 规范模板

创建新图时使用以下初始设置:

画布尺寸:  1920 × 1080 px(默认 16:9)
网格:      启用,网格间距 10 px,对齐网格
背景色:    #FFFFFF (纯白,不使用灰色/渐变背景)
导出:      SVG(首选) + PNG(备份),缩放 200%

常用形状样式预设:

形状 填充色 边框 圆角 文字样式
输入/输出模块 #EEF2FF(浅蓝) #3B82F6 / 2px 8px 12pt / #1E3A8A / 600
处理模块 #F5F3FF(浅紫) #8B5CF6 / 2px 8px 12pt / #4C1D95 / 600
模型模块 #ECFDF5(浅绿) #10B981 / 2px 8px 12pt / #065F46 / 600
损失/损失函数 #FEF2F2(浅红) #EF4444 / 2px 8px 12pt / #991B1B / 600
数据存储 #FFFBEB(浅黄) #F59E0B / 2px 8px 12pt / #92400E / 600

9.4 免费高质量图片资源站(VLM / 视觉章节使用)

用于 VLM、CV 相关章节的示例照片素材(注意遵守各站授权协议):

站点 URL 授权 说明
Unsplash https://unsplash.com 免费商用,无需署名 高质量实景照片
Pexels https://www.pexels.com 免费商用,无需署名 照片 + 视频素材
Pixabay https://pixabay.com 免费商用,无需署名 照片 + 插画 + 矢量
Wikimedia Commons https://commons.wikimedia.org CC BY-SA 为主 需标注来源,适合学术场景
Hugging Face Datasets https://huggingface.co/datasets 各数据集自带许可 VLM 示例图推荐从 COCO / Flickr30k 截取

9.5 图片压缩工作流

提交前对图片进行压缩,推荐以下流程:

# 方案 A:使用 Squoosh CLI(Node.js)
npm install -g @squoosh/cli
squoosh-cli --webp '{quality: 80}' figure.png        # PNG → WebP 80%
squoosh-cli --oxipng '{level: 6}' figure.png         # PNG 无损压缩

# 方案 B:使用 Pillow(Python,Notebook 内直接执行)
from PIL import Image

def compress_png(input_path, output_path, quality=85):
    img = Image.open(input_path)
    img.save(output_path, optimize=True, quality=quality)

# 方案 C:SVG 优化(使用 svgo)
npm install -g svgo
svgo input.svg -o output.svg --precision=2

🤝 贡献指南

欢迎提交 Issue 和 Pull Request 来完善本项目:

  1. 新增内容:请遵循现有 Notebook 结构(原理讲解 → 代码实现 → 作业练习)
  2. 插入图片:必须严格遵循本 README 第 7 节的 图片风格规范
  3. 代码风格:Python 代码遵循 PEP 8,中文注释完整清晰
  4. 作业设计:每个作业提供小提示和 assert 验证代码,确保可自测

📜 许可证

本项目代码采用 MIT License,文档与原创图片采用 CC BY-SA 4.0。

引用第三方内容时请遵守其原始许可协议,并在文档中注明来源。


📞 联系与反馈

如有问题或建议,欢迎通过项目 Issue 区反馈。


最后更新:2026-08-20 · LLM Notebook Team

About

一套以 Jupyter Notebook 为主线的现代大语言模型课程。它不是把模型当成 黑盒调用,而是用 PyTorch 亲手实现核心组件:Tokenizer、Embedding、Attention、Transformer Block、 训练循环、MoE、LoRA、RLHF、解码、KV Cache、长上下文、VLM、评测、蒸馏和 On-Policy Distillation。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages