[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-duoan--TorchCode":3,"tool-duoan--TorchCode":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":80,"owner_email":81,"owner_twitter":81,"owner_website":82,"owner_url":83,"languages":84,"stars":116,"forks":117,"last_commit_at":118,"license":81,"difficulty_score":23,"env_os":119,"env_gpu":120,"env_ram":121,"env_deps":122,"category_tags":130,"github_topics":131,"view_count":23,"oss_zip_url":81,"oss_zip_packed_at":81,"status":16,"created_at":135,"updated_at":136,"faqs":137,"releases":153},2284,"duoan\u002FTorchCode","TorchCode","🔥 LeetCode for PyTorch — practice implementing softmax, attention, GPT-2 and more from scratch with instant auto-grading. Jupyter-based, self-hosted or try online.","TorchCode 是一款专为 PyTorch 开发者打造的实战练习平台，被誉为“张量版的 LeetCode\"。它旨在解决机器学习面试中常见的痛点：许多工程师熟悉理论却无法从零手写核心算法。通过提供 40 道精选题目，TorchCode 引导用户在不依赖现成库的情况下，亲手实现 Softmax、LayerNorm、多头注意力机制乃至 GPT-2 等关键组件。\n\n该平台特别适合准备大厂技术面试的 ML 工程师、希望夯实底层基础的研究人员，以及任何想深入理解深度学习架构的开发者。其独特亮点在于内置了自动化评测系统，不仅能即时验证代码正确性，还能进行梯度检查和性能计时，并提供彩色反馈、智能提示及参考解答。基于 Jupyter 环境，TorchCode 支持一键重置练习和直接在 Google Colab 中运行，无需配置本地 GPU 或复杂环境。无论是通过 Hugging Face 在线体验，还是本地 Docker 部署，它都能为用户提供高效、结构化的技能提升路径，帮助用户真正掌握从内存中推导并编写核心算子的能力。","---\ntitle: TorchCode\nemoji: 🔥\ncolorFrom: red\ncolorTo: yellow\nsdk: docker\napp_port: 7860\npinned: false\n---\n\n\u003Cdiv align=\"center\">\n\n# 🔥 TorchCode\n\n**Crack the PyTorch interview.**\n\nPractice implementing operators and architectures from scratch — the exact skills top ML teams test for.\n\n*Like LeetCode, but for tensors. Self-hosted. Jupyter-based. Instant feedback.*\n\n[![PyTorch](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch-ee4c2c?style=for-the-badge&logo=pytorch&logoColor=white)](https:\u002F\u002Fpytorch.org)\n[![Jupyter](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJupyter-F37626?style=for-the-badge&logo=jupyter&logoColor=white)](https:\u002F\u002Fjupyter.org)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https:\u002F\u002Fwww.docker.com)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython_3.11-3776AB?style=for-the-badge&logo=python&logoColor=white)](https:\u002F\u002Fpython.org)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow?style=for-the-badge)](LICENSE)\n\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fduoan\u002FTorchCode?style=social)](https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode)\n[![GitHub Container Registry](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fghcr.io-TorchCode-blue?style=flat-square&logo=github)](https:\u002F\u002Fghcr.io\u002Fduoan\u002Ftorchcode)\n[![Hugging Face Spaces](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%A4%97%20Spaces-TorchCode-blue?style=flat-square)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fduoan\u002FTorchCode)\n![Problems](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fproblems-40-orange?style=flat-square)\n![GPU](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGPU-not%20required-brightgreen?style=flat-square)\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_a79853afa66b.png)](https:\u002F\u002Fstar-history.com\u002F#duoan\u002FTorchCode&Date)\n\n\u003C\u002Fdiv>\n\n---\n\n## 🎯 Why TorchCode?\n\nTop companies (Meta, Google DeepMind, OpenAI, etc.) expect ML engineers to implement core operations **from memory on a whiteboard**. Reading papers isn't enough — you need to write `softmax`, `LayerNorm`, `MultiHeadAttention`, and full Transformer blocks code.\n\nTorchCode gives you a **structured practice environment** with:\n\n| | Feature | |\n|---|---|---|\n| 🧩 | **40 curated problems** | The most frequently asked PyTorch interview topics |\n| ⚖️ | **Automated judge** | Correctness checks, gradient verification, and timing |\n| 🎨 | **Instant feedback** | Colored pass\u002Ffail per test case, just like competitive programming |\n| 💡 | **Hints when stuck** | Nudges without full spoilers |\n| 📖 | **Reference solutions** | Study optimal implementations after your attempt |\n| 📊 | **Progress tracking** | What you've solved, best times, and attempt counts |\n| 🔄 | **One-click reset** | Toolbar button to reset any notebook back to its blank template — practice the same problem as many times as you want |\n| [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](#) | **Open in Colab** | Every notebook has an \"Open in Colab\" badge + toolbar button — run problems in Google Colab with zero setup |\n\nNo cloud. No signup. No GPU needed. Just `make run` — or try it instantly on Hugging Face.\n\n---\n\n## 🚀 Quick Start\n\n### Option 0 — Try it online (zero install)\n\n**[Launch on Hugging Face Spaces](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fduoan\u002FTorchCode)** — opens a full JupyterLab environment in your browser. Nothing to install.\n\nOr open any problem directly in Google Colab — every notebook has an [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb) badge.\n\n### Option 0b — Use the judge in Colab (pip)\n\nIn Google Colab, install the judge from PyPI so you can run `check(...)` without cloning the repo:\n\n```bash\n!pip install torch-judge\n```\n\nThen in a notebook cell:\n\n```python\nfrom torch_judge import check, status, hint, reset_progress\nstatus()           # list all problems and your progress\ncheck(\"relu\")      # run tests for the \"relu\" task\nhint(\"relu\")       # show a hint\n```\n\n### Option 1 — Pull the pre-built image (fastest)\n\n```bash\ndocker run -p 8888:8888 -e PORT=8888 ghcr.io\u002Fduoan\u002Ftorchcode:latest\n```\n\nIf the registry image is unavailable for your platform, use Option 2 instead. This is the common path on Apple Silicon \u002F `arm64`.\n\n### Option 2 — Build locally\n\n```bash\nmake run\n```\n\n`make run` will try the prebuilt image first and automatically fall back to a local build when needed.\n\nOpen **\u003Chttp:\u002F\u002Flocalhost:8888>** — that's it. Works with both Docker and Podman (auto-detected).\n\n---\n\n## 📋 Problem Set\n\n> **Frequency**: 🔥 = very likely in interviews, ⭐ = commonly asked, 💡 = emerging \u002F differentiator\n\n### 🧱 Fundamentals — \"Implement X from scratch\"\n\nThe bread and butter of ML coding interviews. You'll be asked to write these without `torch.nn`.\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 1 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb\" target=\"_blank\">ReLU\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `relu(x)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 🔥 | Activation functions, element-wise ops |\n| 2 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F02_softmax.ipynb\" target=\"_blank\">Softmax\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F02_softmax.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `my_softmax(x, dim)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 🔥 | Numerical stability, exp\u002Flog tricks |\n| 16 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F16_cross_entropy.ipynb\" target=\"_blank\">Cross-Entropy Loss\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F16_cross_entropy.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `cross_entropy_loss(logits, targets)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 🔥 | Log-softmax, logsumexp trick |\n| 17 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F17_dropout.ipynb\" target=\"_blank\">Dropout\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F17_dropout.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MyDropout` (nn.Module) | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 🔥 | Train\u002Feval mode, inverted scaling |\n| 18 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F18_embedding.ipynb\" target=\"_blank\">Embedding\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F18_embedding.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MyEmbedding` (nn.Module) | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 🔥 | Lookup table, `weight[indices]` |\n| 19 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F19_gelu.ipynb\" target=\"_blank\">GELU\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F19_gelu.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `my_gelu(x)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | ⭐ | Gaussian error linear unit, `torch.erf` |\n| 20 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F20_weight_init.ipynb\" target=\"_blank\">Kaiming Init\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F20_weight_init.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `kaiming_init(weight)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | ⭐ | `std = sqrt(2\u002Ffan_in)`, variance scaling |\n| 21 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F21_gradient_clipping.ipynb\" target=\"_blank\">Gradient Clipping\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F21_gradient_clipping.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `clip_grad_norm(params, max_norm)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | ⭐ | Norm-based clipping, direction preservation |\n| 31 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F31_gradient_accumulation.ipynb\" target=\"_blank\">Gradient Accumulation\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F31_gradient_accumulation.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `accumulated_step(model, opt, ...)` | ![Easy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FEasy-4CAF50?style=flat-square) | 💡 | Micro-batching, loss scaling |\n| 40 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F40_linear_regression.ipynb\" target=\"_blank\">Linear Regression\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F40_linear_regression.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `LinearRegression` (3 methods) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | Normal equation, GD from scratch, nn.Linear |\n| 3 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F03_linear.ipynb\" target=\"_blank\">Linear Layer\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F03_linear.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `SimpleLinear` (nn.Module) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | `y = xW^T + b`, Kaiming init, `nn.Parameter` |\n| 4 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F04_layernorm.ipynb\" target=\"_blank\">LayerNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F04_layernorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `my_layer_norm(x, γ, β)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | Normalization, running stats, affine transform |\n| 7 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F07_batchnorm.ipynb\" target=\"_blank\">BatchNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F07_batchnorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `my_batch_norm(x, γ, β)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Batch vs layer statistics, train\u002Feval behavior |\n| 8 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F08_rmsnorm.ipynb\" target=\"_blank\">RMSNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F08_rmsnorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `rms_norm(x, weight)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | LLaMA-style norm, simpler than LayerNorm |\n| 15 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F15_mlp.ipynb\" target=\"_blank\">SwiGLU MLP\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F15_mlp.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `SwiGLUMLP` (nn.Module) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Gated FFN, `SiLU(gate) * up`, LLaMA\u002FMistral-style |\n| 22 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F22_conv2d.ipynb\" target=\"_blank\">Conv2d\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F22_conv2d.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `my_conv2d(x, weight, ...)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | Convolution, unfold, stride\u002Fpadding |\n\n### 🧠 Attention Mechanisms — The heart of modern ML interviews\n\nIf you're interviewing for any role touching LLMs or Transformers, expect at least one of these.\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 23 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F23_cross_attention.ipynb\" target=\"_blank\">Cross-Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F23_cross_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MultiHeadCrossAttention` (nn.Module) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Encoder-decoder, Q from decoder, K\u002FV from encoder |\n| 5 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F05_attention.ipynb\" target=\"_blank\">Scaled Dot-Product Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F05_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `scaled_dot_product_attention(Q, K, V)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | `softmax(QK^T\u002F√d_k)V`, the foundation of everything |\n| 6 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F06_multihead_attention.ipynb\" target=\"_blank\">Multi-Head Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F06_multihead_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MultiHeadAttention` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | Parallel heads, split\u002Fconcat, projection matrices |\n| 9 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F09_causal_attention.ipynb\" target=\"_blank\">Causal Self-Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F09_causal_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `causal_attention(Q, K, V)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | Autoregressive masking with `-inf`, GPT-style |\n| 10 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F10_gqa.ipynb\" target=\"_blank\">Grouped Query Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F10_gqa.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `GroupQueryAttention` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | GQA (LLaMA 2), KV sharing across heads |\n| 11 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F11_sliding_window.ipynb\" target=\"_blank\">Sliding Window Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F11_sliding_window.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `sliding_window_attention(Q, K, V, w)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | Mistral-style local attention, O(n·w) complexity |\n| 12 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F12_linear_attention.ipynb\" target=\"_blank\">Linear Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F12_linear_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `linear_attention(Q, K, V)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Kernel trick, `φ(Q)(φ(K)^TV)`, O(n·d²) |\n| 14 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F14_kv_cache.ipynb\" target=\"_blank\">KV Cache Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F14_kv_cache.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `KVCacheAttention` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | Incremental decoding, cache K\u002FV, prefill vs decode |\n| 24 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F24_rope.ipynb\" target=\"_blank\">RoPE\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F24_rope.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `apply_rope(q, k)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | Rotary position embedding, relative position via rotation |\n| 25 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F25_flash_attention.ipynb\" target=\"_blank\">Flash Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F25_flash_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `flash_attention(Q, K, V, block_size)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Tiled attention, online softmax, memory-efficient |\n\n### 🏗️ Architecture & Adaptation — Put it all together\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 26 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F26_lora.ipynb\" target=\"_blank\">LoRA\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F26_lora.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `LoRALinear` (nn.Module) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Low-rank adaptation, frozen base + `BA` update |\n| 27 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F27_vit_patch.ipynb\" target=\"_blank\">ViT Patch Embedding\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F27_vit_patch.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `PatchEmbedding` (nn.Module) | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 💡 | Image → patches → linear projection |\n| 13 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F13_gpt2_block.ipynb\" target=\"_blank\">GPT-2 Block\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F13_gpt2_block.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `GPT2Block` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | Pre-norm, causal MHA + MLP (4x, GELU), residual connections |\n| 28 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F28_moe.ipynb\" target=\"_blank\">Mixture of Experts\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F28_moe.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MixtureOfExperts` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | Mixtral-style, top-k routing, expert MLPs |\n\n### ⚙️ Training & Optimization\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 29 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F29_adam.ipynb\" target=\"_blank\">Adam Optimizer\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F29_adam.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `MyAdam` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Momentum + RMSProp, bias correction |\n| 30 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F30_cosine_lr.ipynb\" target=\"_blank\">Cosine LR Scheduler\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F30_cosine_lr.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `cosine_lr_schedule(step, ...)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | Linear warmup + cosine annealing |\n\n### 🎯 Inference & Decoding\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 32 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F32_topk_sampling.ipynb\" target=\"_blank\">Top-k \u002F Top-p Sampling\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F32_topk_sampling.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `sample_top_k_top_p(logits, ...)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | Nucleus sampling, temperature scaling |\n| 33 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F33_beam_search.ipynb\" target=\"_blank\">Beam Search\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F33_beam_search.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `beam_search(log_prob_fn, ...)` | ![Medium](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | 🔥 | Hypothesis expansion, pruning, eos handling |\n| 34 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F34_speculative_decoding.ipynb\" target=\"_blank\">Speculative Decoding\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F34_speculative_decoding.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `speculative_decode(target, draft, ...)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Accept\u002Freject, draft model acceleration |\n\n### 🔬 Advanced — Differentiators\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 35 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F35_bpe.ipynb\" target=\"_blank\">BPE Tokenizer\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F35_bpe.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `SimpleBPE` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Byte-pair encoding, merge rules, subword splits |\n| 36 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F36_int8_quantization.ipynb\" target=\"_blank\">INT8 Quantization\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F36_int8_quantization.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `Int8Linear` (nn.Module) | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Per-channel quantize, scale\u002Fzero-point, buffer vs param |\n| 37 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F37_dpo_loss.ipynb\" target=\"_blank\">DPO Loss\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F37_dpo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `dpo_loss(chosen, rejected, ...)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Direct preference optimization, alignment training |\n| 38 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F38_grpo_loss.ipynb\" target=\"_blank\">GRPO Loss\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F38_grpo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `grpo_loss(logps, rewards, group_ids, eps)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | Group relative policy optimization, RLAIF, within-group normalized advantages |\n| 39 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F39_ppo_loss.ipynb\" target=\"_blank\">PPO Loss\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F39_ppo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Open In Colab\" height=\"20\">\u003C\u002Fa> | `ppo_loss(new_logps, old_logps, advantages, clip_ratio)` | ![Hard](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | PPO clipped surrogate loss, policy gradient, trust region |\n\n---\n\n## ⚙️ How It Works\n\nEach problem has **two** notebooks:\n\n| File | Purpose |\n|------|---------|\n| `01_relu.ipynb` | ✏️ Blank template — write your code here |\n| `01_relu_solution.ipynb` | 📖 Reference solution — check when stuck |\n\n### Workflow\n\n```text\n1. Open a blank notebook           →  Read the problem description\n2. Implement your solution         →  Use only basic PyTorch ops\n3. Debug freely                    →  print(x.shape), check gradients, etc.\n4. Run the judge cell              →  check(\"relu\")\n5. See instant colored feedback    →  ✅ pass \u002F ❌ fail per test case\n6. Stuck? Get a nudge              →  hint(\"relu\")\n7. Review the reference solution   →  01_relu_solution.ipynb\n8. Click 🔄 Reset in the toolbar  →  Blank slate — practice again!\n```\n\n### In-Notebook API\n\n```python\nfrom torch_judge import check, hint, status\n\ncheck(\"relu\")               # Judge your implementation\nhint(\"causal_attention\")    # Get a hint without full spoiler\nstatus()                    # Progress dashboard — solved \u002F attempted \u002F todo\n```\n\n---\n\n## 📅 Suggested Study Plan\n\n> **Total: ~12–16 hours spread across 3–4 weeks. Perfect for interview prep on a deadline.**\n\n| Week | Focus | Problems | Time |\n|:----:|-------|----------|:----:|\n| **1** | 🧱 Foundations | ReLU → Softmax → CE Loss → Dropout → Embedding → GELU → Linear → LayerNorm → BatchNorm → RMSNorm → SwiGLU MLP → Conv2d | 2–3 hrs |\n| **2** | 🧠 Attention Deep Dive | SDPA → MHA → Cross-Attn → Causal → GQA → KV Cache → Sliding Window → RoPE → Linear Attn → Flash Attn | 3–4 hrs |\n| **3** | 🏗️ Architecture + Training | GPT-2 Block → LoRA → MoE → ViT Patch → Adam → Cosine LR → Grad Clip → Grad Accumulation → Kaiming Init | 3–4 hrs |\n| **4** | 🎯 Inference + Advanced | Top-k\u002Fp Sampling → Beam Search → Speculative Decoding → BPE → INT8 Quant → DPO Loss → GRPO Loss → PPO Loss + speed run | 3–4 hrs |\n\n---\n\n## 🏛️ Architecture\n\n```text\n┌──────────────────────────────────────────┐\n│           Docker \u002F Podman Container      │\n│                                          │\n│  JupyterLab (:8888)                      │\n│    ├── templates\u002F  (reset on each run)   │\n│    ├── solutions\u002F  (reference impl)      │\n│    ├── torch_judge\u002F (auto-grading)       │\n│    ├── torchcode-labext (JLab plugin)    │\n│    │     🔄 Reset — restore template     │\n│    │     🔗 Colab — open in Colab        │\n│    └── PyTorch (CPU), NumPy              │\n│                                          │\n│  Judge checks:                           │\n│    ✓ Output correctness (allclose)       │\n│    ✓ Gradient flow (autograd)            │\n│    ✓ Shape consistency                   │\n│    ✓ Edge cases & numerical stability    │\n└──────────────────────────────────────────┘\n```\n\nSingle container. Single port. No database. No frontend framework. No GPU.\n\n## 🛠️ Commands\n\n```bash\nmake run    # Build & start (http:\u002F\u002Flocalhost:8888)\nmake stop   # Stop the container\nmake clean  # Stop + remove volumes + reset all progress\n```\n\n## 🧩 Adding Your Own Problems\n\nTorchCode uses auto-discovery — just drop a new file in `torch_judge\u002Ftasks\u002F`:\n\n```python\nTASK = {\n    \"id\": \"my_task\",\n    \"title\": \"My Custom Problem\",\n    \"difficulty\": \"medium\",\n    \"function_name\": \"my_function\",\n    \"hint\": \"Think about broadcasting...\",\n    \"tests\": [ ... ],\n}\n```\n\nNo registration needed. The judge picks it up automatically.\n\n---\n\n## 📦 Publishing `torch-judge` to PyPI (maintainers)\n\nThe judge is published as a separate package so Colab\u002Fusers can `pip install torch-judge` without cloning the repo.\n\n### Automatic (GitHub Action)\n\nPushing to `master` after changing the package version triggers [`.github\u002Fworkflows\u002Fpypi-publish.yml`](.github\u002Fworkflows\u002Fpypi-publish.yml), which builds and uploads to PyPI. No git tag is required.\n\n1. **Bump version** in `torch_judge\u002F_version.py` (e.g. `__version__ = \"0.1.1\"`).\n2. **Configure PyPI Trusted Publisher** (one-time):\n   - PyPI → Your project **torch-judge** → **Publishing** → **Add a new pending publisher**\n   - Owner: `duoan`, Repository: `TorchCode`, Workflow: `pypi-publish.yml`, Environment: (leave empty)\n   - Run the workflow once (push a version bump to `master` or **Actions → Publish torch-judge to PyPI → Run workflow**); PyPI will then link the publisher.\n3. **Release**: commit the version bump and `git push origin master`.\n\nAlternatively, use an API token: add repository secret `PYPI_API_TOKEN` (value = `pypi-...` from PyPI) and set `TWINE_USERNAME=__token__` and `TWINE_PASSWORD` from that secret in the workflow if you prefer not to use Trusted Publishing.\n\n### Manual\n\n```bash\npip install build twine\npython -m build\ntwine upload dist\u002F*\n```\n\nVersion is in `torch_judge\u002F_version.py`; bump it before each release.\n\n---\n\n## ❓ FAQ\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Do I need a GPU?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nNo. Everything runs on CPU. The problems test correctness and understanding, not throughput.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Can I keep my solutions between runs?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nBlank templates reset on every \u003Ccode>make run\u003C\u002Fcode> so you practice from scratch. Save your work under a different filename if you want to keep it. You can also click the \u003Cb>🔄 Reset\u003C\u002Fb> button in the notebook toolbar at any time to restore the blank template without restarting.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Can I use Google Colab instead?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nYes! Every notebook has an \u003Cb>Open in Colab\u003C\u002Fb> badge at the top. Click it to open the problem directly in Google Colab — no Docker or local setup needed. You can also use the \u003Cb>Colab\u003C\u002Fb> toolbar button inside JupyterLab.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>How are solutions graded?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nThe judge runs your function against multiple test cases using \u003Ccode>torch.allclose\u003C\u002Fcode> for numerical correctness, verifies gradients flow properly via autograd, and checks edge cases specific to each operation.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Who is this for?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nAnyone preparing for ML\u002FAI engineering interviews at top tech companies, or anyone who wants to deeply understand how PyTorch operations work under the hood.\n\u003C\u002Fdetails>\n\n---\n\n## 🤝 Contributors\n\nThanks to everyone who has contributed to TorchCode.\n\n\u003C!-- readme: contributors -start -->\n\u003Ctable>\n\t\u003Ctbody>\n\t\t\u003Ctr>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_8448ec195a44.png\" width=\"100;\" alt=\"duoan\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>duoan\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAndo233\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_089fee8e9c7f.png\" width=\"100;\" alt=\"Ando233\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>Ando233\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FThierryHJ\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_0f9d25ff10cd.png\" width=\"100;\" alt=\"ThierryHJ\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>ThierryHJ\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n\t\t\u003C\u002Ftr>\n\t\u003Ctbody>\n\u003C\u002Ftable>\n\u003C!-- readme: contributors -end -->\n\nAuto-generated from the [GitHub contributors graph](https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fgraphs\u002Fcontributors) with avatars and GitHub usernames.\n\n---\n\n\u003Cdiv align=\"center\">\n\n**Built for engineers who want to deeply understand what they build.**\n\nIf this helped your interview prep, consider giving it a ⭐\n\n---\n\n### ☕ Buy Me a Coffee\n\n\u003Ca href=\"https:\u002F\u002Fbuymeacoffee.com\u002Fduoan\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.buymeacoffee.com\u002Fbuttons\u002Fdefault-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\">\u003C\u002Fa>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_bd4fd996ebd7.png\" alt=\"BMC QR Code\" width=\"150\" height=\"150\">\n\n*Scan to support*\n\n\u003C\u002Fdiv>\n","---\ntitle: TorchCode\nemoji: 🔥\ncolorFrom: red\ncolorTo: yellow\nsdk: docker\napp_port: 7860\npinned: false\n---\n\n\u003Cdiv align=\"center\">\n\n# 🔥 TorchCode\n\n**攻克 PyTorch 面试。**\n\n从零开始练习实现算子与网络架构——这正是顶尖机器学习团队最看重的技能。\n\n*就像 LeetCode，但专为张量设计。自托管，基于 Jupyter，即时反馈。*\n\n[![PyTorch](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch-ee4c2c?style=for-the-badge&logo=pytorch&logoColor=white)](https:\u002F\u002Fpytorch.org)\n[![Jupyter](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJupyter-F37626?style=for-the-badge&logo=jupyter&logoColor=white)](https:\u002F\u002Fjupyter.org)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https:\u002F\u002Fwww.docker.com)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython_3.11-3776AB?style=for-the-badge&logo=python&logoColor=white)](https:\u002F\u002Fpython.org)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow?style=for-the-badge)](LICENSE)\n\n[![GitHub 星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fduoan\u002FTorchCode?style=social)](https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode)\n[![GitHub 容器注册表](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fghcr.io-TorchCode-blue?style=flat-square&logo=github)](https:\u002F\u002Fghcr.io\u002Fduoan\u002Ftorchcode)\n[![Hugging Face Spaces](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%A4%97%20Spaces-TorchCode-blue?style=flat-square)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fduoan\u002FTorchCode)\n![题目](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fproblems-40-orange?style=flat-square)\n![GPU](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGPU-not%20required-brightgreen?style=flat-square)\n\n[![星标历史图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_a79853afa66b.png)](https:\u002F\u002Fstar-history.com\u002F#duoan\u002FTorchCode&Date)\n\n\u003C\u002Fdiv>\n\n---\n\n## 🎯 为什么选择 TorchCode？\n\n顶级公司（Meta、Google DeepMind、OpenAI 等）都期望机器学习工程师能够**在白板上凭记忆**实现核心操作。光看论文是不够的——你需要手写 `softmax`、`LayerNorm`、`MultiHeadAttention`，以及完整的 Transformer 块代码。\n\nTorchCode 提供了一个**结构化的练习环境**，具备以下特点：\n\n| | 特性 | |\n|---|---|---|\n| 🧩 | **40 道精选题目** | 最常出现在 PyTorch 面试中的主题 |\n| ⚖️ | **自动评测系统** | 正确性检查、梯度验证和运行时间测量 |\n| 🎨 | **即时反馈** | 按测试用例显示通过或失败的颜色标记，如同竞赛编程一样 |\n| 💡 | **遇到困难时的提示** | 在不剧透完整答案的情况下给予引导 |\n| 📖 | **参考解答** | 在尝试后可学习最优实现方式 |\n| 📊 | **进度追踪** | 已完成的题目、最佳用时及尝试次数 |\n| 🔄 | **一键重置** | 工具栏按钮可将任意笔记本恢复到空白模板——让你反复练习同一道题 |\n| [![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](#) | **在 Colab 中打开** | 每个笔记本都配有“在 Colab 中打开”徽章及工具栏按钮——无需任何配置即可在 Google Colab 中运行题目 |\n\n无需云端服务、无需注册、也不需要 GPU。只需执行 `make run`——或者直接在 Hugging Face 上立即体验。\n\n---\n\n## 🚀 快速入门\n\n### 选项 0 — 在线体验（无需安装）\n\n**[在 Hugging Face Spaces 上启动](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fduoan\u002FTorchCode)**——会在你的浏览器中打开一个完整的 JupyterLab 环境。完全无需安装任何东西。\n\n你也可以直接在 Google Colab 中打开任意一道题目——每个笔记本都带有 [![在 Colab 中打开](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb) 的徽章。\n\n### 选项 0b — 在 Colab 中使用评测系统（通过 pip）\n\n在 Google Colab 中，你可以从 PyPI 安装评测工具，这样就不必克隆仓库也能调用 `check(...)`：\n\n```bash\n!pip install torch-judge\n```\n\n然后在笔记本的一个单元格中：\n\n```python\nfrom torch_judge import check, status, hint, reset_progress\nstatus()           # 列出所有题目及你的进度\ncheck(\"relu\")      # 运行 \"relu\" 任务的测试\nhint(\"relu\")       # 显示提示\n```\n\n### 选项 1 — 拉取预构建镜像（最快）\n\n```bash\ndocker run -p 8888:8888 -e PORT=8888 ghcr.io\u002Fduoan\u002Ftorchcode:latest\n```\n\n如果该镜像对你的平台不可用，请改用选项 2。这是在 Apple Silicon \u002F `arm64` 上的常用方法。\n\n### 选项 2 — 本地构建\n\n```bash\nmake run\n```\n\n`make run` 会优先尝试预构建的镜像，并在必要时自动回退到本地构建。\n\n打开 **\u003Chttp:\u002F\u002Flocalhost:8888>**——就完成了。同时支持 Docker 和 Podman（自动检测）。\n\n---\n\n## 📋 题目集\n\n> **频率**：🔥 = 面试中极有可能出现，⭐ = 常见考点，💡 = 新兴方向 \u002F 区别化能力\n\n### 🧱 基础知识 — “从零实现 X”\n\n这是机器学习编码面试的核心内容。面试中通常会要求你不用 `torch.nn` 来编写这些代码。\n\n| 序号 | 问题 | 你将实现的内容 | 难度 | 频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 1 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb\" target=\"_blank\">ReLU\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F01_relu.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `relu(x)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 🔥 | 激活函数，逐元素操作 |\n| 2 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F02_softmax.ipynb\" target=\"_blank\">Softmax\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F02_softmax.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `my_softmax(x, dim)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 🔥 | 数值稳定性，exp\u002Flog技巧 |\n| 16 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F16_cross_entropy.ipynb\" target=\"_blank\">交叉熵损失\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F16_cross_entropy.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `cross_entropy_loss(logits, targets)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 🔥 | Log-softmax，logsumexp技巧 |\n| 17 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F17_dropout.ipynb\" target=\"_blank\">Dropout\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F17_dropout.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `MyDropout` (nn.Module) | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 🔥 | 训练\u002F评估模式，反向缩放 |\n| 18 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F18_embedding.ipynb\" target=\"_blank\">Embedding\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F18_embedding.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `MyEmbedding` (nn.Module) | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 🔥 | 查找表，`weight[indices]` |\n| 19 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F19_gelu.ipynb\" target=\"_blank\">GELU\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F19_gelu.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `my_gelu(x)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | ⭐ | 高斯误差线性单元，`torch.erf` |\n| 20 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F20_weight_init.ipynb\" target=\"_blank\">Kaiming初始化\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F20_weight_init.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `kaiming_init(weight)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | ⭐ | `std = sqrt(2\u002Ffan_in)`，方差缩放 |\n| 21 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F21_gradient_clipping.ipynb\" target=\"_blank\">梯度裁剪\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F21_gradient_clipping.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `clip_grad_norm(params, max_norm)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | ⭐ | 基于范数的裁剪，保持方向 |\n| 31 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F31_gradient_accumulation.ipynb\" target=\"_blank\">梯度累积\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F31_gradient_accumulation.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `accumulated_step(model, opt, ...)` | ![易](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F易-4CAF50?style=flat-square) | 💡 | 微批次处理，损失缩放 |\n| 40 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F40_linear_regression.ipynb\" target=\"_blank\">线性回归\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F40_linear_regression.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `LinearRegression` (3种方法) | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | 🔥 | 正规方程，从头开始的梯度下降，nn.Linear |\n| 3 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F03_linear.ipynb\" target=\"_blank\">线性层\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F03_linear.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `SimpleLinear` (nn.Module) | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | 🔥 | `y = xW^T + b`，Kaiming初始化，`nn.Parameter` |\n| 4 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F04_layernorm.ipynb\" target=\"_blank\">LayerNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F04_layernorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `my_layer_norm(x, γ, β)` | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | 🔥 | 归一化，运行统计量，仿射变换 |\n| 7 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F07_batchnorm.ipynb\" target=\"_blank\">BatchNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F07_batchnorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `my_batch_norm(x, γ, β)` | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | ⭐ | 批次与层统计量的区别，训练\u002F评估行为 |\n| 8 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F08_rmsnorm.ipynb\" target=\"_blank\">RMSNorm\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F08_rmsnorm.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `rms_norm(x, weight)` | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | ⭐ | LLaMA风格的归一化，比LayerNorm更简单 |\n| 15 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F15_mlp.ipynb\" target=\"_blank\">SwiGLU MLP\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F15_mlp.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `SwiGLUMLP` (nn.Module) | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | ⭐ | 门控前馈网络，`SiLU(gate) * up`，LLaMA\u002FMistral风格 |\n| 22 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F22_conv2d.ipynb\" target=\"_blank\">Conv2d\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F22_conv2d.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab中打开\" height=\"20\">\u003C\u002Fa> | `my_conv2d(x, weight, ...)` | ![中](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中-FF9800?style=flat-square) | 🔥 | 卷积，展开，步幅\u002F填充 |\n\n### 🧠 注意力机制 — 现代机器学习面试的核心\n\n如果你正在应聘与大语言模型或 Transformer 相关的职位，至少会遇到一道关于注意力机制的题目。\n\n| 序号 | 问题 | 你需要实现的内容 | 难度 | 出现频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 23 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F23_cross_attention.ipynb\" target=\"_blank\">交叉注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F23_cross_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `MultiHeadCrossAttention` (nn.Module) | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-FF9800?style=flat-square) | ⭐ | 编码器-解码器架构，解码器提供 Q，编码器提供 K\u002FV |\n| 5 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F05_attention.ipynb\" target=\"_blank\">缩放点积注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F05_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `scaled_dot_product_attention(Q, K, V)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | `softmax(QK^T\u002F√d_k)V`，一切的基础 |\n| 6 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F06_multihead_attention.ipynb\" target=\"_blank\">多头注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F06_multihead_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `MultiHeadAttention` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | 并行的多个注意力头，拆分与拼接，投影矩阵 |\n| 9 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F09_causal_attention.ipynb\" target=\"_blank\">因果自注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F09_causal_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `causal_attention(Q, K, V)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | 使用 `-inf` 进行自回归掩码，GPT 风格 |\n| 10 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F10_gqa.ipynb\" target=\"_blank\">分组查询注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F10_gqa.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `GroupQueryAttention` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | GQA（LLaMA 2），多个头共享 K 和 V |\n| 11 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F11_sliding_window.ipynb\" target=\"_blank\">滑动窗口注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F11_sliding_window.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `sliding_window_attention(Q, K, V, w)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | ⭐ | Mistral 风格的局部注意力，复杂度为 O(n·w) |\n| 12 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F12_linear_attention.ipynb\" target=\"_blank\">线性注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F12_linear_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `linear_attention(Q, K, V)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | 核技巧，`φ(Q)(φ(K)^TV)`，复杂度为 O(n·d²) |\n| 14 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F14_kv_cache.ipynb\" target=\"_blank\">KV 缓存注意力\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F14_kv_cache.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `KVCacheAttention` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | 增量解码，缓存 K\u002FV，预填充与解码的区别 |\n| 24 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F24_rope.ipynb\" target=\"_blank\">RoPE\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F24_rope.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `apply_rope(q, k)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 🔥 | 旋转位置编码，通过旋转实现相对位置信息 |\n| 25 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F25_flash_attention.ipynb\" target=\"_blank\">Flash Attention\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F25_flash_attention.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `flash_attention(Q, K, V, block_size)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHard-F44336?style=flat-square) | 💡 | 分块注意力，在线 softmax，内存高效 |\n\n### 🏗️ 架构与适配 — 将一切整合起来\n\n| 序号 | 问题 | 你将实现的内容 | 难度 | 频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 26 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F26_lora.ipynb\" target=\"_blank\">LoRA\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F26_lora.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `LoRALinear` (nn.Module) | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | ⭐ | 低秩适配，冻结基础模型 + `BA` 更新 |\n| 27 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F27_vit_patch.ipynb\" target=\"_blank\">ViT Patch Embedding\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F27_vit_patch.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `PatchEmbedding` (nn.Module) | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | 💡 | 图像 → 片段 → 线性投影 |\n| 13 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F13_gpt2_block.ipynb\" target=\"_blank\">GPT-2 块\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F13_gpt2_block.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `GPT2Block` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | ⭐ | 预归一化、因果自注意力机制 + MLP（4倍、GELU）、残差连接 |\n| 28 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F28_moe.ipynb\" target=\"_blank\">专家混合模型\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F28_moe.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `MixtureOfExperts` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | ⭐ | Mixtral 风格、top-k 路由、专家 MLP |\n\n### ⚙️ 训练与优化\n\n| 序号 | 问题 | 你将实现的内容 | 难度 | 频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 29 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F29_adam.ipynb\" target=\"_blank\">Adam 优化器\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F29_adam.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `MyAdam` | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | ⭐ | 动量 + RMSProp，偏差校正 |\n| 30 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F30_cosine_lr.ipynb\" target=\"_blank\">余弦学习率调度器\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F30_cosine_lr.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `cosine_lr_schedule(step, ...)` | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | ⭐ | 线性预热 + 余弦退火 |\n\n### 🎯 推理与解码\n\n| 序号 | 问题 | 你将实现的内容 | 难度 | 频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 32 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F32_topk_sampling.ipynb\" target=\"_blank\">Top-k \u002F Top-p 采样\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F32_topk_sampling.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `sample_top_k_top_p(logits, ...)` | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | 🔥 | 核心采样、温度缩放 |\n| 33 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F33_beam_search.ipynb\" target=\"_blank\">束搜索\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F33_beam_search.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `beam_search(log_prob_fn, ...)` | ![中等](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F中等-FF9800?style=flat-square) | 🔥 | 假设扩展、剪枝、EOS 处理 |\n| 34 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F34_speculative_decoding.ipynb\" target=\"_blank\">推测解码\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F34_speculative_decoding.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `speculative_decode(target, draft, ...)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | 接受\u002F拒绝、草稿模型加速 |\n\n### 🔬 进阶 — 区分点\n\n| 序号 | 问题 | 你将实现的内容 | 难度 | 频率 | 关键概念 |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 35 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F35_bpe.ipynb\" target=\"_blank\">BPE 分词器\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F35_bpe.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `SimpleBPE` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | 字节对编码、合并规则、子词分割 |\n| 36 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F36_int8_quantization.ipynb\" target=\"_blank\">INT8 量化\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F36_int8_quantization.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `Int8Linear` (nn.Module) | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | 按通道量化、缩放因子\u002F零点、缓冲区与参数的区别 |\n| 37 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F37_dpo_loss.ipynb\" target=\"_blank\">DPO 损失函数\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F37_dpo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `dpo_loss(chosen, rejected, ...)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | 直接偏好优化、对齐训练 |\n| 38 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F38_grpo_loss.ipynb\" target=\"_blank\">GRPO 损失函数\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F38_grpo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `grpo_loss(logps, rewards, group_ids, eps)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | 分组相对策略优化、RLAIF、组内归一化优势 |\n| 39 | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F39_ppo_loss.ipynb\" target=\"_blank\">PPO 损失函数\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Fduoan\u002FTorchCode\u002Fblob\u002Fmaster\u002Ftemplates\u002F39_ppo_loss.ipynb\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在 Colab 中打开\" height=\"20\">\u003C\u002Fa> | `ppo_loss(new_logps, old_logps, advantages, clip_ratio)` | ![困难](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F困难-F44336?style=flat-square) | 💡 | PPO 截断代理损失、策略梯度、信任区域 |\n\n---\n\n## ⚙️ 工作原理\n\n每个问题包含 **两个** 笔记本：\n\n| 文件 | 用途 |\n|------|---------|\n| `01_relu.ipynb` | ✏️ 空白模板 — 在这里编写你的代码 |\n| `01_relu_solution.ipynb` | 📖 参考解答 — 遇到困难时可查看 |\n\n### 工作流程\n\n```text\n1. 打开空白笔记本           →  阅读题目描述\n2. 实现你的解决方案         →  仅使用基础 PyTorch 操作\n3. 自由调试                    →  打印(x.shape)，检查梯度等\n4. 运行评判单元              →  check(\"relu\")\n5. 查看即时彩色反馈            →  ✅ 通过 \u002F ❌ 失败，按测试用例显示\n6. 卡住了？获取提示          →  hint(\"relu\")\n7. 查看参考解答              →  01_relu_solution.ipynb\n8. 点击工具栏中的 🔄 重置  →  清空所有内容 — 再次练习！\n```\n\n### 笔记本内 API\n\n```python\nfrom torch_judge import check, hint, status\n\ncheck(\"relu\")               # 评判你的实现\nhint(\"causal_attention\")    # 获取提示，不完全剧透\nstatus()                    # 进度仪表板 — 已解决 \u002F 已尝试 \u002F 待完成\n```\n\n---\n\n## 📅 建议学习计划\n\n> **总计：约 12–16 小时，分散在 3–4 周内。非常适合临近面试的备考。**\n\n| 周 | 重点 | 问题 | 时间 |\n|:----:|-------|----------|:----:|\n| **1** | 🧱 基础知识 | ReLU → Softmax → 交叉熵损失 → Dropout → Embedding → GELU → Linear → LayerNorm → BatchNorm → RMSNorm → SwiGLU MLP → Conv2d | 2–3 小时 |\n| **2** | 🧠 注意力机制深入 | SDPA → MHA → Cross-Attn → Causal → GQA → KV Cache → 滑动窗口 → RoPE → Linear Attn → Flash Attn | 3–4 小时 |\n| **3** | 🏗️ 架构 + 训练 | GPT-2 块 → LoRA → MoE → ViT Patch → Adam → Cosine LR → 梯度裁剪 → 梯度累积 → Kaiming 初始化 | 3–4 小时 |\n| **4** | 🎯 推理 + 进阶 | Top-k\u002Fp 采样 → 束搜索 → 推测解码 → BPE → INT8 量化 → DPO 损失 → GRPO 损失 → PPO 损失 + 快速通关 | 3–4 小时 |\n\n---\n\n## 🏛️ 架构\n\n```text\n┌──────────────────────────────────────────┐\n│           Docker \u002F Podman 容器      │\n│                                          │\n│  JupyterLab (:8888)                      │\n│    ├── templates\u002F  (每次运行后重置)   │\n│    ├── solutions\u002F  (参考实现)      │\n│    ├── torch_judge\u002F (自动评分)       │\n│    ├── torchcode-labext (JLab 插件)    │\n│    │     🔄 重置 — 恢复模板     │\n│    │     🔗 Colab — 在 Colab 中打开        │\n│    └── PyTorch (CPU), NumPy              │\n│                                          │\n│  评判标准：                           │\n│    ✓ 输出正确性 (allclose)       │\n│    ✓ 梯度流动 (autograd)            │\n│    ✓ 形状一致性                   │\n│    ✓ 边界情况及数值稳定性    │\n└──────────────────────────────────────────┘\n```\n\n单容器。单端口。无数据库。无前端框架。无 GPU。\n\n## 🛠️ 命令\n\n```bash\nmake run    # 构建并启动 (http:\u002F\u002Flocalhost:8888)\nmake stop   # 停止容器\nmake clean  # 停止 + 移除卷 + 重置所有进度\n```\n\n## 🧩 添加你自己的问题\n\nTorchCode 使用自动发现功能 — 只需将新文件放入 `torch_judge\u002Ftasks\u002F`：\n\n```python\nTASK = {\n    \"id\": \"my_task\",\n    \"title\": \"我的自定义问题\",\n    \"difficulty\": \"medium\",\n    \"function_name\": \"my_function\",\n    \"hint\": \"想想广播...\",\n    \"tests\": [ ... ],\n}\n```\n\n无需注册。评判系统会自动识别。\n\n---\n\n## 📦 将 `torch-judge` 发布到 PyPI（维护者）\n\n评判系统被单独打包发布，以便 Colab 用户可以 `pip install torch-judge`，而无需克隆整个仓库。\n\n### 自动化（GitHub Action）\n\n在更改包版本后推送到 `master` 分支会触发 [.github\u002Fworkflows\u002Fpypi-publish.yml](.github\u002Fworkflows\u002Fpypi-publish.yml)，该工作流会构建并上传到 PyPI。无需创建 Git 标签。\n\n1. 在 `torch_judge\u002F_version.py` 中**增加版本号**（例如：`__version__ = \"0.1.1\"`）。\n2. **配置 PyPI 可信发布者**（仅需一次）：\n   - 进入 PyPI → 您的项目 `torch-judge` → **发布** → **添加新的待定发布者**\n   - 所有者：`duoan`，仓库：`TorchCode`，工作流：`pypi-publish.yml`，环境：留空\n   - 运行一次该工作流（将版本号更新推送到 `master` 分支，或通过 **Actions → Publish torch-judge to PyPI → 运行工作流**）；PyPI 会随后关联该发布者。\n3. **发布**：提交版本号更新，并执行 `git push origin master`。\n\n或者，您也可以使用 API 令牌：添加仓库密钥 `PYPI_API_TOKEN`（值为从 PyPI 获取的 `pypi-...`），并在工作流中设置 `TWINE_USERNAME=__token__` 和 `TWINE_PASSWORD` 为该密钥中的值，以替代使用可信发布者的方式。\n\n### 手动\n\n```bash\npip install build twine\npython -m build\ntwine upload dist\u002F*\n```\n\n版本号位于 `torch_judge\u002F_version.py` 中；每次发布前请先更新版本号。\n\n---\n\n## ❓ 常见问题解答\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>我需要 GPU 吗？\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n不需要。所有操作都在 CPU 上运行。这些题目测试的是正确性和理解力，而非计算吞吐量。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>我可以在不同运行之间保留我的解答吗？\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n每次执行 `make run` 时，空白模板都会重置，以便您从头开始练习。如果您想保留自己的工作，请将其保存为不同的文件名。此外，您也可以随时点击笔记本工具栏中的 \u003Cb>🔄 重置\u003C\u002Fb> 按钮，在不重启的情况下恢复空白模板。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>我可以使用 Google Colab 吗？\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n可以！每个笔记本顶部都有一个 \u003Cb>在 Colab 中打开\u003C\u002Fb> 的标签。点击它即可直接在 Google Colab 中打开题目——无需 Docker 或本地环境设置。您也可以在 JupyterLab 内部使用 \u003Cb>Colab\u003C\u002Fb> 工具栏按钮。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>答案是如何评分的？\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n评测系统会使用您的函数对多个测试用例进行验证，通过 `torch.allclose` 确保数值上的正确性，同时利用自动微分机制检查梯度是否正确传播，并针对每种操作的具体边界情况进行检查。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>这个项目适合哪些人？\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n适用于准备顶尖科技公司机器学习\u002F人工智能工程师面试的人士，以及任何希望深入理解 PyTorch 底层运作机制的人。\n\u003C\u002Fdetails>\n\n---\n\n## 🤝 贡献者\n\n感谢所有为 TorchCode 作出贡献的人。\n\n\u003C!-- readme: contributors -start -->\n\u003Ctable>\n\t\u003Ctbody>\n\t\t\u003Ctr>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fduoan\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_8448ec195a44.png\" width=\"100;\" alt=\"duoan\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>duoan\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAndo233\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_089fee8e9c7f.png\" width=\"100;\" alt=\"Ando233\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>Ando233\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n            \u003Ctd align=\"center\">\n                \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FThierryHJ\">\n                    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_0f9d25ff10cd.png\" width=\"100;\" alt=\"ThierryHJ\"\u002F>\n                    \u003Cbr \u002F>\n                    \u003Csub>\u003Cb>ThierryHJ\u003C\u002Fb>\u003C\u002Fsub>\n                \u003C\u002Fa>\n            \u003C\u002Ftd>\n\t\t\u003C\u002Ftr>\n\t\u003Ctbody>\n\u003C\u002Ftable>\n\u003C!-- readme: contributors -end -->\n\n自动生成自 [GitHub 贡献者图](https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fgraphs\u002Fcontributors)，包含头像和 GitHub 用户名。\n\n---\n\n\u003Cdiv align=\"center\">\n\n**专为希望深入理解自己所构建内容的工程师打造。**\n\n如果这帮助了您的面试准备，欢迎给本项目点个 ⭐。\n\n---\n\n### ☕ 请我喝杯咖啡\n\n\u003Ca href=\"https:\u002F\u002Fbuymeacoffee.com\u002Fduoan\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.buymeacoffee.com\u002Fbuttons\u002Fdefault-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\">\u003C\u002Fa>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_readme_bd4fd996ebd7.png\" alt=\"BMC 二维码\" width=\"150\" height=\"150\">\n\n*扫码支持*\n\n\u003C\u002Fdiv>","# TorchCode 快速上手指南\n\nTorchCode 是一个专为 PyTorch 开发者设计的面试刷题平台，被誉为“张量版的 LeetCode\"。它提供了 40+ 个精选问题，帮助你从零实现核心算子（如 Softmax、LayerNorm、Transformer 等），并配备自动判题系统，即时反馈代码的正确性、梯度验证及运行效率。\n\n## 环境准备\n\n本项目基于 Docker 和 JupyterLab 构建，无需配置复杂的本地 Python 环境，也**不需要 GPU**。\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows (需安装 Docker Desktop)\n*   **前置依赖**：\n    *   [Docker](https:\u002F\u002Fwww.docker.com\u002F) 或 [Podman](https:\u002F\u002Fpodman.io\u002F)\n    *   或者：Google Colab 账号（在线免安装方案）\n*   **网络要求**：能够访问 GitHub Container Registry (ghcr.io) 或 Hugging Face。国内用户若拉取镜像缓慢，建议使用“在线体验”方案或配置 Docker 镜像加速。\n\n## 安装步骤\n\n你可以选择以下任意一种方式开始：\n\n### 方案一：在线体验（零安装，推荐国内用户首选）\n\n无需本地部署，直接在浏览器中运行完整环境。\n\n1.  访问 **Hugging Face Spaces** 启动实例：\n    [🔥 点击启动 TorchCode (Hugging Face)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002Fduoan\u002FTorchCode)\n2.  或在 **Google Colab** 中直接打开单个题目笔记本（每个题目页面均有 `Open In Colab` 按钮）。\n\n### 方案二：使用 Docker 运行（本地部署，最快）\n\n如果你已安装 Docker，只需一条命令即可拉取预构建镜像并启动服务：\n\n```bash\ndocker run -p 8888:8888 -e PORT=8888 ghcr.io\u002Fduoan\u002Ftorchcode:latest\n```\n\n> **注意**：如果因网络原因无法拉取 `ghcr.io` 镜像，请尝试方案三进行本地构建，或配置 Docker 代理。\n\n### 方案三：本地源码构建\n\n如果预构建镜像不可用（例如在 Apple Silicon M1\u002FM2\u002FM3 芯片上遇到架构兼容问题），可以使用 `make` 命令自动回退到本地构建：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode.git\ncd TorchCode\nmake run\n```\n\n该命令会自动检测并使用 Docker 或 Podman 构建镜像。\n\n## 基本使用\n\n启动成功后，在浏览器中访问：\n\n```text\nhttp:\u002F\u002Flocalhost:8888\n```\n\n你将进入 JupyterLab 界面，左侧文件栏中包含了所有练习题模板（`templates\u002F` 目录）。\n\n### 核心功能演示\n\n1.  **选择题目**：打开任意 `.ipynb` 文件（例如 `01_relu.ipynb`）。\n2.  **编写代码**：在单元格中根据提示从头实现算子（不使用 `torch.nn` 中的现成模块）。\n3.  **自动判题**：运行包含 `check()` 函数的单元格，系统将立即输出测试结果：\n    *   ✅ **Pass**：通过正确性、梯度检查及性能测试。\n    *   ❌ **Fail**：显示具体失败的测试用例。\n    *   💡 **Hint**：如果卡住，可调用 `hint()` 获取思路提示（不会直接给出答案）。\n\n### 进阶用法：在 Colab 中使用判题器\n\n如果你想在本地笔记本或 Colab 中独立使用判题逻辑，无需克隆整个仓库，可直接安装 Python 包：\n\n```bash\n!pip install torch-judge\n```\n\n在代码单元格中调用：\n\n```python\nfrom torch_judge import check, status, hint, reset_progress\n\n# 查看所有题目及当前进度\nstatus()           \n\n# 运行 \"relu\" 题目的测试\ncheck(\"relu\")      \n\n# 获取 \"relu\" 题目的提示\nhint(\"relu\")       \n```\n\n### 重置练习\n\n想要重新练习同一道题？点击工具栏上的 **\"One-click reset\"** 按钮，即可将笔记本恢复至初始空白模板状态，无限次重复练习。","某大厂机器学习候选人正在备战下周的 PyTorch 核心算法岗面试，急需强化手写底层算子的能力。\n\n### 没有 TorchCode 时\n- **盲目练习无反馈**：只能在本地凭感觉复现 Softmax 或 Attention 机制，代码跑通不代表逻辑正确，无法确认是否处理了数值稳定性等边界情况。\n- **梯度验证繁琐**：手动编写数值微分代码来验证反向传播是否正确，过程枯燥且容易出错，难以快速定位是前向还是后向实现有误。\n- **缺乏实战模拟**：面对白板编程压力，不知道自己的实现效率是否达标，也没有类似 LeetCode 的即时判题系统来模拟真实的面试考核环境。\n- **参考答案难获取**：遇到瓶颈时只能盲目搜索零散博客，缺乏官方认可的标准实现作为对照，难以学习最优的 PyTorch 写法。\n\n### 使用 TorchCode 后\n- **即时自动判题**：每写完一个算子（如 LayerNorm），TorchCode 立即运行多维度测试用例，用红绿颜色直观展示通过情况，精准暴露逻辑漏洞。\n- **内置梯度检查**：工具自动执行梯度验证，无需手动推导，瞬间判断反向传播实现是否精确匹配数学定义，大幅缩短调试时间。\n- **全真面试模拟**：在 Jupyter 环境中面对 40 道精选高频考题，体验与面试一致的“从零实现”压力，并实时记录解题耗时与尝试次数。\n- **提示与范文兼备**：卡壳时可获取不直接给答案的启发式提示，完成后还能一键查看参考解法，深入理解顶级团队推崇的代码规范。\n\nTorchCode 将抽象的算法理论转化为可量化、可迭代的各种实战训练，帮助开发者像刷 LeetCode 一样高效掌握 PyTorch 底层核心技能。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fduoan_TorchCode_8448ec19.jpg","duoan","Victor An","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fduoan_8448ec19.jpg","Gradient boost over myself of yesterday. And to repeat this everyday with an unconquerable spirit.","@amzn","Bellevue WA U.S",null,"https:\u002F\u002Fduoan.github.io\u002F","https:\u002F\u002Fgithub.com\u002Fduoan",[85,89,93,96,100,104,108,112],{"name":86,"color":87,"percentage":88},"Jupyter Notebook","#DA5B0B",68.8,{"name":90,"color":91,"percentage":92},"Python","#3572A5",24.3,{"name":94,"color":95,"percentage":10},"TypeScript","#3178c6",{"name":97,"color":98,"percentage":99},"CSS","#663399",2.4,{"name":101,"color":102,"percentage":103},"Dockerfile","#384d54",0.7,{"name":105,"color":106,"percentage":107},"Makefile","#427819",0.5,{"name":109,"color":110,"percentage":111},"Shell","#89e051",0.4,{"name":113,"color":114,"percentage":115},"JavaScript","#f1e05a",0,3363,274,"2026-04-03T08:14:13","Linux, macOS, Windows","不需要 GPU (GPU not required)","未说明",{"notes":123,"python":124,"dependencies":125},"该工具主要通过 Docker 运行（支持 Docker 和 Podman），也可在 Hugging Face Spaces 或 Google Colab 中直接使用。若在本地运行，推荐使用 'make run' 命令，它会自动尝试拉取预构建镜像或在需要时进行本地构建。Apple Silicon (arm64) 架构若无法使用预构建镜像，将自动回退到本地构建。无需注册云端账号即可使用。","3.11",[126,127,128,129],"PyTorch","Jupyter\u002FJupyterLab","Docker","torch-judge (可选)",[13],[132,133,134],"interview","leetcode","pytorch","2026-03-27T02:49:30.150509","2026-04-06T05:16:18.683507",[138,143,148],{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},10495,"遇到 'Could not resolve host: huggingface.co' 运行时错误怎么办？","该问题的根本原因是 Hugging Face 的构建和部署超时。原有的实现方式是将整个 GitHub 仓库发布到 Hugging Face，这会再次触发 HF 的 Docker 构建过程导致超时。目前该问题已修复，解决方案改为直接将构建好的 Docker 镜像推送到 Hugging Face，从而显著加快了部署速度并避免了超时问题。","https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fissues\u002F8",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},10496,"提供的 BatchNorm 实现是否区分训练和推理模式？","早期的实现仅适用于训练阶段，未正确处理推理（inference）时的行为。针对此问题，社区已提交并合并了修复补丁（PR #6），现在的代码已经能够正确区分和处理训练与推理两种场景下的 BatchNorm 逻辑。","https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fissues\u002F5",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},10497,"项目是否支持带 KV Cache 的 MHA（多头注意力）推理？","是的，项目已支持带 KV Cache 的 MHA 推理功能。维护者已通过提交特定代码（commit 791b168）实现了该功能，用户可以直接使用更新后的代码进行相关推理测试。","https:\u002F\u002Fgithub.com\u002Fduoan\u002FTorchCode\u002Fissues\u002F1",[154],{"id":155,"version":156,"summary_zh":81,"released_at":81},71054,"v0.1.1"]