oneflow
oneflow copied to clipboard
Fused llama kernel
llama模型并行推理优化,将每一层LlamaDecoderLayer 所有的cuda kernel放在一个大op里, 尽可能减少python层面指令发送的延迟。
fast transformer 是这样做的吗?
llama 的 python 实现需要手工改动吗? 还是自动通过模式匹配实现的?
fast transformer 是这样做的吗?
fast transformer是纯c++实现,可以认为是一个专用实现,代码中实现了一个Llama
类,编译生成一个可行性的二进制文件,运行时创建一个Llama实例,在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作,所以整个算子launch过程非常快。目前Llama
还处于第三方pr状态,没有python实现。
fast transformer主仓库中比较成熟的实现如GPT,也是基本上是这个套路,其pytorch和tensorflow实现就是将c++端的class GptOp
包装一下导出到python端。
llama 的 python 实现需要手工改动吗? 还是自动通过模式匹配实现的?
使用融合算子时需要手工改动代码。
在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作
之前提到推理时有个动态 shape 的问题,它是取 max 去申请了内存么
在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作
之前提到推理时有个动态 shape 的问题,它是取 max 去申请了内存么
是的,申请了最大所需内存
在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作
ft 的kv_cache 按最大所需长度max_cache_seq_len分配显存 见 https://github.com/void-main/FasterTransformer/blob/main/src/fastertransformer/models/llama/Llama.cc#L102
Code got formatted by CI. Please request CI again if you still want to have this PR merged. If the PR is from a forked repo, please download the patch files from the GitHub Actions web page and apply them locally.