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之后,并调用该算子运行得到结果

相关推荐
charlie11451419126 分钟前
CSS学习笔记3:颜色、字体与文本属性基础
css·笔记·学习·教程·基础
wangqiaowq1 小时前
PAIMON+STARROCKS 学习
学习
phoenix09812 小时前
ELK企业级日志分析系统学习
学习·elk
奋斗的牛马2 小时前
FPGA—ZYNQ学习GPIO-EMIO,MIO,AXIGPIO(五)
单片机·嵌入式硬件·学习·fpga开发·信息与通信
ACGkaka_2 小时前
设计模式学习(十二)状态模式
学习·设计模式·状态模式
TheInk2 小时前
python学习笔记之Python基础教程(crossin全60课)
笔记·python·学习
qq_386322693 小时前
华为-AI智算网络学习-1
学习
武文斌773 小时前
PCB画板:电阻、电容、电感、二极管、三极管、mos管
单片机·嵌入式硬件·学习
charlie1145141914 小时前
CSS学习笔记6:定位与布局
前端·css·笔记·学习·css3·教程
自由日记4 小时前
css学习盒模型:
前端·css·学习