跳转至

Genesis 深度学习框架

轻量级深度学习框架 | 从零构建 | Python + Triton + CUDA

Python CUDA Triton License

🚀 项目概述

Genesis 是一个基于 Python 从零构建的轻量级深度学习框架。CPU 后端借助 PyTorch 的张量操作,而 GPU 后端完全独立,使用 CUDA Python API 进行直接的 GPU 内存管理,并使用 Triton 编写高性能的 GPU 内核。项目旨在提供清晰的架构设计和教育价值,同时保持代码的可读性和可扩展性。

✨ 核心特性

  • 🎯 轻量级设计 - 清晰的API设计,易于理解和使用
  • ⚡ 高性能 - Triton优化的GPU内核,接近主流框架性能
  • 🔄 自动微分 - 完整的反向传播和梯度计算系统
  • 🧠 神经网络 - 丰富的神经网络层和优化器实现
  • 🔧 混合精度 - 支持FP16/BF16混合精度训练 (AMP)
  • 📊 分布式训练 - 多GPU并行训练支持
  • 🎨 模型库 - 内置主流LLM模型如Qwen的实现
  • 💾 模型管理 - 完整的检查点保存/加载系统
  • 📈 学习率调度 - 多种学习率调度器和梯度裁剪
  • 🚀 性能优化 - 内核缓存、内存池化和自适应配置

🏗️ 架构亮点

graph TB
    A[用户API] --> B[自动微分引擎]
    A --> C[神经网络模块]
    B --> D[张量系统]
    C --> D
    D --> E[后端抽象层]
    E --> F[CPU Backend]
    E --> G[CUDA Backend]
    G --> H[Triton Kernels]

    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#fff3e0
    style E fill:#fce4ec
    style F fill:#f1f8e9
    style G fill:#e3f2fd
    style H fill:#fff8e1

🎯 设计目标

教育价值

  • 清晰的代码结构 - 每个模块职责明确
  • 完整的文档 - 从设计理念到实现细节的完整文档
  • 渐进式学习 - 从基础概念到高级特性的学习路径

工程实践

  • 现代化架构 - 借鉴PyTorch等主流框架的优秀设计
  • 高效实现 - 使用Triton等现代工具进行性能优化
  • 可扩展性 - 模块化设计便于添加新功能

实用性

  • 功能完整 - 支持从模型定义到训练部署的完整工作流
  • 性能优化 - 多种优化策略确保实际训练性能
  • 生态兼容 - 与现有深度学习生态良好兼容

📊 性能状态

内存分配器性能(最新优化)

场景 Genesis vs PyTorch 状态
同尺寸分配 1.43x ✅ 优秀
大内存(>1MB) 3.92x ✅ 杰出
Transformer训练 1.89x ✅ 优秀
内存压力 4.83x ✅ 杰出
变化尺寸 0.83x 🔄 良好

算子性能

操作 Genesis vs PyTorch 状态
矩阵乘法 0.95x ✅ 良好
元素级操作 1.02x ✅ 优秀
归约操作 0.87x 🔄 优化中
Softmax 1.15x ✅ 优秀
LayerNorm 1.08x ✅ 优秀
Cat操作 0.02x 修复中
LogSumExp 0.02x 修复中
广播操作 0.04x 修复中

近期性能改进

  • 块分配器: Transformer训练场景38倍性能提升
  • 内存管理: 消除cudaMalloc/cudaFree同步开销
  • Fill操作: GPU原生内核36倍性能提升
  • 🔄 Cat操作: GPU原生实现进行中(修复0.02x问题)
  • 🔄 归约操作: Triton内核优化进行中

性能更新

Genesis在内存管理方面取得了重大突破,在多个关键场景下达到或超越PyTorch性能。当前重点是修复剩余的算子瓶颈。

详细分析请参考:内存分配器优化报告

🛠️ 技术栈

核心依赖

  • Python 3.8+ - 主要开发语言
  • PyTorch - 内存管理和部分操作
  • Triton 2.0+ - GPU内核优化
  • CUDA 11.0+ - GPU计算支持
  • NumPy - CPU数值计算
  • cuda-python - 直接CUDA API访问

开发工具

  • pytest - 单元测试框架
  • black - 代码格式化
  • mypy - 类型检查
  • MkDocs - 文档生成
  • Material for MkDocs - 文档主题

🎓 学习路径

初学者

  1. 快速开始 - 安装和第一个程序
  2. 基础教程 - 简单神经网络训练
  3. API参考 - 常用API使用

高级用户

  1. 架构设计 - 深入理解系统设计
  2. 自定义操作 - 实现自定义操作
  3. 性能优化 - 性能分析和优化指南
  4. 性能调优 - 训练性能调优技巧
  5. Qwen模型指南 - 使用和训练Qwen LLM模型

贡献者

  1. 开发环境 - 配置开发环境
  2. 核心组件 - 理解内部实现
  3. 测试指南 - 代码贡献指南

🌟 项目亮点

代码质量

  • 类型注解 - 完整的类型提示,IDE友好
  • 单元测试 - 95%+测试覆盖率
  • 完整文档 - 从API到设计的全面文档
  • 代码规范 - 统一的代码风格和最佳实践

近期更新 (2025-01)

  • ✅ 内存分配器优化 - 达到PyTorch级性能
  • ✅ Qwen模型支持 - 完整Qwen LLM架构实现
  • ✅ 混合精度训练 - FP16/BF16自动混合精度(AMP)
  • ✅ 梯度裁剪 - 支持梯度范数和值裁剪
  • ✅ 学习率调度器 - StepLR, ExponentialLR, CosineAnnealingLR
  • ✅ 检查点系统 - 模型保存/加载与优化器状态保存
  • 🔄 算子性能 - 修复关键算子(cat, logsumexp, broadcast)
  • 🔄 内核优化 - Triton内核持续改进中

🤝 社区与贡献

我们欢迎各种形式的贡献:

  • 🐛 错误报告 - 请及时报告发现的bug
  • 💡 功能建议 - 欢迎新功能想法
  • 📝 文档改进 - 帮助改善文档质量
  • 💻 代码贡献 - 直接参与代码开发

详情请参考 贡献指南

📞 联系方式

  • GitHub Issues - bug报告和功能请求
  • Discussions - 技术讨论和使用交流
  • 邮箱 - genesis-dev@example.com

开始您的深度学习之旅 🚀

  • 快速开始


    立即开始使用Genesis构建您的第一个神经网络

    快速开始

  • 查看源码


    在GitHub上探索完整的Genesis源码实现

    GitHub仓库