oneflow icon indicating copy to clipboard operation
oneflow copied to clipboard

Fused llama kernel

Open ofhwei opened this issue 1 year ago • 6 comments

llama模型并行推理优化,将每一层LlamaDecoderLayer 所有的cuda kernel放在一个大op里, 尽可能减少python层面指令发送的延迟。

ofhwei avatar May 15 '23 04:05 ofhwei

fast transformer 是这样做的吗?

llama 的 python 实现需要手工改动吗? 还是自动通过模式匹配实现的?

yuanms2 avatar May 16 '23 04:05 yuanms2

fast transformer 是这样做的吗?

fast transformer是纯c++实现,可以认为是一个专用实现,代码中实现了一个Llama类,编译生成一个可行性的二进制文件,运行时创建一个Llama实例,在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作,所以整个算子launch过程非常快。目前Llama还处于第三方pr状态,没有python实现。

fast transformer主仓库中比较成熟的实现如GPT,也是基本上是这个套路,其pytorch和tensorflow实现就是将c++端的class GptOp包装一下导出到python端。

llama 的 python 实现需要手工改动吗? 还是自动通过模式匹配实现的?

使用融合算子时需要手工改动代码。

clackhan avatar May 16 '23 04:05 clackhan

在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作

之前提到推理时有个动态 shape 的问题,它是取 max 去申请了内存么

strint avatar May 16 '23 07:05 strint

在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作

之前提到推理时有个动态 shape 的问题,它是取 max 去申请了内存么

是的,申请了最大所需内存

clackhan avatar May 16 '23 07:05 clackhan

在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作

ft 的kv_cache 按最大所需长度max_cache_seq_len分配显存 见 https://github.com/void-main/FasterTransformer/blob/main/src/fastertransformer/models/llama/Llama.cc#L102

ofhwei avatar May 16 '23 07:05 ofhwei

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.

github-actions[bot] avatar May 22 '23 14:05 github-actions[bot]