Mirage-LLM编译成大Kernel

Ref

  1. Mirage github
  2. Mirage 博客
  3. 关于uGraph
  4. deepwiki

源码

mirage/src/kernel/customized.cc

实现自定义内核算子(KNCustomizedOp)的核心文件,主要负责将内核级图和线程块级图连接起来

Graph::customized() - 自己定义算子

cpp 复制代码
std::vector<DTensor> Graph::customized(std::vector<DTensor> const &inputs,
                                       threadblock::Graph const &bgraph) {
  KNOperator *op = create_customized_op(inputs, bgraph);
  assert(op != nullptr);
  operators.push_back(op);
  return op->output_tensors;
}

int Graph::customized(std::vector<DTensor const *> _inputs,
                      DTensor **outputs,
                      mirage::threadblock::Graph const *bgraph) {
  std::vector<DTensor> inputs;
  for (auto const &t : _inputs) {
    inputs.push_back(t == nullptr ? DTensor::EMPTY_TENSOR : *t);
  }
  KNOperator *op = create_customized_op(inputs, *bgraph);
  assert(op != nullptr);
  operators.push_back(op);
  for (size_t i = 0; i < op->output_tensors.size(); i++) {
    outputs[i] = &op->output_tensors[i];
  }
  return op->output_tensors.size();
}

mirage/src/transpiler/transpile.cc

mirage/src/kernel/chunk.cc

chunk算子用于对于给定张量在指定维度上进行切分,注意这里貌似只涉及了描述chunk的行为,具体的可能是通过Transpiler代码生成器进行翻译成CUDA代码

算子创建

cpp 复制代码
KNOperator *
    Graph::create_chunk_op(DTensor const &input, int chunk_size, int dim) {
  if (dim < 0 || dim >= input.num_dims || chunk_size <= 0) {
    return nullptr;
  }
  if (input.dim[dim] % chunk_size != 0) {
    return nullptr;
  }
  if (!this->can_allocate(input)) {
    return nullptr;
  }

  KNChunkOp *op = new KNChunkOp(this, input, chunk_size, dim);
  return op;
}

运行chunk算子

cpp 复制代码
std::vector<DTensor>
    Graph::chunk(DTensor const &input, int chunk_size, int dim) {
  KNOperator *op = create_chunk_op(input, chunk_size, dim);
  assert(op != nullptr);
  operators.push_back(op);
  assert(op->output_tensors.size() > 0);
  return op->output_tensors;
}

创建chunk算子并加入算子库operators之后,并调用该算子运行得到结果

相关推荐
晓梦林25 分钟前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
Godspeed Zhao10 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
David猪大卫17 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger17 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.18 小时前
CTF2MISC中等部分
开发语言·前端·学习
YueTann20 小时前
mgtv5th-baseline学习
学习
蒸蒸yyyyzwd21 小时前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气21 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
路灯上の马陈1 天前
Java 内部类 学习笔记
笔记·学习
前进的李工1 天前
Agent 学习笔记 12:Agent 的工具应该怎么设计
人工智能·笔记·学习·agent·工具调用·skill·工具设计