Google AI加速代码迁移

news2024/9/20 21:46:32

  每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

生成式AI驱动的工作流程使Google能够更快地迁移代码并更有效地维护代码库

过去几十年,源代码库的规模呈指数级增长。Google的monorepo(单一代码库)就是一个包含数十亿行代码的大型代码数据集的例子。为了适应新的语言版本、框架更新、API和数据类型的变化,对整个庞大代码库进行代码变更(称为“迁移”)的工作极其具有挑战性。

多年来,Google一直使用特殊的基础设施进行大规模的代码迁移。该基础设施利用静态分析和工具如Kythe和Code Search来发现需要更改的位置及其依赖关系,然后使用ClangMR等工具进行更改。

这种方法在结构统一、边缘情况有限的代码变更中效果良好。然而,当迁移具有复杂结构的代码时,例如更改接口及其在多个组件中的使用或更新其测试时,静态分析和简单的迁移脚本会遇到限制。

Google内部介绍了一种新工具,结合了多项AI驱动的任务,帮助Google开发人员进行大规模代码迁移。其目标是辅助工程师,让他们专注于迁移中的复杂方面,而不会将他们从过程中隔离开来。案例研究表明,这种方法可以成功生成迁移所需的大部分新代码,并显著减少人工工作量。

代码迁移工作流程


为了代码迁移,Google构建了一个新的、互补的工具包,以解决标准工具难以处理的变更,并且利用机器学习(ML)模型的能力适应周围代码。

Google将迁移过程概念上分为三个阶段:

  1. 定位需要修改的代码库位置
  2. 生成和验证编辑
  3. 审查和推广更改
    尽管每个阶段都能从AI中受益,重点关注第二阶段。

为了生成和验证代码更改,Google利用了经过内部代码和数据微调的Gemini模型版本。

每次迁移需要以下输入:

  • 需要更改的位置文件集:文件路径+行号
  • 一个或两个描述更改的提示
  • [可选]少量示例以决定文件是否需要迁移

用户提供的位置通过结合现有静态工具和人工输入收集。迁移工具包会自动扩展这组文件,包括测试文件、接口文件和其他依赖项。这一步尚未由AI驱动,而是使用符号交叉引用信息。

在许多情况下,用户提供的迁移文件集并不完美。因为过滤输入列表可能非常繁琐,通常会有一些文件已经部分或完全迁移。因此,为了避免重复更改或在编辑生成期间混淆模型,提供少量示例并要求模型预测文件是否需要迁移。

编辑生成和验证步骤是自动系统最有利的地方。模型根据DIDACT方法论训练,使用Google monorepo和相关数据。在推理时,在预期需要更改的每一行标注自然语言指令和模型的一般指令。在每次模型查询中,输入上下文可以包含一个或多个相关文件。

模型预测文件之间的差异(diffs)并更改相关部分,以确保最终代码正确。

这种能力对于加快迁移速度至关重要,因为生成的更改可能与最初请求的位置不一致,但它们会解决意图问题。这减少了手动查找所有需要更改行的需求,相比纯粹基于抽象语法树修改的确定性更改生成是一个巨大的进步。

例如,提示模型仅更新需要更改类型的类的构造函数。在预测的统一diff中,模型还正确修复了类中的私有字段和用法。

不同的提示组合会根据输入上下文产生不同的结果。在某些情况下,提供过多预期更改的位置会导致性能下降,而仅在文件中指定一个位置并提示模型全局应用更改效果更好。

在对数十甚至数百个文件应用更改时,Google实施了一种机制,生成针对每个文件组并行尝试的提示组合。这类似于pass@k策略,在这种情况下,Google不是修改推理温度,而是修改提示策略。

Google自动验证生成的更改。验证是可配置的,通常取决于迁移。最常见的两种验证是编译更改的文件和运行它们的单元测试。每个失败的验证步骤可以选择运行ML驱动的“修复”。模型也已针对大量失败的构建和测试数据以及相应修复的diffs进行了训练。对于遇到的每个构建/测试失败,Google会提示模型更改文件、构建/测试错误,并请求修复。通过这种方法,观察到模型在大量情况下能够修复代码。

由于为每个文件组生成多个更改,Google根据验证对其进行评分,最后决定将哪个更改集传播回最终更改列表(类似于Git中的拉取请求)。

案例研究:将整数从32位迁移到64位


随着Google代码库及其产品的发展,过去(有时超过十年前)做出的假设不再成立。例如,Google Ads有数十种用于用户、商家、广告活动等的唯一“ID”类型,这些ID最初定义为32位整数。但由于当前ID数量的增长,预计它们会比预期更早溢出32位容量。

这一认识导致了一项重大工作,即将这些ID迁移到64位整数。该项目困难重重:

  • 数万个位置跨越数千个文件使用这些ID。
  • 如果每个团队各自处理数据中的迁移,跟踪所有相关团队的更改将非常困难。
  • 这些ID通常被定义为通用数字(在C++中为int32_t,在Java中为Integer),而不是唯一的、易于搜索的类型,通过静态工具找到它们的过程并不简单。
  • 需要考虑跨多个文件的类接口更改。
  • 需要更新测试以验证64位ID的正确处理。
  • 如果手动完成,整个工作预计需要许多年的软件工程时间。

为了加快工作进度,Google使用了AI迁移工具,并制定了以下工作流程:

  • 专家工程师识别要迁移的ID,并使用Code Search、Kythe和自定义脚本的组合,确定相对紧密的待迁移文件和位置集合。
  • 迁移工具包自主运行,生成通过单元测试验证的更改。有些测试本身也会更新以反映新现实。
  • 工程师快速检查更改,可能会更新模型失败或出错的文件。然后将更改分片,并发送给受更改影响代码库部分的多个审阅者。
    需要注意的是,内部代码库中使用的ID已经应用了适当的隐私保护。在模型将它们迁移到新类型时,不会更改或公开它们,因此所有隐私保护将保持不变。

在这项工作流中,发现着陆的变更列表(CLs)中80%的代码修改由AI创作,其余由人类创作。工程师报告称,迁移总时间减少了约50%。沟通开销显著减少,因为单个工程师即可生成所有必要的更改。工程师仍需要花时间分析需要更改的文件并进行审查。发现,在Java文件中,模型预测文件需要编辑的准确率为91%。

该工具包已用于创建数百个变更列表,涉及此次及其他迁移。平均而言,成功在monorepo中着陆的AI生成字符更改超过75%。

未来方向


下一步是处理影响多个组件交换数据或需要系统架构更改的更复杂迁移。Google已经在迁移需要非平凡重构的弃用类型以及从旧测试框架迁移中取得了成功。

Google正在研究如何在开发过程的其他部分应用AI,特别是帮助定位更改和更好地过滤不必要的更改。另一个有趣的领域是改进IDE中的迁移用户体验,使变更操作员能够更自由地混合和匹配现有工具。

总的来说,Google看到这项工作的广泛潜在应用,可能超越严格的代码迁移空间,并可能应用于错误修正和大规模的常规代码维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知名的GPU算力租用平台,适合进行大规模深度学习训练

目录 引言 GPU算力租用的重要性 当前市场趋势 选择GPU算力平台的关键因素 知名的GPU算力租用平台,适合进行大规模深度学习训练 引言 在数字时代,计算能力是推动科技创新的核心驱动力,尤其是在人工智能(AI)、机器学…

【ARM】SMMU系统虚拟化整理

目录 1.MMU的基本介绍 1.1 特点梳理 2.功能 DVM interface PTW interface 2.1 操作流程 2.1.1 StreamID 2.1.2 安全状态: 2.1.3 HUM 2.1.4 可配置的操作特性 Outstanding transactions per TBU QoS 仲裁 2.2 Cache结构 2.2.1 Micro TLB 2.2.2 Macro…

交叉编译ethtool(ubuntu 2018)

参考文章:https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目: 题解: var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…

高效日志管理系统设计

设计一个高效的日志管理系统,旨在确保日志数据能够被有效收集、存储、分析和检索,同时也要考虑到系统的可扩展性、可靠性和易用性。以下是高效日志管理系统设计的关键要素: 1. 日志收集 自动收集:使用轻量级的日志采集代理&…

windows11 vmware安装记录

注意:windows11不要安装vmware16版本以下的!!!会报错,与内核冲突,只有关闭内核才可以运动,但是这样电脑的安全性得不到保障。 Windows11 中 Vmware Workstations16 安装CentOS 7_windows featu…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 小区小朋友统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

二染色,CF 1594D - The Number of Imposters

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…

某手某聚星登录算法分析

KS某聚星登录算法分析 某手某聚星登录算法分析第一步:抓包-登录第二步:定位加密入口第三步:分析加密算法第四步:算法实现 某手某聚星登录算法分析 在这篇文章中,我们将详细解析某手某聚星的登录算法,涵盖从…

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点,可以通过拍摄多张图像求平均值的方法来减少噪点,获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

n6.Nginx 压缩功能

Nginx 压缩功能 Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的 文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”,核心场景的界面响应耗时被拉的越来越长,也让性能优化工作提上了日程,先说结论,经过这一波前后端齐心协力的优化努力,两个核心界面90分位的数据,FCP平…

PDF编辑器的秘密:解锁文档处理的无限可能

PDF这个文件因其跨平台兼容性、保持文档格式不变以及易于传输的特性,成为了工作、学习及日常生活中不可或缺的一部分。但是PDF编辑器可不多,我这次就介绍下我用过好用的PDF编辑器吧。 1福昕PDF编辑器 这个软件功能全面,所以软件本身的安装包…

服务攻防-中间件安全(漏洞复现)

一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了,漏洞也基本没啥用 1、短文件:信息收集 2、文件解析:还有点用 3、HTTP.SYS:蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包(Game Runtime Libraries Package)是一个整合了多种游戏所需运行库的安装程序,旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统,并且具备自动检测系统并推荐合…

threejs零基础搭建3D可视化汽车展厅

前置知识(最下面有完整代码) 每个代码都有注释,零基础也能看懂 中文官方文档教程 创建项目 创建空文件夹 执行如下命令初始化package.json文件 npm init -y安装threejs包 yarn add three安装tween.js动画库,用于做动画 tweenjs文档 yarn add @tweenjs/tween.js安装gui调…

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们,好久不见呀。 距离上次更新已经过去了一个半月,上次发文章时还信誓旦旦地表达自己后续目标是3周更…