Expand description
Graph execution engine for graph-structured Transformer
§🎯 GraphTransformer 定位说明
GraphTransformer 主要用于:
- 可视化注意力拓扑:导出 DOT/Graphviz 格式,直观理解注意力模式
- 动态剪枝弱边:运行时剪除弱注意力连接,减少冗余计算
- 添加自定义连接:实验长程连接、稀疏注意力等架构变体
- 拓扑缺陷检测:发现孤立节点、梯度阻断、缺失残差连接
- 执行前向传播:基于拓扑排序的张量计算,支持边上传递张量消息
GraphTransformer 不用于:
- ❌ 高性能推理:对于生产环境推理,建议转换为标准 LlamaModel(使用
llama.cpp或vllm) - ❌ 大规模训练:对于训练任务,使用 PyTorch/JAX 等成熟框架
§核心优势
- 显式表示注意力:每条注意力边可单独访问/修改(黑盒推理引擎做不到)
- 动态拓扑编辑:支持运行时修改图结构(传统静态图做不到)
- 可视化支持:导出 DOT 格式,用 Graphviz 渲染
- 张量传递语义:边上携带 Q/K/V 投影张量,实现消息传递计算
§使用示例
use god_gragh::transformer::graph_transformer::GraphTransformer;
use god_gragh::tensor::traits::TensorBase;
// 1. 创建 GraphTransformer
let mut transformer = GraphTransformer::new(2, 4, 256);
transformer.build_graph(&[1, 2, 3, 4]);
// 2. 可视化注意力拓扑
let dot = transformer.to_dot();
std::fs::write("attention_graph.dot", dot).unwrap();
// 用 Graphviz 渲染:dot -Tpng attention_graph.dot -o attention_graph.png
// 3. 剪枝弱注意力边(阈值=0.01)
let pruned_count = transformer.prune_weak_edges(0.01);
println!("剪枝了 {} 条边", pruned_count);
// 4. 执行前向传播
let output = transformer.forward(&[1, 2, 3, 4]);
println!("Output shape: {:?}", output.shape());
// 5. 添加自定义长程连接
// transformer.add_skip_connection(layer_0, layer_11);§与 DifferentiableGraph 的关系
- GraphTransformer: 用于分析和编辑已有的 Transformer 结构
- DifferentiableGraph: 用于优化图结构(梯度下降学习最优架构)
典型工作流:
- 用 GraphTransformer 可视化和分析初始结构
- 用 DifferentiableGraph 优化结构(剪枝、架构搜索)
- 用 GraphTransformer 验证优化结果
§性能说明
GraphTransformer 包含图遍历和动态编辑开销,不适合高性能推理场景。 对于生产环境,建议:
- 用 GraphTransformer 分析/优化结构
- 导出为静态图(Safetensors 格式)
- 用
llama.cpp或vllm进行推理
§GraphTransformer forward() 实现详解
§执行流程
- 拓扑排序:确定计算顺序,确保依赖先计算
- 节点执行:按拓扑序执行每个节点的操作
- 边上传递:通过边上的张量消息传递信息
- 缓存中间结果:避免重复计算
§张量传递语义
- SelfAttention 边:携带 Q/K/V 投影张量
- DataFlow 边:携带数据流张量(激活值)
- Residual 边:携带残差连接张量(恒等映射)
§节点类型与执行
- TokenEmbedding:提供 token 嵌入向量
- HiddenState:聚合输入和边消息
- AttentionOutput:加权求和注意力输出
- FFNOutput:应用 FFN 变换
Structs§
- Graph
Executor - Graph executor for executing Transformer computation graphs
- Graph
Transformer - Graph-structured Transformer wrapper