[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-deepseek-ai--DeepGEMM":3,"tool-deepseek-ai--DeepGEMM":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},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,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},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 真正成长为懂上",156804,2,"2026-04-15T11:34:33",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":76,"owner_website":78,"owner_url":79,"languages":80,"stars":100,"forks":101,"last_commit_at":102,"license":103,"difficulty_score":104,"env_os":105,"env_gpu":106,"env_ram":105,"env_deps":107,"category_tags":115,"github_topics":76,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":144},7778,"deepseek-ai\u002FDeepGEMM","DeepGEMM","DeepGEMM: clean and efficient FP8 GEMM kernels with fine-grained scaling","DeepGEMM 是一款专为 NVIDIA GPU 打造的高性能矩阵乘法（GEMM）加速库，核心支持高效的 FP8 精度计算及细粒度缩放技术。它主要解决了大模型推理与训练中，特别是在混合专家模型（MoE）场景下，传统算子库配置复杂、编译耗时或性能未达极致的问题。\n\n这款工具非常适合从事底层系统优化、大模型架构研发的工程师及研究人员使用。其独特亮点在于“轻量且强大”的设计理念：虽然借鉴了 CUTLASS 等顶级库的核心思想，但 DeepGEMM 摒弃了繁重的模板依赖，仅保留少量核心内核函数，代码简洁易读，是学习 NVIDIA GPU 内核优化的绝佳范例。此外，它采用运行时即时编译（JIT）机制，安装时无需预先编译内核，大幅降低了部署门槛。尽管设计精简，DeepGEMM 在多种矩阵形状下的性能表现依然媲美甚至超越经过专家手工调优的现有库，在 H800 等高端显卡上更能释放出惊人的算力潜能。","# DeepGEMM\n\nDeepGEMM is a library designed for clean and efficient General Matrix Multiplications (GEMMs). It supports FP8 and BF16 (working in progress) for both normal and Mix-of-Experts (MoE) grouped scenarios. Written in CUDA, the library has no kernel compilation need during installation, by compiling all kernels at runtime using a lightweight Just-In-Time (JIT) module.\n\nDeepGEMM leverages some concepts from [CUTLASS](https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcutlass) and [CuTe](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fcutlass\u002Ftree\u002Fmain\u002Finclude\u002Fcute), it avoids heavy reliance on their templates or algebras. Instead, the library is designed for simplicity, with only a limited number of core kernel functions. This makes it a clean and accessible resource for learning NVIDIA GPU kernel optimization techniques.\n\nDespite its lightweight design, DeepGEMM's performance matches or exceeds expert-tuned libraries across various matrix shapes.\n\n## News\n\n- 2025.09.28: DeepGEMM now supports scoring kernels (weighted ReLU MQA logits) for the lightning indexer for DeepSeek v3.2.\n  - Please see [#200](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F200) for more details.\n- 2025.07.20: DeepGEMM now supports both SM90\u002FSM100, and has a full refactor with a low-CPU-overhead JIT CPP module.\n  - NVRTC and post-compilation SASS optimization are all disabled.\n  - NVRTC will be supported later.\n  - As NVCC 12.9 will automatically do the FFMA interleaving, all post optimizations will be no longer supported.\n  - Please see [#112](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F112) for more details.\n- 2025.05.14: DeepGEMM now offers weight gradient kernels for dense and MoE backward! See [#95](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F95) for details.\n- 2025.05.07: DeepGEMM now supports NVRTC with up to 10x compilation speedup! See [#94](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F94) for details. Please use `DG_JIT_USE_NVRTC=1` to enable it (may have performance loss with some cases).\n- 2025.04.18: DeepGEMM now achieves up to **1550 TFLOPS** on H800! See [#74](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F74), [#78](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F78), [#81](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F81), [#86](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F86) and [340d988](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fcommit\u002F340d9880f4a418d943d34260d20a79f41f4c0526) for details.\n\n## Roadmap\n\n- [x] More correctness tests for grouped-contiguous layout\n- [x] Shared memory swizzling for output\n- [x] MoE scheduler with TMA multicast compatibility\n- [x] Fix TMA multicast compatibility for indivisible shapes\n- [x] Skip useless computation on M\n- [x] NVRTC as a faster compiler\n- [x] Sanitizer for testing\n- [x] Weight gradient kernels for dense models\n- [x] Weight gradient kernels for MoE models\n- [ ] Better `get_best_configs` modeling\n- [ ] CUDA PDL support\n- [ ] Larger TMA multicast size for some shapes\n- [x] MMA template refactor with CUTLASS\n- [x] Remove shape limitations on N and K\n- [x] BF16 kernels\n- [ ] Split\u002Fstream-k optimizations\n- [ ] Ampere kernels\n- [ ] Polish docs\n\n## Quick start\n\n### Requirements\n\n- NVIDIA SM90 or SM100 architecture GPU\n- Python 3.8 or higher\n- Compilers with C++20 support\n- CUDA Toolkit:\n  - CUDA 12.3 or higher for SM90\n    - **We highly recommend 12.9 or higher for the best performance**\n  - CUDA 12.9 or higher for SM100\n- PyTorch 2.1 or higher\n- CUTLASS 4.0 or higher (could be cloned by Git submodule)\n- `{fmt}` library (could be cloned by Git submodule)\n\n### Development\n\n```bash\n# Submodule must be cloned\ngit clone --recursive git@github.com:deepseek-ai\u002FDeepGEMM.git\ncd DeepGEMM\n\n# Link some essential includes and build the CPP JIT module\ncat develop.sh\n.\u002Fdevelop.sh\n\n# Test all GEMM implements\npython tests\u002Ftest_layout.py\npython tests\u002Ftest_attention.py\npython tests\u002Ftest_core.py\n```\n\n### Installation\n\n```bash\ncat install.sh\n.\u002Finstall.sh\n```\n\nThen, import `deep_gemm` in your Python project, and enjoy!\n\n## Interfaces\n\n#### Notices\n\nThis library provides optimized GEMM kernels for NVIDIA GPUs with a naming convention: `D = C + A @ B`. The input shape layout is NT (non-transposed A, transposed B). While the SM90 implementation supports only the NT memory layout (row-major, col-major), the SM100 implementation supports all memory layouts (NT, TN, NN, TT). For example, `fp8_gemm_nt` will do a `D = C + A @ B.T`\n\nFor both architectures, the LHS scaling factor is required to have a TMA-aligned and transposed layout. And the data format for the scaling factor of SM90 and SM100 is different:\n\n- SM90 requires scaling factors in FP32 format.\n- SM100 requires scaling factors in packed [UE8M0](https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fparallel-thread-execution\u002F#alternate-floating-point-data-formats) format, which packs 4 UE8M0 into a single `torch.int`.\n\nPlease note that operations like input transposition or FP8 casting must be handled separately by the user, please implement or fuse them into prior kernels independently. While the library provides some simple PyTorch utility functions, these may result in slower performance, but our primary focus is on optimizing the GEMM kernels themselves.\n\n#### Normal dense GEMMs (non-grouped)\n\nTo perform a basic non-grouped FP8 GEMM, call the `fp8_gemm_{nt, nn, tn, tt}` function. For more details, please refer to the function documentation.\n\n#### Grouped GEMMs (contiguous layout)\n\nUnlike traditional grouped GEMMs in CUTLASS, DeepGEMM groups only the M-axis, while N and K must remain fixed. This design is tailored for scenarios where experts in an MoE model share the same shape. For training forward passes or inference prefilling, where each expert may process a varying number of tokens, we concatenate these tokens into a single tensor, referred to as the \"contiguous\" layout. Note that each expert segment must be aligned to the GEMM M block size (`get_mk_alignment_for_contiguous_layout()`).  For more information, please refer to the `m_grouped_fp8_gemm_{nt, nn}_contiguous` function documentation.\n\nWe also provide a K-axis-grouped API for MoE weight backward (with M and N must remain fixed), please refer to `k_grouped_fp8_gemm_tn_contiguous` for more information.\n\n#### Grouped GEMMs (masked layout)\n\nDuring the inference decoding phase, when CUDA graph is enabled and the CPU is unaware of the number of tokens each expert receives, we support masked grouped GEMMs. By providing a mask tensor, the kernel computes only the valid portions.\n\nUse `m_grouped_fp8_gemm_nt_masked` for this purpose and consult the relevant documentation. An example usage is to use the output of low-latency kernels from [DeepEP](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepEP) as input.\n\n#### V3.2 MQA kernels for the indexer\n\nThe kernel family has two versions, non-paged (for prefilling) and paged (for decoding).\nTake the non-paged version `fp8_mqa_logits` as an example. It has 6 inputs:\n\n- `q`, E4M3 tensor with shape `[seq_len, num_heads, head_dim]`\n- `kv`, E4M3 tensor (shaped as `[seq_len_kv, head_dim]`) with float SF (shaped as `[seq_len_kv]`)\n- `weights`, float tensor with shape `[seq_len, num_heads]`\n- `cu_seq_len_k_start` and `cu_seq_len_k_end`, int tensor with shape `[seq_len]`\n- `clean_logits`, whether to clean the unfilled logits into `-inf`\n\nThe output tensor is shaped as `[seq_len, seq_len_kv]`, indicating token-to-token logits.\nFor each token `i` in `q`, it will iterate all tokens `j` from `[cu_seq_len_k_start[i], cu_seq_len_k_end[i])`,\nand calculate the logit `out[i, j]` as:\n\n```python\nkv_j = kv[0][j, :] * kv[1][j].unsqueeze(1)  # [head_dim]\nout_ij = q[i, :, :] @ kv_j  # [num_heads]\nout_ij = out_ij.relu() * weights[i, :]  # [num_heads]\nout_ij = out_ij.sum()  # Scalar\n```\n\nFor more details and the paged version `fp8_paged_mqa_logits`, please refer to `tests\u002Ftest_attention.py`.\n\n#### Utilities\n\nThe library provides some utility functions besides the above kernels:\n\n- `deep_gemm.set_num_sms`: set the maximum SM count to use\n- `deep_gemm.get_num_sms`: get the current SM maximum count (return the device SM count if not set)\n- `deep_gemm.set_tc_util`: set an approximated tensor core utilization ratio\n- `deep_gemm.get_tc_util`: get the current tensor core utilization ratio\n- `deep_gemm.transform_sf_into_required_layout`: transform scaling factors into required layout\n- `deep_gemm.get_tma_aligned_size`: get the required TMA alignment size\n- `deep_gemm.get_mk_alignment_for_contiguous_layout`: get the group-level alignment requirement for grouped contiguous layout\n- `deep_gemm.get_mn_major_tma_aligned_tensor`: get a MN-major TMA-aligned tensor\n- `deep_gemm.get_mn_major_tma_aligned_packed_ue8m0_tensor`: get a MN-major TMA-aligned tensor (with packing FP32 into UE8M0)\n- `deep_gemm.get_k_grouped_mn_major_tma_aligned_packed_ue8m0_tensor`: K-grouped GEMM packing kernel\n\nThe library also provides some environment variables, which may be useful:\n\n- General\n  - `DG_JIT_DEBUG`: `0` or `1`, print more JIT debugging information, `0` by default\n- JIT cache related\n  - `DG_JIT_CACHE_DIR`: string, the cache directory to store compiled kernels, `$HOME\u002F.deep_gemm` by default\n- NVCC\u002FNVRTC selections\n  - `DG_JIT_USE_NVRTC`: `0` or `1`, use NVRTC instead of NVCC, faster compilation but maybe have lower performance for some cases, `0` by default\n  - `DG_JIT_NVCC_COMPILER`: string, specified NVCC compiler path; will find in `torch.utils.cpp_extension.CUDA_HOME` by default\n- Compiler options\n  - `DG_JIT_PTXAS_VERBOSE`: `0` or `1`, show detailed PTXAS compiler output, `0` by default\n  - `DG_JIT_PRINT_COMPILER_COMMAND`: `0` or `1`, print NVCC compilation command, `0` by default\n- Heuristic selection\n  - `DG_PRINT_CONFIGS`: `0` or `1`, print selected configs for each shape, `0` by default\n\nFor additional examples and details, please refer to [the test code](tests\u002Ftest_core.py) or review the corresponding Python documentation.\n\n## Acknowledgement\n\nDeepGEMM is inspired by the [CUTLASS](https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcutlass) project. Thanks and respect to the developers!\n\n## License\n\nThis code repository is released under [the MIT License](LICENSE).\n","# DeepGEMM\n\nDeepGEMM 是一个专为干净高效的一般矩阵乘法（GEMM）设计的库。它支持 FP8 和 BF16 数据类型，适用于常规和混合专家（MoE）分组场景。该库使用 CUDA 编写，在安装时无需编译内核，而是通过一个轻量级的即时编译（JIT）模块在运行时动态编译所有内核。\n\nDeepGEMM 借鉴了 [CUTLASS](https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcutlass) 和 [CuTe](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fcutlass\u002Ftree\u002Fmain\u002Finclude\u002Fcute) 中的一些概念，但避免了对其模板或代数系统的过度依赖。相反，该库以简洁为目标，仅包含少量核心内核函数，使其成为学习 NVIDIA GPU 内核优化技术的一个清晰且易于上手的资源。\n\n尽管设计轻量，DeepGEMM 的性能在各种矩阵形状下都能达到甚至超越专家调优的库。\n\n## 新闻\n\n- 2025年9月28日：DeepGEMM 现已支持用于 DeepSeek v3.2 光速索引器的打分内核（加权 ReLU MQA logits）。\n  - 更多详情请参阅 [#200](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F200)。\n- 2025年7月20日：DeepGEMM 现在同时支持 SM90 和 SM100 架构，并进行了全面重构，引入了一个低 CPU 开销的 JIT CPP 模块。\n  - NVRTC 和后编译 SASS 优化已被全部禁用。\n  - NVRTC 将在后续版本中重新支持。\n  - 由于 NVCC 12.9 会自动进行 FFMA 交错处理，所有后优化功能将不再适用。\n  - 更多详情请参阅 [#112](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F112)。\n- 2025年5月14日：DeepGEMM 现已提供密集模型和 MoE 反向传播的权重梯度内核！详情请见 [#95](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F95)。\n- 2025年5月7日：DeepGEMM 现已支持 NVRTC，编译速度最高可提升 10 倍！详情请参阅 [#94](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F94)。请使用 `DG_JIT_USE_NVRTC=1` 来启用此功能（某些情况下可能会有性能损失）。\n- 2025年4月18日：DeepGEMM 在 H800 上已达到高达 **1550 TFLOPS** 的性能！详情请参阅 [#74](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F74)、[#78](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F78)、[#81](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F81)、[#86](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fpull\u002F86) 以及 [340d988](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fcommit\u002F340d9880f4a418d943d34260d20a79f41f4c0526)。\n\n## 路线图\n\n- [x] 针对分组连续布局的更多正确性测试\n- [x] 输出端共享内存交错\n- [x] 兼容 TMA 组播的 MoE 调度器\n- [x] 修复不可分割形状下的 TMA 组播兼容性问题\n- [x] 跳过 M 维度上的无用计算\n- [x] 使用 NVRTC 作为更快的编译器\n- [x] 测试用的 Sanitizer 工具\n- [x] 密集模型的权重梯度内核\n- [x] MoE 模型的权重梯度内核\n- [ ] 改进 `get_best_configs` 建模\n- [ ] 支持 CUDA PDL\n- [ ] 为部分形状增加更大的 TMA 组播尺寸\n- [x] 使用 CUTLASS 重构 MMA 模板\n- [x] 移除 N 和 K 维度的形状限制\n- [x] 实现 BF16 内核\n- [ ] 分割\u002F流式优化\n- [ ] Ampere 架构专用内核\n- [ ] 完善文档\n\n## 快速入门\n\n### 需求\n\n- NVIDIA SM90 或 SM100 架构的 GPU\n- Python 3.8 或更高版本\n- 支持 C++20 的编译器\n- CUDA 工具包：\n  - SM90 需要 CUDA 12.3 或更高版本\n    - **为获得最佳性能，强烈建议使用 12.9 或更高版本**\n  - SM100 需要 CUDA 12.9 或更高版本\n- PyTorch 2.1 或更高版本\n- CUTLASS 4.0 或更高版本（可通过 Git 子模块克隆）\n- `{fmt}` 库（可通过 Git 子模块克隆）\n\n### 开发\n\n```bash\n# 必须克隆子模块\ngit clone --recursive git@github.com:deepseek-ai\u002FDeepGEMM.git\ncd DeepGEMM\n\n# 链接一些必要的头文件并构建 CPP JIT 模块\ncat develop.sh\n.\u002Fdevelop.sh\n\n# 测试所有 GEMM 实现\npython tests\u002Ftest_layout.py\npython tests\u002Ftest_attention.py\npython tests\u002Ftest_core.py\n```\n\n### 安装\n\n```bash\ncat install.sh\n.\u002Finstall.sh\n```\n\n随后，您可以在 Python 项目中导入 `deep_gemm`，即可开始使用！\n\n## 接口\n\n#### 注意事项\n\n本库为 NVIDIA GPU 提供了优化的 GEMM 内核，命名规范为 `D = C + A @ B`。输入张量的形状布局为 NT（A 不转置，B 转置）。SM90 实现仅支持 NT 内存布局（行主序、列主序），而 SM100 实现则支持所有内存布局（NT、TN、NN、TT）。例如，`fp8_gemm_nt` 将执行 `D = C + A @ B.T`。\n\n对于这两种架构，左侧缩放因子都要求采用 TMA 对齐且转置后的布局。此外，SM90 和 SM100 的缩放因子数据格式有所不同：\n\n- SM90 要求缩放因子为 FP32 格式。\n- SM100 要求缩放因子为打包的 [UE8M0](https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fparallel-thread-execution\u002F#alternate-floating-point-data-formats) 格式，即 4 个 UE8M0 打包成一个 `torch.int`。\n\n请注意，诸如输入转置或 FP8 类型转换等操作需要由用户单独处理，请自行实现或将这些操作融合到之前的内核中。虽然本库提供了一些简单的 PyTorch 工具函数，但这些函数可能会导致性能下降。我们的主要目标是优化 GEMM 内核本身。\n\n#### 普通密集 GEMM（非分组）\n\n要执行一个基本的非分组 FP8 GEMM，调用 `fp8_gemm_{nt, nn, tn, tt}` 函数即可。更多详细信息请参阅函数文档。\n\n#### 分组 GEMM（连续布局）\n\n与 CUTLASS 中的传统分组 GEMM 不同，DeepGEMM 只对 M 轴进行分组，而 N 和 K 必须保持固定。这种设计适用于 MoE 模型中各个专家共享相同形状的场景。对于训练前向传播或推理预填充阶段，由于每个专家可能处理不同数量的 token，我们会将这些 token 拼接成一个单一的张量，称为“连续”布局。需要注意的是，每个专家段必须对齐到 GEMM 的 M 块大小（`get_mk_alignment_for_contiguous_layout()`）。更多信息请参阅 `m_grouped_fp8_gemm_{nt, nn}_contiguous` 函数文档。\n\n我们还提供了针对 MoE 权重反向传播的 K 轴分组 API（M 和 N 必须保持固定），详情请参阅 `k_grouped_fp8_gemm_tn_contiguous`。\n\n#### 分组 GEMM（掩码布局）\n\n在推理解码阶段，当启用 CUDA 图且 CPU 无法得知每个专家接收的 token 数量时，我们支持掩码分组 GEMM。通过提供一个掩码张量，内核只会计算有效的部分。\n\n为此可使用 `m_grouped_fp8_gemm_nt_masked`，并参考相关文档。一个典型用法是将来自 [DeepEP](https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepEP) 的低延迟内核输出作为输入。\n\n#### V3.2 MQA 内核用于索引器\n\n该内核系列有两个版本：非分页版（用于预填充）和分页版（用于解码）。\n\n以非分页版 `fp8_mqa_logits` 为例，它有 6 个输入：\n\n- `q`，形状为 `[seq_len, num_heads, head_dim]` 的 E4M3 张量\n- `kv`，形状为 `[seq_len_kv, head_dim]` 的 E4M3 张量，以及形状为 `[seq_len_kv]` 的浮点 SF 张量\n- `weights`，形状为 `[seq_len, num_heads]` 的浮点张量\n- `cu_seq_len_k_start` 和 `cu_seq_len_k_end`，形状为 `[seq_len]` 的整数张量\n- `clean_logits`，是否将未填充的 logits 清零为 `-inf`\n\n输出张量的形状为 `[seq_len, seq_len_kv]`，表示 token 到 token 的 logits。对于 `q` 中的每个 token `i`，它会遍历 `[cu_seq_len_k_start[i], cu_seq_len_k_end[i))` 范围内的所有 token `j`，并按如下方式计算 `out[i, j]`：\n\n```python\nkv_j = kv[0][j, :] * kv[1][j].unsqueeze(1)  # [head_dim]\nout_ij = q[i, :, :] @ kv_j  # [num_heads]\nout_ij = out_ij.relu() * weights[i, :]  # [num_heads]\nout_ij = out_ij.sum()  # 标量\n```\n\n更多详细信息及分页版 `fp8_paged_mqa_logits`，请参阅 `tests\u002Ftest_attention.py`。\n\n#### 工具函数\n\n除了上述内核外，本库还提供了一些工具函数：\n\n- `deep_gemm.set_num_sms`: 设置使用的最大 SM 数量\n- `deep_gemm.get_num_sms`: 获取当前设置的最大 SM 数量（若未设置，则返回设备的 SM 总数）\n- `deep_gemm.set_tc_util`: 设置近似的 Tensor Core 利用率\n- `deep_gemm.get_tc_util`: 获取当前的 Tensor Core 利用率\n- `deep_gemm.transform_sf_into_required_layout`: 将缩放因子转换为所需布局\n- `deep_gemm.get_tma_aligned_size`: 获取所需的 TMA 对齐大小\n- `deep_gemm.get_mk_alignment_for_contiguous_layout`: 获取分组连续布局的组级对齐要求\n- `deep_gemm.get_mn_major_tma_aligned_tensor`: 获取 MN 主序的 TMA 对齐张量\n- `deep_gemm.get_mn_major_tma_aligned_packed_ue8m0_tensor`: 获取 MN 主序的 TMA 对齐张量（将 FP32 打包为 UE8M0）\n- `deep_gemm.get_k_grouped_mn_major_tma_aligned_packed_ue8m0_tensor`: K 轴分组 GEMM 打包内核\n\n本库还提供了一些环境变量，可能对您有所帮助：\n\n- 通用\n  - `DG_JIT_DEBUG`: `0` 或 `1`，打印更多 JIT 调试信息，默认为 `0`\n- JIT 缓存相关\n  - `DG_JIT_CACHE_DIR`: 字符串，用于存储编译后内核的缓存目录，默认为 `$HOME\u002F.deep_gemm`\n- NVCC\u002FNVRTC 选择\n  - `DG_JIT_USE_NVRTC`: `0` 或 `1`，使用 NVRTC 替代 NVCC，编译速度更快，但在某些情况下性能可能较低，默认为 `0`\n  - `DG_JIT_NVCC_COMPILER`: 字符串，指定 NVCC 编译器路径；默认会在 `torch.utils.cpp_extension.CUDA_HOME` 中查找\n- 编译选项\n  - `DG_JIT_PTXAS_VERBOSE`: `0` 或 `1`，显示详细的 PTXAS 编译器输出，默认为 `0`\n  - `DG_JIT_PRINT_COMPILER_COMMAND`: `0` 或 `1`，打印 NVCC 编译命令，默认为 `0`\n- 启发式选择\n  - `DG_PRINT_CONFIGS`: `0` 或 `1`，打印针对每种形状所选的配置，默认为 `0`\n\n更多示例和详细信息，请参阅 [测试代码](tests\u002Ftest_core.py) 或相应的 Python 文档。\n\n## 致谢\n\nDeepGEMM 灵感来源于 [CUTLASS](https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcutlass) 项目。感谢并致敬其开发者！\n\n## 许可证\n\n本代码仓库根据 [MIT 许可证](LICENSE) 发布。","# DeepGEMM 快速上手指南\n\nDeepGEMM 是一个专为 NVIDIA GPU 设计的高效通用矩阵乘法（GEMM）库，支持 FP8 和 BF16 精度，特别针对混合专家模型（MoE）的分组场景进行了优化。它采用轻量级 JIT（即时编译）机制，无需预编译内核，代码简洁且性能卓越。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **硬件架构**：NVIDIA SM90 (Hopper, 如 H800\u002FH100) 或 SM100 (Blackwell) GPU。\n*   **操作系统**：Linux。\n*   **Python**：3.8 或更高版本。\n*   **编译器**：支持 C++20 标准的编译器。\n*   **CUDA Toolkit**：\n    *   SM90：CUDA 12.3+（**强烈推荐 12.9+** 以获得最佳性能）。\n    *   SM100：CUDA 12.9+。\n*   **深度学习框架**：PyTorch 2.1 或更高版本。\n*   **依赖库**：\n    *   CUTLASS 4.0+\n    *   `{fmt}` 库\n    *   *(注：这两个库可通过 Git 子模块自动获取)*\n\n## 安装步骤\n\nDeepGEMM 通过源码安装，利用 Git 子模块管理依赖。\n\n1.  **克隆仓库（包含子模块）**\n    ```bash\n    git clone --recursive git@github.com:deepseek-ai\u002FDeepGEMM.git\n    cd DeepGEMM\n    ```\n    > **提示**：如果网络连接 GitHub 较慢，可配置国内 Git 镜像或使用代理加速克隆过程。\n\n2.  **构建开发环境与 JIT 模块**\n    运行提供的脚本以链接必要的头文件并构建 C++ JIT 模块：\n    ```bash\n    cat develop.sh\n    .\u002Fdevelop.sh\n    ```\n\n3.  **正式安装**\n    执行安装脚本完成最终配置：\n    ```bash\n    cat install.sh\n    .\u002Finstall.sh\n    ```\n\n4.  **验证安装（可选）**\n    运行测试脚本确保 GEMM 实现正常工作：\n    ```bash\n    python tests\u002Ftest_layout.py\n    python tests\u002Ftest_attention.py\n    python tests\u002Ftest_core.py\n    ```\n\n## 基本使用\n\n安装完成后，即可在 Python 项目中导入 `deep_gemm` 使用。DeepGEMM 的核心接口遵循 $D = C + A \\times B$ 的命名规范，默认输入布局为 **NT**（A 非转置，B 转置）。\n\n### 最简单的使用示例：普通稠密矩阵乘法 (FP8)\n\n以下示例展示如何调用基础的 FP8 GEMM 接口。请注意，缩放因子（Scaling Factors）需要根据架构要求进行特定的内存布局转换。\n\n```python\nimport torch\nimport deep_gemm\n\n# 假设已准备好符合要求的 FP8 张量 A, B 和累加器 C\n# 注意：实际使用中需确保张量维度对齐，并正确处理缩放因子 (scale)\n# 此处仅为接口调用示意\n\n# 定义输入形状 (示例)\nM, N, K = 1024, 1024, 1024\n\n# 创建模拟数据 (实际使用时应为 E4M3\u002FE5M2 等 FP8 格式)\n# A: [M, K], B: [N, K] (因为接口期望 B 是转置传入的，即原始 B 为 [K, N])\nA = torch.randn(M, K, dtype=torch.float8_e4m3fn, device='cuda')\nB = torch.randn(N, K, dtype=torch.float8_e4m3fn, device='cuda') \nC = torch.zeros(M, N, dtype=torch.bfloat16, device='cuda') # 输出通常为高精度\n\n# 准备缩放因子 (SM90 需要 FP32 格式且需 TMA 对齐，具体请参考 transform_sf_into_required_layout)\n# 这里假设 scale_a 和 scale_b 已经过 deep_gemm 工具函数处理\nscale_a = torch.ones((M,), dtype=torch.float32, device='cuda') \nscale_b = torch.ones((N,), dtype=torch.float32, device='cuda')\n\n# 执行 NT 布局的矩阵乘法: D = C + A @ B.T\n# 对应函数：fp8_gemm_nt\ndeep_gemm.fp8_gemm_nt(\n    a=A,\n    b=B,\n    c=C,\n    scale_a=scale_a,\n    scale_b=scale_b,\n    # 其他可选参数如 alpha, beta 等视具体需求而定\n)\n\nprint(\"GEMM 计算完成\")\n```\n\n### 关键注意事项\n\n1.  **内存布局**：\n    *   **SM90**：仅支持 **NT** 布局（Row-major A, Col-major B）。\n    *   **SM100**：支持所有布局（NT, TN, NN, TT）。\n    *   如果需要其他布局（如 NN），请在调用前自行对输入张量进行转置或使用对应的 `_nn`, `_tn` 后缀接口（若架构支持）。\n\n2.  **缩放因子 (Scaling Factors)**：\n    *   库不负责输入数据的 FP8 转换或转置，这些操作需在调用前由用户完成。\n    *   **SM90**：缩放因子必须为 **FP32** 格式。\n    *   **SM100**：缩放因子必须为打包的 **UE8M0** 格式（每 4 个值打包进一个 `torch.int`）。\n    *   推荐使用库提供的工具函数 `deep_gemm.transform_sf_into_required_layout` 来处理缩放因子布局。\n\n3.  **MoE 分组支持**：\n    *   对于 MoE 场景，库提供了 `m_grouped_fp8_gemm_*_contiguous`（连续布局）和 `m_grouped_fp8_gemm_*_masked`（掩码布局）接口，专门用于处理专家共享形状但 Token 数量动态变化的场景。\n\n更多高级用法（如权重梯度计算、MQA 索引器等）请参考 `tests\u002F` 目录下的测试代码或 Python 文档字符串。","某大模型团队正在基于 DeepSeek v3.2 架构训练超大规模混合专家（MoE）模型，亟需在 H800 GPU 上实现高效的 FP8 精度矩阵乘法以加速推理与训练。\n\n### 没有 DeepGEMM 时\n- **精度与性能难以兼得**：传统库对 FP8 细粒度缩放支持不足，强行使用会导致模型收敛困难或需回退到 BF16，牺牲了显存带宽优势。\n- **MoE 场景适配复杂**：处理动态路由的分组矩阵乘法（Grouped GEMM）时，现有方案往往需要繁琐的内核定制或遭受严重的计算碎片化。\n- **部署门槛高**：依赖重型模板库（如完整 CUTLASS），编译时间长且代码耦合度高，调试和优化底层 CUDA 内核极其耗时。\n- **硬件算力未跑满**：在 H800 等新架构上，无法有效利用 TMA 多播等特性，实测算力远低于理论峰值，训练成本居高不下。\n\n### 使用 DeepGEMM 后\n- **原生 FP8 高效支持**：直接调用内置的细粒度缩放 FP8 内核，在保持模型精度的同时，将矩阵乘法吞吐量提升至 1550 TFLOPS。\n- **MoE 场景无缝加速**：专为 MoE 设计的分组内核自动处理不规则形状，完美适配 DeepSeek v3.2 的闪电索引器，消除计算气泡。\n- **轻量级即时编译**：通过低开销 JIT 模块在运行时自动编译最优内核，无需预编译繁琐的模板，大幅降低集成与维护成本。\n- **极致硬件利用率**：针对 SM90\u002FSM100 架构深度优化，自动启用 TMA 多播和共享内存交换，充分释放 H800 的硬件潜能。\n\nDeepGEMM 通过简洁高效的 FP8 内核设计，让开发者在无需深入底层优化的前提下，即可在大规模 MoE 模型中实现极致的训练与推理性能。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdeepseek-ai_DeepGEMM_4cfaaa13.png","deepseek-ai","DeepSeek","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fdeepseek-ai_04503588.png","",null,"service@deepseek.com","https:\u002F\u002Fwww.deepseek.com\u002F","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai",[81,85,89,93,97],{"name":82,"color":83,"percentage":84},"Cuda","#3A4E3A",41.5,{"name":86,"color":87,"percentage":88},"C++","#f34b7d",39.3,{"name":90,"color":91,"percentage":92},"Python","#3572A5",18.9,{"name":94,"color":95,"percentage":96},"CMake","#DA3434",0.2,{"name":98,"color":99,"percentage":96},"Shell","#89e051",6329,859,"2026-04-15T06:11:36","MIT",4,"未说明","必需 NVIDIA GPU，架构需为 SM90 (如 H800, H100) 或 SM100 (Blackwell 系列)。显存大小未明确说明。CUDA Toolkit 版本要求：SM90 需 CUDA 12.3+ (推荐 12.9+)，SM100 需 CUDA 12.9+。",{"notes":108,"python":109,"dependencies":110},"该库在运行时通过轻量级 JIT 模块编译所有内核，安装时无需预先编译内核。支持 FP8 和 BF16（进行中）精度，专为正常及混合专家模型（MoE）分组场景设计。SM90 实现仅支持 NT 内存布局，而 SM100 支持所有布局。缩放因子格式因架构而异：SM90 需 FP32，SM100 需打包的 UE8M0 格式。用户需自行处理输入转置或 FP8 转换等操作。可通过环境变量配置 JIT 缓存目录、编译器选择（NVCC 或 NVRTC）及调试信息。","3.8+",[111,112,113,114],"PyTorch>=2.1","CUTLASS>=4.0","{fmt} library","支持 C++20 的编译器",[14],"2026-03-27T02:49:30.150509","2026-04-16T01:49:42.418087",[119,124,129,134,139],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},34836,"DeepGEMM 是否直接支持训练过程中的反向传播（Backward）？","是的，官方权重梯度 GEMM 支持已在相关 PR 中合并。在反向传播的数学计算中 `dw = dy^t @ x`，虽然 x 在前向传播中是左操作数（LHS），但在反向传播的 GEMM 核中作为右操作数（RHS）需要转置。关于缩放（scaling）和平铺（tiling）规则：累加维度（k 维）每 128 个元素共享同一个缩放因子，该因子在累加后应用。即使同一个张量 x 同时用于前向和反向 GEMM，这两个 GEMM 是独立的，x 不需要具有相同的缩放比例。","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fissues\u002F10",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},34837,"NVIDIA Hopper 架构下 FP8 Tensor Core 的累加器精度是多少？为什么会出现截断？","根据实验和相关研究（如 SageAttention2 论文），Hopper\u002FAda 架构的 FP8 Tensor Core 累加器实际上具有 22 位有效精度，而非部分报告中提到的 14 位。具体表现为：当累加值的有效位数超过 22 位时，最后 10 位会被截断。这是因为 FP8 GEMM 采用定点累加，在加法前会根据最大指数对尾数乘积进行右移对齐，导致超出范围的低位被丢弃。若需更高精度，建议未来芯片设计增加累加精度或根据算法需求选择合适的累加位宽。","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fissues\u002F37",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},34838,"在 `per_token_cast_to_fp8` 函数中，为什么将 amax 值钳位（clamp）到 1e-4？","钳位的主要目的是为了避免除以零的情况发生。虽然理论上可以使用更小的值（如 1e-12），但设置为 1e-4 是在防止数值不稳定和保持量化有效性之间的一个工程权衡。这确保了在缩放因子计算时分母不会为零或过小导致溢出。","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fissues\u002F109",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},34839,"使用 `m_grouped_gemm_fp8_fp8_bf16_nt_contiguous` 接口时，为什么会出现结果不一致或报错？","这是因为该接口对 M 轴（batch 维度）有严格的对齐要求。输入数据在 M 轴上被分组为多个批次，每个批次的大小必须对齐到 `get_m_alignment_for_contiguous_layout()` 定义的数值，默认为 128。如果输入的 `expected_m` 或实际 m 值未满足 128 的对齐要求（例如 m=64 且未正确填充），就会导致计算错误或精度不一致。请确保输入张量的 M 维度是 128 的倍数。","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fissues\u002F4",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},34840,"`get_m_alignment_for_contiguous_layout` 为什么固定为 128？能否减小到 64 以优化小尺寸性能？","目前固定为 128 是为了保持内核实现的统一性和效率。虽然普通 GEMM 和带掩码的 Group GEMM 支持 BLOCK_M=64，但在连续布局（contiguous layout）的 Group GEMM 中，维持 BLOCK_M=128 并在必要时跳过第二个 warp 组通常是更好的处理方式。如果要支持自适应的 alignment（如 64 或 128），需要修改函数签名并增加额外的参数（如 expected_m），目前维护者倾向于保持现有设计以避免复杂性，但在特定场景下（如 m_per_group 仅为 64）使用较小的 BLOCK_M 确实可能带来性能提升，这需要后续的内核优化支持。","https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepGEMM\u002Fissues\u002F85",[145,149,153,157,161,165],{"id":146,"version":147,"summary_zh":76,"released_at":148},272157,"nv_dev_4ff3f54","2026-01-05T09:31:57",{"id":150,"version":151,"summary_zh":76,"released_at":152},272158,"v2.1.1.post3","2025-10-15T14:30:54",{"id":154,"version":155,"summary_zh":76,"released_at":156},272159,"v2.1.1.post2","2025-10-15T11:01:34",{"id":158,"version":159,"summary_zh":76,"released_at":160},272160,"v2.1.1.post1","2025-10-15T10:32:36",{"id":162,"version":163,"summary_zh":76,"released_at":164},272161,"v2.1.1","2025-10-14T08:01:41",{"id":166,"version":167,"summary_zh":76,"released_at":168},272162,"v2.1.0","2025-09-29T09:31:00"]