Efficient Code Search with Nvidia DGX
基于 Nvidia DGX 的高效代码搜索方案
Related Resources Generative AI
亮点:Qodo 利用 NVIDIA DGX 创新高效代码搜索
2025年4月23日 By Amit Bleiweiss, Dana Elifaz and Tal Sheffer
+6 Like Discuss (0)
Large language models (LLMs) 已经赋能了 AI 工具,可以帮助你更快地编写更多代码。但是,当我们要求这些工具承担越来越复杂的任务时,一些局限性就会变得明显。诸如理解编程语言的细微差别、复杂的依赖关系以及适应特定代码库上下文等挑战会导致代码质量降低,并在后续过程中造成瓶颈。
Qodo,是 NVIDIA Inception program 的成员,是一个多代理代码完整性平台,它使用 AI 驱动的代理来增强和自动化软件质量工作流程,包括代码编写、测试和审查。
Qodo 愿景的核心原则是相信只有当 AI 具有深刻的上下文感知能力时,才能在软件完整性方面实现有意义的改进。代码不是孤立编写的,它存在于复杂的架构、不断演变的依赖关系和特定的编码标准中。为了使 AI 有效地协助开发人员,它必须理解的不仅是语法,还包括代码库的意图、模式和更广泛的结构。
Qodo 通过基于高级 retrieval-augmented generation (RAG)、索引和分析构建其 AI 代理来实现这一目标,所有这些都由最先进的 (SOTA) 代码嵌入模型提供支持。这种特殊的代码嵌入模型——在 NVIDIA DGX 上训练——使 AI 能够更有效地理解和分析代码,并检索高度相关的上下文,以确保 LLM 可以生成准确的代码建议、可靠的测试和富有洞察力的代码审查。
对代码专用流程的需求
大型复杂代码库在不断变化,并且上下文索引是一个持续的过程。
Qodo 构建了一个强大的流程,用于持续维护新鲜的索引,以确保代码和测试生成始终基于存储库的最新状态。此流程包括从代码库检索文件、将检索到的文件分块为段,以及将自然语言描述添加到嵌入,以使 AI 更容易理解上下文。
代码专用 RAG 流程的一个挑战是将大型代码文件分块为有意义的段。对于自然语言文本来说,分块相对简单——段落和句子为创建语义上有意义的段提供了明显的边界点。
然而,naive 的分块方法难以准确地划分代码中有意义的段,从而导致边界定义问题以及包含不相关或不完整的信息。向 LLM 提供无效或不完整的代码段实际上可能会损害性能并增加幻觉,而不是提供帮助。
Qodo 使用特定于语言的静态分析来实现分块,以递归方式将节点划分为更小的块,并执行追溯处理以重新添加任何已删除的关键上下文。这种方法可以创建尊重代码结构的块,并将相关元素放在一起。
另一个关键挑战是嵌入。对于许多现有的嵌入模型来说,很难根据自然语言查询准确地检索相关的代码示例。许多通用嵌入模型(例如 E5)侧重于语言模式,而不是特定于代码的元素,例如语法、变量依赖关系、控制流和 API 用法。这会导致不相关或不精确的搜索结果和代码检索,但相关性和精确性对于启用 AI 编码代理至关重要。
图 1. Qodo 的代码专用摄取流程
用于代码的嵌入模型
在 retrieval-augmented generation (RAG) 系统中,embedding models 通过将文本转换为捕获语义意义的高维向量来发挥关键作用。这些嵌入存储在 vector database 中,并支持高效的相似性搜索,使系统能够在响应用户查询时从知识库中检索最相关的信息。
图 2. 用于相似性匹配的嵌入过程的通用模型
对于特定于代码的任务,使用在编程语言和软件文档上训练的嵌入模型尤其具有战略意义。这种模型可以更好地理解代码语法、函数名称和技术术语的细微差别,从而更准确地检索相关的代码片段或文档。
这种专门的嵌入模型可以显着提高 RAG 系统在软件开发环境中的性能,有助于改进代码补全、错误检测和技术文档的生成。
图 3. 从存储库到生成数据集的 Qodo 流程
与 LLM 相比,嵌入模型要小得多,因此可以更有效地分布在多个 GPU 上。这可以更好地利用硬件资源并可能缩短训练时间。因此,它们更适合数据并行分布式训练,其中整个模型在每个 GPU 工作器上复制,并且数据批次在多个 GPU 之间拆分。
Qodo 使用 NVIDIA DGX 8x A100 80GB 节点训练了他们的嵌入模型。以 bfloat16 数字精度进行训练使他们能够使用 256 的大微批次大小,从而加快收敛速度和训练时间。这对于使用对比损失的嵌入模型非常重要,尤其是在依赖批内负例时。
较大的批次大小使模型能够对更多样化的负例集进行采样,这对于有效的学习至关重要。这种多样性有助于模型更好地区分相似和不相似的实例,从而提高表示质量。
Qodo 根据 Qwen(由阿里云开发的开源 LLM,旨在执行各种 AI 任务)微调了两个嵌入模型,Qodo-Embed-1-1.5B 和 Qodo-Embed-1-7B。他们实现了 SOTA 精度,在各自规模类别中领先于 Hugging Face MTEB::CoIR 排行榜(图 4)。
NDGC 是一种用于评估信息检索质量的特定指标。
图 4. Qodo 嵌入模型比较
案例研究:内部代码搜索
NVIDIA 和 Qodo 最近的一次合作通过一个真实的用例展示了 Qodo 解决方案的价值。这项工作侧重于提高 NVIDIA 内部 RAG 解决方案 (Genie) 的准确性,以搜索私有代码存储库。最终目标是在 NVIDIA 的内部代码存储库上执行基于 LLM 的查询,以生成准确和精确的响应。
为了实现这一目标,我们将 Genie 项目流程中现有的行业标准组件替换为 Qodo 的专用替代方案,从而提高了系统挖掘 NVIDIA 内部代码存储库的能力,并产生了卓越的结果。
以下 Qodo 组件已集成到流程中:
- 用于 GitLab 和 GitHub 的代码索引器
- 代码 RAG 检索器
- 嵌入模型 (Qodo-Embed-1-7B)
如前所述,构建特定于代码的 RAG 解决方案的挑战之一是分块。大型代码文件应在自然停止点处拆分,以确保文本块的大小针对处理和存储进行优化。否则,当关键相关代码段超出上下文时,检索过程将失败。
图 5. 用于案例研究的特定于代码的 RAG 流程
最终的流程已集成到 NVIDIA 的内部 Slack 系统中,允许专业的 C++ 开发人员根据感兴趣的存储库提出详细的技术问题,并获得可靠的响应。
图 6 和图 7 分别显示了每个流程的示例输出,即原始流程和与 Qodo 合作构建的流程。图 6 中突出显示的矩形显示原始流程无法使用特定的数据点进行响应。
图 6. 使用 Slack 的 NVIDIA Genie 特定于代码的 RAG 系统的示例输出
图 7 显示了更详细的结果。
图 7. 使用 Slack 的 Qodo 特定于代码的 RAG 系统的示例输出
对于测试,我们使用了以下常见的图形公共 SDK:
我们使用 Ragas 基于这些数据集生成合成问题,并比较哪些响应更正确且具有技术细节。三行对中的每一对对应于列表中 SDK 存储库之一。每列代表问题的细分,其中每个单元格中的值包括基于忠实性和答案相关性的正确响应数。每行中的最后一个单元格显示正确响应的总数。
图 7. 内部 RAG (NVIDIA Genie) 与基于 Qodo 的 RAG 流程的比较
结论
你可以在 Hugging Face 上试用 Qodo 的嵌入模型,Qodo-Embed-1-1.5B 和 Qodo-Embed-1-7B。
想要加速其工作的初创公司应探索通过 NVIDIA Inception program 提供的免费权益。
有关更多信息,请参阅以下资源:
- State-of-the-Art Code Retrieval With Efficient Code Embedding Models
- Qodo Code Embedding
- NVIDIA generative AI technologies
- NVIDIA NeMo
- Llama Embedding recipe
- NVIDIA NIM LLM microservices
相关资源
- GTC session: Get hard to find GPUs at lower costs through NVIDIA DGX Cloud and Lighting AI Studio (Presented by Lightning AI)
- GTC session: AI-Driven Code Evolution: Unlocking Next-Level Performance
- GTC session: Building World Models in the Era of Generative AI
- SDK: DRIVE OS
- SDK: AMGX
- Webinar: Bringing Drugs to Clinics Faster with NVIDIA Computing
Discuss (0) +6 Like
Tags
Generative AI | Cloud Services | General | Beginner Technical | Code / Software Generation | LLMs | Retrieval Augmented Generation (RAG)
关于作者
关于 Amit Bleiweiss Amit Bleiweiss 是 NVIDIA 的高级数据科学家,专注于大型语言模型和生成式 AI。 他在应用机器学习和深度学习方面拥有 25 年的经验,在该领域拥有 50 多项专利和出版物。 Amit 获得了耶路撒冷希伯来大学的理学硕士学位,专门研究机器学习。
关于 Dana Elifaz Dana Elifaz 是一位软件和图形工具开发方面的实干领导者,拥有超过二十年的软件工具创新经验。 作为低级分析工具 Nsight Graphics—GPU Trace 的创始人,她一直处于图形性能分析的最前沿。 她现在专注于开发内部图形工具,同时领导将 AI 集成到组织工具集中的工作,从而塑造下一代智能性能解决方案。
关于 Tal Sheffer Tal Sheffer 是一位研究工程师和数据科学家,专门从事自然语言处理 (NLP)、机器学习和计算机视觉。 他目前在 Qodo 领导尖端生成式 AI 和大型语言模型解决方案的开发,从而推动各种 AI 应用的创新。 此前,他曾在亚马逊担任应用科学家,在那里他开发了复杂的计算机视觉算法,并在 SeeTree 担任数据科学团队负责人,领导 AI 驱动的农业领域解决方案。 Tal 强大的技术专长以坚实的学术基础为基础,拥有本古里安内盖夫大学的计算机工程理学硕士和理学士学位(优异成绩)。
评论
在 forums.developer.nvidia.com 开始讨论
相关帖子
使用 NVIDIA Agent Intelligence Toolkit 改进 AI 代码生成
使用 NVIDIA Agent Intelligence Toolkit 改进 AI 代码生成
使用 NVIDIA TensorRT-LLM Lookahead Decoding 优化 Qwen2.5-Coder 吞吐量
使用 NVIDIA TensorRT-LLM Lookahead Decoding 优化 Qwen2.5-Coder 吞吐量
微调小型语言模型以优化代码审查准确性
使用 StarCoder2 释放你的 LLM 编码潜力
使用 NVIDIA TensorRT-LLM 和 NVIDIA Triton 部署 AI 编码助手
使用 NVIDIA TensorRT-LLM 和 NVIDIA Triton 部署 AI 编码助手
相关帖子
NVIDIA cuPyNumeric 25.03 现已完全开源,支持 PIP 和 HDF5
NVIDIA cuPyNumeric 25.03 现已完全开源,支持 PIP 和 HDF5
使用 NVIDIA NeMo 微服务增强你的 AI 代理和数据飞轮
使用 NVIDIA NeMo 微服务增强你的 AI 代理和数据飞轮
使用 NVIDIA TensorRT 优化基于 Transformer 的扩散模型以生成视频
使用 NVIDIA TensorRT 优化基于 Transformer 的扩散模型以生成视频
Grandmaster 专家提示:使用 NVIDIA cuDF-pandas 通过特征工程在 Kaggle 竞赛中赢得第一名
Grandmaster 专家提示:使用 NVIDIA cuDF-pandas 通过特征工程在 Kaggle 竞赛中赢得第一名
![](https://developer-blogs.nvidia.c