生成式AI 的爆发元年

发布于 2024-6-21 17:09
浏览
0收藏
2023年4月,距离chatGPT的正式发布已经过去了四个多月,距离New Bing的发布过去了两个月,而GPT4同样也已经发布了一个月,各式各样围绕chatGPT或者说LLM模型的生态、社区、工作不断涌现,对Github Trending榜单一直关注的人可能早就注意到,围绕chatGPT的各种包装库以及各种开源模型工作持续地在霸占榜单,这属实罕见。在接下来的篇幅中,我们将以一个程序员的视角探讨当下生成式AI类工具对技术人员工作流的改变,以及作为算法工程师,在对LLM模型进行实践时碰到的一系列问题。最后,我们也会关注这些工具所面临的挑战和限制,以及未来的发展方向。我们希望通过本文,为技术和产品人员提供有益的洞见,帮助大家更好地利用这些工具。

一、AI导致的工作流变化 

在最近这段时间内我们已经见证了AI在各行各业产生的巨大影响。在技术领域,AI工具已经成为一股不可忽视的力量,为程序员、数据分析师和设计师等技术人员提供了强大的辅助功能。

在编程方面,基于人工智能的代码补全工具如GitHub Copilot可以极大地帮助开发者提高编程效率。而在GPT4公布以后Copilot也发布了自己的升级版本即 GitHub Copilot X,它不仅继承了原有的代码补全功能,还围绕 AI 对话、Pull Request 提交处理、文档智能检索与阅读、命令行改造、代码审查和质量分析甚至是语音生成代码等功能进行了全方位的升级。

生成式AI 的爆发元年-AI.x社区

▲ 图1 GitHub Copilot X新功能[2]

上述工具需要付费或者加入waiting list等待才可以拿到体验资格,所以如果你想获得类似的智能工具体验也可以直接使用Cursor这样免费的IDE工具,据官方说这是一个基于gpt4接口开发的简易IDE(实际体验下来应该还是GPT3.5),能力同样足够强悍,它可以支持用GPT给你写代码,也可以支持围绕你的代码项目工程问任何问题,并进行改进。

生成式AI 的爆发元年-AI.x社区

▲ 图2 Cursor功能演示[3]

在数据分析领域,AI工具也发挥着重要作用。近期许多证券公司同样参与到了chatGPT这个热潮中,不管是直接借助OpenAI的API调用还是自研小型的GPT类模型,AI技术可以帮助分析师高效地总结和归纳研究报告。通过AI技术进行文本分析和自然语言处理,可以提高信息处理速度,减轻人力负担,从而为证券公司带来更多便利。在笔者深度体验chatGPT一段时间后,的确发现它的信息归纳总结能力非常出色,像目前就有许多利用chatGPT的能力对文献进行快速总结的工具比如chatPDF,你只需要上传一个PDF文件就可以基于此进行诸多提问。

生成式AI 的爆发元年-AI.x社区

▲ 图3 chatPDF功能演示[4]

在设计领域,AI工具同样大放异彩,不过那里的主角是扩散模型。例如,DALL-E这样的AI生成器,可以根据用户提供的文本描述,生成相应的图像;除此之外也有像Midjourney这样已经非常完善的产品;在开源社区,这里的生态也不亚于chatGPT,基于开源的Stable Diffusion模型以及各种插件和Lora小模型所形成的解决方案已经非常完善,设计师们完全可以基于AI辅助进行工作。而就在我写下这篇文章的时间点,基于扩散模型、Controlnet以及Segment-Anything[1]的开源工具已经出现了。

生成式AI 的爆发元年-AI.x社区

▲ 图4 Sample1-Edit Anything[5]

没什么感觉?再来一张感受一下:

生成式AI 的爆发元年-AI.x社区

▲ 图5 Sample2-Edit Anything[5]

总之,AI工具在技术领域的应用正变得越来越广泛和深入,它们已经对程序员、数据分析师和设计师等技术人员的工作流产生了重大影响。回想了一下最近我自己在工作上面的流程变化,首先是使用搜索引擎的频率大大降低,对于自己不熟悉的领域会优先使用chatGPT来进行提问学习,然后再实际验证准确性;编程方面虽然没有使用Github Copilot(基于安全以及隐私的考虑),但是我们私有化的代码智能补全工具同样可以提升我的编码效率,在扩散模型方面虽然我没有设计方面的需求,但是在开发IDE插件并发布到插件市场前,我使用它进行logo的生成,生成效果的确不赖。

生成式AI 的爆发元年-AI.x社区

▲ 图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参数量的模型上进行了调优尝试。

生成式AI 的爆发元年-AI.x社区

▲ 图7 27亿参数量模型微调

这是一个失败的尝试,虽然微调过后的模型的确在Vue上的生成效果有了提升,但是在我们使用了自己收集和构建的多语言版本的HumanEval数据集进行测试发现,微调后的模型在其他语言上效果是有下降的,这并不符合我们的初衷。然后在测试原版的CodeGen 60亿参数量模型的效果时我们发现在Vue上它也比微调过后的27亿参数量模型更加优秀,至于其他语言就完全无需比较了。

但是这的确给我们优化LLM积累了一些经验和思考。首先是计算资源消耗方面,即使是27亿参数量的模型我们也至少需要两张32GB的V100显卡才能比较有效率地微调我们的模型,在使用分布式训练框架DeepSpeed 在不同的优化策略需要的显存和内存占用如下:

生成式AI 的爆发元年-AI.x社区

如果我们需要微调的是60亿参数量的模型,那至少需要4张32GB显存的V100显卡才能满足算力的需求。另外是模型训练的方式上我们还是采用了普通的微调方法,使用普通微调方法的好处是对数据的质量要求没有那么高,也不需要复杂的数据处理。如果我们收集足够多的数据并把数据处理成指令微调的形式进行训练那样会对模型的生成效果有一个比较大的提升。

2.模型部署

模型的部署至关重要,针对LLM的模型加速手段必不可少,有许多模型加速技术可以帮助优化模型的性能,例如模型量化、计算图优化等。
模型量化:模型量化是将模型中的权重和激活值从浮点数表示转换为低位宽度整数表示(例如8位或16位整数)的过程。这可以显著减小模型的体积和内存占用,同时提高计算速度。量化后的模型可以在资源受限的设备(如移动设备和嵌入式系统)上运行,同时保持较高的性能。通常,模型量化会牺牲一定的精度,但在大多数情况下,这种损失是可以接受的。

生成式AI 的爆发元年-AI.x社区

▲ 图8 模型量化技术[6]

计算图优化:计算图是用于表示神经网络中各层之间连接关系的有向图。在模型部署阶段,计算图优化可以通过剪枝、融合和重排等操作减少计算量和内存占用。剪枝是指移除网络中不重要的权重或神经元,以减小模型的体积。融合是将多个操作合并为一个操作,以减少计算量。重排是调整计算图中操作的顺序,以减少内存访问和数据传输。通过这些优化手段,计算图优化可以在保持模型精度的同时,提高模型在不同硬件平台上的性能。

其他部署技术:除了模型量化和计算图优化外,还有其他一些技术可以提高模型部署效果。例如,模型压缩可以进一步减小模型体积,加快加载速度。还可以通过使用高性能的深度学习库(如TensorRT、OpenVINO等)来提高模型在特定硬件上的性能。

然而仅使用上述的优化手段已经满足不了我们的性能需求了,因此我们不得不使用更重量级的方法来加速模型的推理,那就是张量并行。

生成式AI 的爆发元年-AI.x社区

▲ 图9 张量并行技术[7]
张量并行是一种用于加速深度学习模型推理的重量级方法,它通过在多个计算设备(如GPU)上同时执行模型中的不同部分来实现。在张量并行中,模型的权重和计算过程被拆分为多个独立的部分,每个部分在单独的计算设备上运行。这使得大型模型可以在有限的硬件资源下进行高效计算。张量并行的主要优势在于其扩展性。通过增加计算设备的数量,我们可以实现更大规模模型的快速推理。此外,由于各个设备上执行的操作更小,计算和通信的开销也相应降低。然而,实现张量并行需要在算法和硬件层面进行优化,以确保各个设备之间的负载均衡和通信效率,实现张量并行有一些关键考虑因素:
1. 模型划分:模型的权重和计算过程需要在多个计算设备上进行合理划分。这通常涉及将模型的层或子网络分配给不同的设备。为了确保负载均衡,应当使每个设备承担相近的计算量。
2. 通信优化:在张量并行中,设备之间需要进行通信以交换中间计算结果。为了提高通信效率,可以采用高效的通信库(如NVIDIA NCCL)和优化的通信拓扑结构。此外,可以通过梯度累积、梯度稀疏化等技术减少通信量。
3. 同步与异步执行:在并行计算过程中,设备间的同步与异步执行需要权衡。同步执行可以保证模型的一致性,但可能导致设备之间的等待时间。异步执行可以减少等待时间,提高设备利用率,但可能导致模型不稳定。合理选择同步和异步策略对于实现高性能张量并行至关重要。总之我们在使用了上述所有的模型加速手段后驱动一个60亿参数量的模型还是需要4张T4推理卡的算力,下面是推理时延和所需要的算力表示:

生成式AI 的爆发元年-AI.x社区

▲ 图10 推理时延与算力需求

三、总结与思考

相信大多数人都已经感受到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遇见云​,作者: 张宇博


收藏
回复
举报
回复
相关推荐