生成式AI 的爆发元年
一、AI导致的工作流变化
在最近这段时间内我们已经见证了AI在各行各业产生的巨大影响。在技术领域,AI工具已经成为一股不可忽视的力量,为程序员、数据分析师和设计师等技术人员提供了强大的辅助功能。
在编程方面,基于人工智能的代码补全工具如GitHub Copilot可以极大地帮助开发者提高编程效率。而在GPT4公布以后Copilot也发布了自己的升级版本即 GitHub Copilot X,它不仅继承了原有的代码补全功能,还围绕 AI 对话、Pull Request 提交处理、文档智能检索与阅读、命令行改造、代码审查和质量分析甚至是语音生成代码等功能进行了全方位的升级。
▲ 图1 GitHub Copilot X新功能[2]
上述工具需要付费或者加入waiting list等待才可以拿到体验资格,所以如果你想获得类似的智能工具体验也可以直接使用Cursor这样免费的IDE工具,据官方说这是一个基于gpt4接口开发的简易IDE(实际体验下来应该还是GPT3.5),能力同样足够强悍,它可以支持用GPT给你写代码,也可以支持围绕你的代码项目工程问任何问题,并进行改进。
▲ 图2 Cursor功能演示[3]
在数据分析领域,AI工具也发挥着重要作用。近期许多证券公司同样参与到了chatGPT这个热潮中,不管是直接借助OpenAI的API调用还是自研小型的GPT类模型,AI技术可以帮助分析师高效地总结和归纳研究报告。通过AI技术进行文本分析和自然语言处理,可以提高信息处理速度,减轻人力负担,从而为证券公司带来更多便利。在笔者深度体验chatGPT一段时间后,的确发现它的信息归纳总结能力非常出色,像目前就有许多利用chatGPT的能力对文献进行快速总结的工具比如chatPDF,你只需要上传一个PDF文件就可以基于此进行诸多提问。
▲ 图3 chatPDF功能演示[4]
在设计领域,AI工具同样大放异彩,不过那里的主角是扩散模型。例如,DALL-E这样的AI生成器,可以根据用户提供的文本描述,生成相应的图像;除此之外也有像Midjourney这样已经非常完善的产品;在开源社区,这里的生态也不亚于chatGPT,基于开源的Stable Diffusion模型以及各种插件和Lora小模型所形成的解决方案已经非常完善,设计师们完全可以基于AI辅助进行工作。而就在我写下这篇文章的时间点,基于扩散模型、Controlnet以及Segment-Anything[1]的开源工具已经出现了。
▲ 图4 Sample1-Edit Anything[5]
没什么感觉?再来一张感受一下:
▲ 图5 Sample2-Edit Anything[5]
总之,AI工具在技术领域的应用正变得越来越广泛和深入,它们已经对程序员、数据分析师和设计师等技术人员的工作流产生了重大影响。回想了一下最近我自己在工作上面的流程变化,首先是使用搜索引擎的频率大大降低,对于自己不熟悉的领域会优先使用chatGPT来进行提问学习,然后再实际验证准确性;编程方面虽然没有使用Github Copilot(基于安全以及隐私的考虑),但是我们私有化的代码智能补全工具同样可以提升我的编码效率,在扩散模型方面虽然我没有设计方面的需求,但是在开发IDE插件并发布到插件市场前,我使用它进行logo的生成,生成效果的确不赖。
▲ 图6 Acepilot logo由扩散模型生成
二、LLM模型实践
现在开源社区有许多类chatGPT的开源实现方案:
■ 骆驼(Luotuo): 开源中文大语言模型[8]
■ Vicuna: 号称能达到90% ChatGPT质量的开源模型[9]
■ Koala:经过在网络上收集的对话数据并基于Meta的LLaMA微调训练的模型 [10]
■ Baize:Baize是由Lora技术训练的开源模型[11]
这些开源方案中所使用的模型都集中在100亿参数量附近,对LLM来说这已经是非常轻量化的模型参数量了,但是即便训练这些轻量模型(包括使用Lora的方案)也需要耗费我们许多算力。在之前的文章中提到过,我们基于Codegen代码生成模型进行了实践,并且陆续开发了IDE插件供研发人员使用体验,最终形成了私有化部署的代码智能补全工具。后续随着工作的持续开展我们优化了模型的生成效果,模型的参数量也从27亿参数量提升到了60亿参数量,但是对模型进行调优和实际优化部署时都碰到了许多问题,因此光有模型并没有用,你需要有模型持续迭代优化的能力和资源,在模型部署上也需要有完善的模型加速手段。
1.模型训练
由于当时在进行代码智能补全工具的体验时许多前端的同事都觉得它在Vue上的补全效果并不理想,因此我们爬取了Github上40个优质的Vue项目并进行了数据上的预处理,因为计算资源有限,我们基于此数据首先在2.7Billion参数量的模型上进行了调优尝试。
▲ 图7 27亿参数量模型微调
这是一个失败的尝试,虽然微调过后的模型的确在Vue上的生成效果有了提升,但是在我们使用了自己收集和构建的多语言版本的HumanEval数据集进行测试发现,微调后的模型在其他语言上效果是有下降的,这并不符合我们的初衷。然后在测试原版的CodeGen 60亿参数量模型的效果时我们发现在Vue上它也比微调过后的27亿参数量模型更加优秀,至于其他语言就完全无需比较了。
但是这的确给我们优化LLM积累了一些经验和思考。首先是计算资源消耗方面,即使是27亿参数量的模型我们也至少需要两张32GB的V100显卡才能比较有效率地微调我们的模型,在使用分布式训练框架DeepSpeed 在不同的优化策略需要的显存和内存占用如下:
如果我们需要微调的是60亿参数量的模型,那至少需要4张32GB显存的V100显卡才能满足算力的需求。另外是模型训练的方式上我们还是采用了普通的微调方法,使用普通微调方法的好处是对数据的质量要求没有那么高,也不需要复杂的数据处理。如果我们收集足够多的数据并把数据处理成指令微调的形式进行训练那样会对模型的生成效果有一个比较大的提升。
2.模型部署
计算图优化:计算图是用于表示神经网络中各层之间连接关系的有向图。在模型部署阶段,计算图优化可以通过剪枝、融合和重排等操作减少计算量和内存占用。剪枝是指移除网络中不重要的权重或神经元,以减小模型的体积。融合是将多个操作合并为一个操作,以减少计算量。重排是调整计算图中操作的顺序,以减少内存访问和数据传输。通过这些优化手段,计算图优化可以在保持模型精度的同时,提高模型在不同硬件平台上的性能。
其他部署技术:除了模型量化和计算图优化外,还有其他一些技术可以提高模型部署效果。例如,模型压缩可以进一步减小模型体积,加快加载速度。还可以通过使用高性能的深度学习库(如TensorRT、OpenVINO等)来提高模型在特定硬件上的性能。
三、总结与思考
相信大多数人都已经感受到AI工具在各行各业产生了影响,作为技术人员我们需要不断地拥抱变化、学习新技能和方法,以充分利用AI所带来的好处。同时我们也需要认识到当前AI技术存在的局限性,即使是GPT4,在进行很长一段深度使用后我还是可以非常自信地说让它来代替程序员还太早了。总的来说:
1. 提高效率:AI类工具可以帮助技术人员更快地完成任务,如代码智能补全工具在提高编码效率方面。通过使用先进的AI算法,开发人员可以减少编码时间,提高生产力,这使得他们可以将更多的时间和精力投入到其他关键任务上,如设计架构、调试和优化上。
2. 创新与拓展:LLM的火爆给AI领域的从业人员提供了新的机会和挑战。例如,如何利用有限的计算资源尽可能高效地训练模型以及在模型部署技术、模型加速方面的持续探索,这可以推动整个领域内的技术创新。
3. 适应性与持续学习:随着AI技术的不断发展,技术人员需要不断适应并掌握新的工具和方法。这要求他们具备持续学习的能力,以便跟上行业的发展趋势。
4. 人工智能与人类协同:虽然AI工具在许多方面都有显著的优势,但在某些情况下,人类的专业知识和创造力仍然不可替代。因此,技术人员需要学会与AI工具协同工作,充分利用它们的优势,同时发挥自己的专业能力,共同实现更高质量和效率的工作成果。
参考文献
[1]GPT4
[2] Introducing GitHub Copilot X
[3] Cursor | Build Fast
[4] ChatPDF - Chat with any PDF!
[5] sail-sg/EditAnything: Edit anything in images powered by segment-anything, ControlNet, StableDiffusion, etc.
[6] MindSpore量化算法概述
[7] M. Shoeybi, M. Patwary, R. Puri, P. LeGresley, J. Casper, and B. Catan-
zaro, “Megatron-lm: Training multi-billion parameter language modelsusing model parallelism,” arXiv preprint arXiv:1909.08053, 2019.
[8] https://github.com/LC1332/Luotuo-Chinese-LLM
[9] https://github.com/lm-sys/FastChat
[10] https://bair.berkeley.edu/blog/2023/04/03/koala
[11] https://github.com/project-baize/baize-chatbot
本文转载自 AI遇见云,作者: 张宇博