从 LLM 火爆以来,社区已经出现了非常多优秀的模型,当然他们最大的特点就是体积大。最近为了让大模型可以在更低端的设备上运行,社区做了非常多的工作, gptq 实现了将模型进行低比特量化,因此降低了运行大模型对 CPU 内存、GPU 显存的要求,llama.cpp 实现了在本地 CPU/GPU 上就可以运行大模型,并且步骤非常简单,replit-code-v1-3b 用更小的模型实现了更智能的 code 生成。可以看到模型的小型化和轻量部署也是一个大模型的发展方向。
鉴于此,MegEngine 团队开发了 InferLLM 工程,主要目的有两个:
提供一个比 llama.cpp 更简单、更容易上手的本地部署框架,供大家学习和讨论
让 LLM 模型在本地或者端上部署成为可能,未来可以用在一些实际的生产环境中
相比 llama.cpp 工程,InferLLM 结构更简单,对一些通用组件进行了重构,避免将所有逻辑代码和 Kernel 代码放在一个文件中,避免在 Kernel 中引入过多的宏影响代码阅读和开发,llama.cpp 对于学习和二次开发不是很友好,InferLLM 也是主要借鉴 llama.cpp,如:使用 llama.cpp 的模型格式,以及 copy 了一些计算的 code,同时 InferLLM 对其进行了重构,使得代码更简单直接,非常容易上手,框架代码和 Kernel 代码分开,其实在大模型推理中,真正需要优化的 Kernel 是远远小于 CNN 的 Kernel 的。
另外 InferLLM 也可以用在生产中,因为它可以将 LLM 量化的模型在一个性能一般的手机上流畅的运行,可以流畅的进行人机对话