当大语言模型遇上扩散模型(一、简要介绍)
总览
本系列文章对近期学习的大语言模型(LLM)和扩散模型(Diffusion Model)的相关内容进行简要总结,作为该系列文章的开篇,主要谈谈近期学习的感受和心得。
我的学习过程是从以下部分需求和痛点开始的:
- 大语言模型能否和文生图模型进行结合 ?要掌握哪些知识 ?
- 文生图需要提供大量的 prompts,推理过程耗时较长,这一流程能否被简化 ?能否更快速 ?能否大量生成不同风格的图片供我选择,激发我的灵感,获得更多视觉上的享受 ?🤣🤣🤣
- GPU 只有可怜的 8G VRAM,能否在保证效果的情况下运行 LLM 以及 Diffusion 模型 ? 或者在 CPU 上也能快速运行 ?
上面是对具体技术的简单探讨。但 更重要、更应该思考的问题是:在这个快速变化的领域,新思想、新知识、新应用层出不穷,令人目不暇接,那么作为像我这样一个柔弱的个体,如何能尽快跟上形势、跟上浪潮,不因科技的快速发展而被时代所抛弃? 作为一个和计算机经常打交道的工作者,我隐约觉得,随着像 OpenAI 的 GPT 系列大语言模型的快速发展,后续和计算机进行交互的方式将会被彻底改变,目前使用 C++、Python 等编程语言与计算机对话,未来也许只需用人类日常沟通的自然语言即可,技术门槛无限趋近于 0,倘若试用过如 ChatGPT、Cursor 等产品应该也有类似的体会。
科技的发展当然是美好的,它让人类整体的生活质量得到显著提升。但不可否认的是,具体到微观上的某个的个体,能否在科技浪潮中体会到幸福和快乐,却是未必的。就拿马车与汽车的例子来说,汽车的发展不是在一夜之间就将马车全部进行替换,而是有一个演进的过程,在这个过程中,马车夫们就面临一个选择,到底是继续依仗自己几十年积累的驭马经验在马车界纵横,还是积极拥抱新生的汽车行业、拥抱变化,提前考取个驾照🤣🤣🤣 ? 最近还在看《AIGC:智能创作时代》这本书,第三章开篇就是 “AIGC如何帮助企业各职能部门降本增效?”,那自己到底是 “本” 还是 “效” 呢?又到了思考 “To be or not to be” 的时刻。
另外针对需求和痛点,写了个简单的名为 ChatSD 的 project,放在了 Github: https://github.com/axzml/ChatSD, 后续会在写文章的时候简单介绍(夹带私货)🤣。
正文
内容较多,关键词如下:阅读的开源库、LangChain 提供的方法论、Prompt 太重要了、ChatSD 小项目的思路
最近这一个月,是我接收到信息密度最大、收获 insights 最多、追逐进展最为疯狂的一段时期。从 GPT-4、微软 Copilot、ChatGPT plugin、Midjourney v5 的震撼发布到近期的 Visual ChatGPT、HuggingGPT 以及 AutoGPT 的强势来袭, 我没想到知识的更迭速度可以如此之快,前一天还处在前沿的技术,第二天可能就变成需要了解和掌握的基础知识,否则可能跟不上当天的进展。另外也没想到有一天看技术报告和论文如《GPT-4 Technical Report》、《Sparks of Artificial General Intelligence: Early experiments with GPT-4》会感觉很兴奋… 没办法,实在太渴望了解这些技术的原理和实现细节,但 CloseAI 并没有公布任何实质性的内容,基本全程是在秀肌肉,好在有强大的开源社区,里面提供了丰富、管够的技术,让人去一探究竟。
为了解决我在 “总览” 一节中提到的痛点和需求,主要参考了如下开源库(注:由于公众号不支持外链跳转,文章中提到的库的链接我都放在 “资源汇总” 这一节):
visual-chatgpt、Hugging Face(transformers、diffusers)、LangChain、Stable Diffusion、ChatGLM-6B、clip-interrogator、prompt-generator、stanford_alpaca、alpaca.cpp、alpaca-lora、llama.cpp、pyllama、chatglm-6b-int4 …
等等库,其中加粗是进行过重点研究的。
一开始我的诉求很简单,由于 GPU 显存不大,跑大语言模型还是有些吃力,实际体验也不是很好,因此首先将目光转向 llama.cpp
这个库,发现 C++ 在性能上的优势非常明显。此外还执着于量化技术一段时间,看了 llama.cpp
以及 chatglm-6b-int4
中的 int4 量化实现,但随着 visual-chatgpt
的发布,我意识到自己有点跑偏了,太在意技术细节,挺浪费时间,好在这时候量化部分的实现也看明白了,因此迅速抛弃自己的执念,转而去看 visual-chatgpt
的原理,惊喜的重新发现 LangChain
这个库:
这是个非常有意思的库。目前在 Github 上有 26.7k 的点赞,足见其热度。虽然很早就知道这个库,但其主页几句功能介绍有点抽象,得跳转到其他几个项目了解它是干啥的,因此之前直接选择略过(哎,格局小了)… 而借着对 visual-chatgpt
的研究,我发现 LangChain
很强大。如果说一个智能体它的内核是 LLM 大语言模型的话,那么我认为 LangChain
就是它的骨架和血脉。简要画了下 LangChain 的流程示意图,只包含了部分重要概念:
用户提供指示,LangChain 将其转换为合适的 prompt 喂给 LLM,让 LLM 来决策使用哪些工具来解决用户的问题。比如我要查询最新的天气数据,ChatGPT 由于训练数据不是最新的,应该没法给出准确的结果,但是借助 Google Search,就可以搜寻到正确的结果并返回给我。又比如我想让 Agent 来生成某种风格的图片,非多模态的 LLM 模型是无法正确读取图片的,但是它可以首先调用 Image Caption 之类的工具生成对图片的描述,将图片风格用特定的词语描述出来,然后再调用 Stable Diffusion 模型去生成对应的图片。
可以发现,借助 LangChain 提供的功能,LLM 的能力得到了极大的扩展!最近很火的 visual-chatgpt 是建立在 LangChain + ChatGPT 之上,而 ChatGPT plugin、HuggingGPT(不太确定有没有用 LangChain)、AutoGPT 等项目虽然也许没有直接使用 LangChain,但 Agent、Memory、Index、Tool 这些概念还是包含的,因此理解了 LangChain,类似的项目都可以很快速的理解。
如果再进一步去思考 LangChain,先不赞叹它对各种概念做了非常非常棒的抽象,更重要的是,我觉得它提供了一种方法论(事物的底层逻辑 …),或者说 a roadmap,以指导我对大语言模型的学习。比如:
- 想学习 LLM 模型本身,可以去看 GPT、LLaMA、ChatGLM-6B 等等
- 想学习 Prompt,就去看 Prompt 工程相关的内容
- 想学习各种图像与文本工具,就可以看 Diffusion、CLIP、BLIP 等等内容
- 想让语言模型对自己的私有数据进行理解,那就去看 Index 相关的内容
- 想增强 LLM 对上下文的理解以及支持连续对话,那么就去加深对 Memory 的理解
这样进行学习,就不大容易迷路,因为只要有这样一个框架在,学习的任何东西都能塞进这个框架,也许在未来有一天能派上用场。
在阅读 visual-chatgpt
代码的过程中,发现它包含很长一段 prompt,由于一开始对 CoT(Chain of Thought)之类的概念并没有太多了解,所以未察觉这段 prompt 的价值,但是随着我对 LangChain 有更多的了解,突然悟了🤣🤣🤣:这段 prompt 甚至可以说是整个代码中最精华的部分之一!
为了更好的了解和掌握 LangChain,我开始尝试写 ChatSD,用来实现我在文章一开始谈到的需求。首先是对 LLM 模型的选择上,虽然我可以访问 ChatGPT,但是并没有申请 OpenAI key,导致无法调用 OpenAI 的 API,况且我也不打算调用 API,这不利于我对 LangChain 的掌握,因此决定对当前开源社区贡献的 LLM 模型进行选择,尝试了 Stanford Alpaca/Alpaca-Lora、LLaMA、Bloom、ChatGLM-6B 等等模型,发现 ChatGLM-6B 模型效果相对更好,因此 LLM 最后选择了 ChatGLM-6B。目前 ChatSD 初步可以实现根据用户的简单输入,生成多样化风格的图片。当然,这少不了 text2image-prompt-generator、Stable Diffusion、openjourney 等工具的帮助。代码在:https://github.com/axzml/ChatSD,项目主页如下(是不是有股浓浓山寨风🤣🤣🤣):
为了给项目产出一个 Logo,我使用 python main.py --input="logo of cat, cute, happy, smile"
得到如下风格各异的结果:
受限于我现有的资源,以及能投入的时间,先就这样了,后面可以慢慢优化(虽然这个项目不用 LLM 也能很快实现,但做这件事情的核心是掌握 LangChain … 所以对我还是有点价值的)。
最后再说个挺搞笑的事情,前段时间好像报道说数千科学工作者签名要求 AI 发展暂缓 6 个月,其中包括 Elon Musk,但最近新闻显示 Musk 偷偷购买了 1w 块高性能 GPU,创建人工智能公司 X.AI。Musk 应该是熟读《孙子兵法》的 [手动狗头]。
(资料来源:创业邦 公众号)
资源汇总
- 《GPT-4 Technical Report》: https://arxiv.org/abs/2303.08774
- 《Sparks of Artificial General Intelligence: Early experiments with GPT-4》:https://arxiv.org/abs/2303.12712
- visual-chatgpt: https://github.com/microsoft/visual-chatgpt
- Hugging Face: https://github.com/huggingface
- LangChain : https://github.com/hwchase17/langchain
- Stable Diffusion: https://github.com/CompVis/stable-diffusion
- ChatGLM-6B : https://github.com/THUDM/ChatGLM-6B
- clip-interrogator : https://github.com/pharmapsychotic/clip-interrogator
- text2image-prompt-generator: https://huggingface.co/succinctly/text2image-prompt-generator
- prompt-generator: https://huggingface.co/spaces/doevent/prompt-generator
- openjourney: https://huggingface.co/prompthero/openjourney
- stanford_alpaca: https://github.com/tatsu-lab/stanford_alpaca
- alpaca.cpp: https://github.com/antimatter15/alpaca.cpp
- alpaca-lora: https://github.com/tloen/alpaca-lora
- llama.cpp: https://github.com/ggerganov/llama.cpp
- pyllama: https://github.com/juncongmoo/pyllama
- chatglm-6b-int4: https://huggingface.co/THUDM/chatglm-6b-int4
- ChatSD:https://github.com/axzml/ChatSD