生成性人工智能

用于高性能计算中代码开发的高级AI和检索增强生成

多模RAG工作流的装饰图像。

在快速发展的软件开发领域,聊天机器人和GitHub Copilot公司极大地改变了开发人员编写和管理代码的方式。这些工具基于大型语言模型(LLM),通过自动化常规编码任务来提高生产力。 

并行计算挑战

然而,使用LLM生成并行计算代码对于高性能计算(HPC)应用程序遇到了挑战。 并行计算应用程序需要对函数编程的逻辑和管理多个并发操作所涉及的复杂性(例如避免死锁和竞争条件)有细致的理解。传统的人工智能模型可以有效地生成串行代码,但由于这些额外的复杂性,并行结构会使其步履蹒跚。

NVIDIA在生成复杂代码方面也面临着类似的挑战,但在支持新加速计算半导体设计的背景下。解决此问题的相关工作非常重要,ChipNeMo芯片在2023年超级计算期间发布域自适应预培训(DAPT)和检索增强生成(RAG)技术成功地为工程师制作了EDA联合试验。DAPT与先进RAG技术的结合很好地解决了Sandia科学家面临的问题,并启动了以下合作。

一组科学家桑迪亚国家实验室开始了一个雄心勃勃的项目NVIDIA NeMo公司软件产品,例如早期访问nSolve-40K(嵌入模型),以解决这些挑战。他们为科科斯是一个C++库,它为您提供了编写性能可移植应用程序的工具。它抽象了硬件复杂性,并使代码能够在不同类型的HPC体系结构上高效运行。

为此类特定任务创建AI模型通常需要使用特定领域的知识对基础模型进行微调,这是一个资源密集且耗时的过程。为了保持软件更新和错误修复的敏捷性,HPC开发人员通常喜欢更灵活的方法。 

该助手旨在利用AI的最新进展,为您提供准确的上下文软件代码建议,从而为您提供支持。

实施高级RAG

Sandia正在与NVIDIA合作开发一种先进的RAG方法,以实现模块化工作流程,该工作流程可适应正在进行的数据集更改,并在最先进的模型发布后立即将其与HPC工作负载集成。

根据 Robert Hoekstra,博士,桑迪亚极限规模计算高级经理,o个包括Sandia在内的多个行业的组织正在利用NVIDIA生成性AI挖掘有价值的见解,实现企业数据的语义搜索。Sandia和NVIDIA正在合作评估新兴的生成性人工智能工具,以最大限度地提高数据洞察力,同时提高准确性和性能。

通过编译使用科科斯Sandia的科学家创建了一个动态且不断更新的数据集。使用递归文本拆分器进行C编程,可以将数据集组织为可管理的块。然后,这些数据集块被转换为向量嵌入并存储在数据库中,从而产生比微调更少的资源密集型过程。

当进行查询时,它被转换为一个向量,该向量根据余弦相似性从数据库中检索相关代码块。然后,这些块用于提供生成响应的上下文,创建包含真实世界编码模式和解决方案的丰富、知情的输出。

流程图从用户查询开始,展开后包含LLM用户历史的上下文。重写了五个类似的查询来查询LLM。所有查询都被输入到嵌入模型中,该模型将返回每个查询的前k个文档。自定义数据被分块并馈送到嵌入模型,该模型生成浮点向量。浮点向量存储为向量存储嵌入并确定语义相似度。根据查询重新对输出进行分类,并检索前6个文档。此相关文本是LLM的上下文,以及最终输出的重写查询。
图1。用户查询的RAG技术

RAG评估

在Sandia对naive RAG的初步评估中,使用了各种指标,包括BLEU、ChrF、METEOR和ROUGE-L,以根据Sandia Kokkos开发人员提供的标准基准评估生成代码的有效性。令人鼓舞的是,初步结果显示,随着RAG方法的实施,标度平均值评估增加了3-4个百分点。 

标度平均值=[100(BLEU+RougeL+CodeBLEU+METEOR)+ChrF]\slash5

嵌入模型有限责任经理
BGE–大型–EN–V 1.5MISTRAL–7B–说明–V0.2
E5–底座–V2。MIXTRAL–8X7V–说明–V 0.1
NVolve40K解决方案WIZARDCODER–15B–V1.0版
阿联酋–大型–V1MAGICOD ER–S–DS–6.7 B。
表1。测试嵌入模型和开源LLM
模型OSS标度平均值RAG标度平均值
mistalai-MIstral-7B-指令-v0.218.7522.59
mistalai-Mixtral-8x7B-仪器-v0.123.6823.85
向导LM_WizardCoder-15B-V1.025.0128.61
ise-uiuc_MagicCoder-S-DS-6.7B25.9028.96
表2。对开源软件(OSS)嵌入模型和LLM进行基准测试

模块化HPC工作流的RAG结果

通过一个幼稚的RAG管道实现,性能得到了微小的改进。Mixtral模型(MoE架构)没有受到附加的Kokkos上下文的显著影响。 

没有找到更好的嵌入模型。相反,嵌入模型和LLM的特定配对提供了最佳结果。

用于多查询检索的RAG

Sandia团队还试验了先进的RAG技术,以改进如何检索相关内容。 

其中一种技术涉及生成多个相关查询,以扩大对适用代码段的搜索,特别是当用户查询模糊或缺少特定细节时。该方法提高了检索更相关上下文的可能性,提高了生成代码的准确性和实用性。

该图表将Naive RAG c1024_o256与多个MultiQueryRetriever进行了比较-MQ_c1024_o256块大小1024,块重叠256'MQ_c500_o100块大小500,块重叠100;和MQ_c300_050块大小300和块重叠50。比较指标BLEU、ChrF、CodeBLEU,METEOR、ROUGE-L和标度平均值。与其他检索方法相比,中等大小的代码片段MQ_c500_o100在提高准确性和实用性方面得分最高(几个百分点)。 
图2。将多查询检索应用于中型代码示例

下面的示例显示了一个查询以及由多查询检索器创建的生成的查询。

提示:创建尺寸为10 x 3的双打Kokkos视图生成的查询:1.如何创建10 x 3号双打的Kokkos视图?2.如何创建大小为10 x 3的double的Kokkos视图,并用随机值初始化它?3.如何创建一个大小为10 x 3的double的Kokkos视图,并使用文件中的值对其进行初始化?

数据集上下文丰富

Sandia研究人员也在探索父文档检索方法。在这种方法中,数据被分割为提供一般上下文的大型父块和专注于特定细节的较小子块。 

该策略有助于平衡特定性需求和上下文广度,优化检索信息的相关性和全面性。

该图表将原始RAG c1024_o256与ParentDocumentRetrievers PD_parent-c1000_o200_child-c300-o0进行了比较,父块大小为1000父块重叠200子块大小为300子重叠0;PD_parent-c500_o100_child-c200-o0具有父块大小500父块重叠100子块大小200子重叠0;和PD_parent-c300_o75_child-c150-o0,父块大小300父块重叠75子块大小150子块重叠0。比较指标BLEU、ChrF、CodeBLEU,METEOR、ROUGE-L和标度均值。将数据集分割为父数据块和子数据块(尤其是最小的数据块)的上下文丰富方法在Kokkos上取得了最显著的改进。
图3。将数据集拆分为父数据块和子数据块 

下面的提示示例显示了用于搜索数据库的子块和父块。

提示:创建尺寸为10 x 3的双打Kokkos视图儿童区块://创建Kokkos::视图X_lcl。const size_t numLclRows=10;const size_t numVecs=3;类型名dual_view_type::t_dev X_lcl(“X_lc1”,numLclRows,numVecs);父区块://创建Kokkos::View X_lcl。const size_t numLclRows=10;const size_t numVecs=3;类型名dual_view_type::t_dev X_lcl(“X_lc1”,numLclRows,numVecs);//修改Kokkos::View的数据。Kokkos::deep_copy(X_lcl,ONE);{lclSuccess=成功?1 : 0;gblSuccess=0;//输出参数reduceAll<int,int>(*comm,REDUCE_MIN,lclSuccess,outArg(gblSuccessment));TEST_EQUALITY_CONST(gblSuccess,1);if(gblSuccess!=1){回报;}std::ostringstream操作系统;os<<“Proc”<<comm->getRank()<<“:checkpoint 1”<<std::endl;标准::cerr<<os.str();}

用于HPC结果的高级AI

Sandia团队的初始评估使用了标准的NLP指标,如BLEU(双语评估替补)和ROUGE(回忆导向替补)。 

然而,他们认识到需要一个更适合代码生成的更量身定制的评估指标,尤其是一个可以评估生成代码的语法准确性和操作效率而不依赖传统输出比较的指标。

增强未来的代码功能

随着桑迪亚的科学家们完善他们的检索方法和人工智能模型,他们预计编码助手不仅能生成功能准确的代码建议,还能生成与上下文相关的代码建议。未来的发展将侧重于微调基本模型,类似于NVIDIA工程师对ChipNemo的操作,并优化检索过程,以及在可用时集成更先进的LLM和嵌入技术。

用于HPC代码开发的AI

将人工智能集成到代码开发中,特别是在高性能计算范围内,代表着生产力和效率的重大飞跃。概念验证适用于内部的一些产品NVIDIA NeMo公司Sandia站在了这一变革的前沿,推动了人工智能在复杂计算环境中的发展。通过不断调整和改进他们的人工智能模型和方法,Sandia旨在为您提供强大的工具,增强您的创新能力和解决复杂问题的能力。

这项先进的RAG计划展示了人工智能在软件开发中的潜力,并强调了目标解决方案在技术进步中的重要性。

在Sandia,他们正在评估内部和外部云解决方案,以托管这些复杂的AI模型,这需要大量的GPU资源。选择取决于合适硬件的可用性和Sandia团队的使用规模。与NVIDIA等供应商合作可以提供宝贵的支持,尤其是在将其容器系统与Sandia现有基础设施集成方面。

更多信息

有关更多信息,请参阅以下资源:

ChipNeMo:芯片设计领域自适应LLM:包括如何使用RAG创建芯片设计的EDA脚本的解释,以及创建并行代码的RAG模型的一些类似特征。

讨论(1)

标签