【導(dǎo)讀】在當(dāng)今軟件開發(fā)和科學(xué)研究領(lǐng)域,項(xiàng)目的復(fù)雜性日益增加,提升研發(fā)效率已成為行業(yè)迫切需求。本文深入探討了大模型技術(shù)在研發(fā)效率提升方面的應(yīng)用與實(shí)踐,以實(shí)戰(zhàn)摸索的方式,真實(shí)揭示了大模型究竟能夠如何助力企業(yè)實(shí)現(xiàn)數(shù)智化轉(zhuǎn)型。
本文精選自《新程序員007:大模型時(shí)代的開發(fā)者》,《新程序員 007》聚焦開發(fā)者成長(zhǎng),其間既有圖靈獎(jiǎng)得主 Joseph Sifakis、前 OpenAI 科學(xué)家 Joel Lehman 等高瞻遠(yuǎn)矚,又有對(duì)于開發(fā)者們至關(guān)重要的成長(zhǎng)路徑、工程實(shí)踐及趟坑經(jīng)驗(yàn)等,歡迎大家點(diǎn)擊訂閱年卡。
隨著軟件開發(fā)和科學(xué)研究的復(fù)雜性不斷增加,人們對(duì)提高編程及研發(fā)效率的需求也越來越迫切。傳統(tǒng)的編程工具和方法已經(jīng)無法滿足這一需求,因此人們開始探索新的技術(shù)手段來提升編程和研發(fā)效率。大模型作為一種新興的人工智能技術(shù),被廣泛應(yīng)用于輔助編程和研發(fā)效率提升領(lǐng)域。
例如,美國(guó)科技巨頭谷歌利用大模型技術(shù)提升內(nèi)部研發(fā)效率,通過在代碼自增長(zhǎng)工具中集成大模型,輔助完成部分重復(fù)性工作(如自動(dòng)導(dǎo)入包、自動(dòng)生成構(gòu)造函數(shù)等),縮短了工程師的編碼時(shí)間。同時(shí)它還開源了基于大模型的代碼搜索引擎,可以自動(dòng)匹配代碼片段并提供相關(guān)文檔,大幅提高了工程師的開發(fā)效率。微軟研究院則開發(fā)了基于大模型的自動(dòng)測(cè)試工具,它可以自動(dòng)檢測(cè)代碼中的 Bug,并生成相應(yīng)的測(cè)試用例。經(jīng)過實(shí)測(cè),該工具在發(fā)現(xiàn)錯(cuò)誤率和測(cè)試覆蓋率上都能超越人工編寫的測(cè)試用例。目前它正在幫助微軟各產(chǎn)品線提升測(cè)試質(zhì)量。
中興通訊以大模型為中心賦能企業(yè)數(shù)智化轉(zhuǎn)型,堅(jiān)持先自用再外溢。除自研大模型之外,我們還基于開源的大模型開發(fā)微調(diào)后在研發(fā)效能領(lǐng)域進(jìn)行應(yīng)用,并分析其優(yōu)勢(shì)和挑戰(zhàn)。通過對(duì)相關(guān)研究和實(shí)踐案例的綜述,發(fā)現(xiàn)大模型在輔助編程和研發(fā)效率提升方面具有巨大潛力。在本文中,我將分享我們?cè)谘邪l(fā)類大模型的一些應(yīng)用與實(shí)踐,希望對(duì)開發(fā)者們有所裨益。
研發(fā)類 AI 場(chǎng)景分析
研發(fā)流程非常繁多,從項(xiàng)目立項(xiàng)到需求分析,再到產(chǎn)品設(shè)計(jì)、研發(fā),再進(jìn)行測(cè)試,進(jìn)而投產(chǎn)和運(yùn)維,貫穿了復(fù)雜的管理流程。
基于大模型的需求管理
對(duì)需求進(jìn)行自動(dòng)拆分,即把用戶需求拆分成產(chǎn)品需求。
大模型能對(duì)用戶提出的需求進(jìn)行語義理解,識(shí)別其內(nèi)在結(jié)構(gòu)與邏輯關(guān)系,自動(dòng)將需求拆分成獨(dú)立的子需求。比如從一個(gè)用戶定義的需求,自動(dòng)提取出多個(gè)具體的產(chǎn)品需求點(diǎn)。
自動(dòng)補(bǔ)全
(1)對(duì)需求進(jìn)行自動(dòng)介紹,指出需求背景、用戶痛點(diǎn)以及實(shí)現(xiàn)該需求能為用戶帶來的價(jià)值。
(2)將用戶用簡(jiǎn)單語言說明的需求,轉(zhuǎn)化為標(biāo)準(zhǔn)的產(chǎn)品需求格式,詳細(xì)描述功能點(diǎn)和約束條件。
(3)根據(jù)需求類型和項(xiàng)目階段自動(dòng)生成驗(yàn)收標(biāo)準(zhǔn)與測(cè)試用例。
自然語言查詢/定義
具體包括:
(1)用戶能通過日常話語式描述搜索到相關(guān)工作任務(wù)。例如搜索“如何實(shí)現(xiàn)單點(diǎn)登錄”。
(2)用戶通過在線對(duì)話的方式與系統(tǒng)交互,利用自然對(duì)話流程定義需求內(nèi)容。
此外,大模型還可以為需求管理提供以下能力:
(1)識(shí)別需求之間的依賴關(guān)系,繪制需求關(guān)系圖。
(2)利用主觀概率算法為每個(gè)需求點(diǎn)評(píng)估重要程度與難易程度。
(3)通過對(duì)歷史需求數(shù)據(jù)進(jìn)行學(xué)習(xí),提出可行性評(píng)估與風(fēng)險(xiǎn)識(shí)別。
分析設(shè)計(jì)
內(nèi)容生成
(1)根據(jù)需求內(nèi)容自動(dòng)提煉重點(diǎn),生成不同層級(jí)的內(nèi)容提綱供瀏覽。
(2)根據(jù)產(chǎn)品類型和功能,繪制系列設(shè)計(jì)原型圖或流程圖,標(biāo)識(shí)主流程和交互點(diǎn)。
(3)通過創(chuàng)意思維自動(dòng)編寫故事情景,展現(xiàn)產(chǎn)品如何解決用戶痛點(diǎn)。
(4)對(duì)文檔內(nèi)容進(jìn)行翻譯、注釋或解釋,協(xié)助設(shè)計(jì)人員更好地理解需求細(xì)節(jié)。
內(nèi)容結(jié)構(gòu)化
(1)將圖片、表格等非文本內(nèi)容引用至正文,生成文檔框架。
(2)在設(shè)計(jì)文檔中自動(dòng)標(biāo)注待完善部分,給出改進(jìn)建議或待定事項(xiàng)。
(3)檢測(cè)文檔風(fēng)格與格式是否統(tǒng)一,給出轉(zhuǎn)換建議供修改。
(4)將結(jié)構(gòu)化設(shè)計(jì)文檔自動(dòng)生成到各類格式文檔中,如 Word、PDF 等。
此外,分析設(shè)計(jì)階段還可以利用大模型:
(1)檢測(cè)設(shè)計(jì)方案創(chuàng)新性及可行性,給出評(píng)價(jià)建議。
(2)將歷史優(yōu)秀案例自動(dòng)歸納提取,運(yùn)用到當(dāng)前設(shè)計(jì)中。
開發(fā)流水線
資源智能分配
(1)根據(jù)歷史任務(wù)資源使用狀況,針對(duì)不同類型任務(wù)動(dòng)態(tài)設(shè)置資源上下限。
(2)根據(jù)任務(wù)并發(fā)情況實(shí)時(shí)調(diào)度任務(wù)到不同規(guī)模的資源池,聚焦于提高整體利用率。
故障定位
(1)通過對(duì)比歷史錯(cuò)誤日志,識(shí)別重要提示詞進(jìn)行分類,快速定位錯(cuò)誤原因。
(2)調(diào)用相關(guān)開源工具分析異常快照,給出反向跟蹤步驟以幫助修復(fù)。
一鍵生成
(1)根據(jù)用戶自然語言自動(dòng)創(chuàng)建符合用戶需求的流水線。
(2)根據(jù)代碼庫(kù)結(jié)構(gòu),結(jié)合部門代碼庫(kù)和流水線規(guī)范,自動(dòng)生成流水線。
(3)通過 API 調(diào)用底層工具,完成流水線的執(zhí)行。
此外,開發(fā)流水線優(yōu)化還可以:
(1)在不同階段進(jìn)行分支管理與合并。
(2)監(jiān)控流水線狀態(tài)并發(fā)送實(shí)時(shí)提醒,追蹤任務(wù)進(jìn)度。
(3)支持流水線模板管理和多項(xiàng)目重復(fù)應(yīng)用。
CCA
漏洞自動(dòng)治理
(1)針對(duì)代碼漏洞、引入組件、開源合規(guī)、安全漏洞等問題提供一站式解決方案。
(2)當(dāng)前代碼存在哪些漏洞/問題,推薦如何治理,無需人工搜索。
組件版本依賴
即當(dāng)某個(gè)組件要升級(jí),AI 推薦建議升級(jí)版本和依賴版本,減少人工版本探索時(shí)間。
測(cè)試管理
測(cè)試用例代碼生成,即不同粒度的自動(dòng)化測(cè)試用例代碼生成,包括函數(shù)級(jí)、模塊級(jí)、功能級(jí)、API 級(jí)、性能級(jí)。
自動(dòng)創(chuàng)建測(cè)試環(huán)境,即自動(dòng)創(chuàng)建測(cè)試環(huán)境、測(cè)試執(zhí)行任務(wù)并執(zhí)行,最后生成測(cè)試報(bào)告。
自動(dòng)生成測(cè)試文檔,包括:
(1)自動(dòng)創(chuàng)建測(cè)試計(jì)劃。根據(jù)接口文檔自動(dòng)創(chuàng)建基準(zhǔn)場(chǎng)景和邊界條件測(cè)試計(jì)劃。
(2)實(shí)例化測(cè)試記錄。測(cè)試通過后自動(dòng)更新通過率及接口文檔,實(shí)時(shí)反饋測(cè)試進(jìn)度。
版本管理
實(shí)現(xiàn)版本發(fā)布無人化,包括文檔自動(dòng)生成,和版本發(fā)布審批決策智能化。
研發(fā)大模型應(yīng)用平臺(tái)整體架構(gòu)和思路
基礎(chǔ)模型選擇思路
對(duì)于基礎(chǔ)模型的選擇,在參數(shù)上有以下一些考慮:
10B 參數(shù)級(jí)別
這是目前綜合性能與部署成本的平衡點(diǎn)。像 10B 左右的微型模型,在保留很強(qiáng)生成能力的同時(shí),參數(shù)量相對(duì)較小,易于部署和精調(diào)。
25B - 50B 參數(shù)級(jí)別
如果有一定預(yù)算,可以選擇略大一些的模型,像 GPT-J 25B,具有更全面強(qiáng)大的語言理解和應(yīng)用能力。若重視研發(fā)投入且需要應(yīng)對(duì)更復(fù)雜任務(wù),選擇 50B 以下大模型也未嘗不可。
不宜超過 100B
超過 100B 的天然語言處理大模型,由于其部署和使用成本還不可控,當(dāng)前尚不宜直接應(yīng)用于產(chǎn)品。
總體而言,當(dāng)前 10B - 50B 之間的模型規(guī)模是一個(gè)比較適宜的選擇窗口。它可以滿足大多數(shù)日常需求,同時(shí)考慮到成本和易用性的因素,超過這個(gè)范圍就需要根據(jù)實(shí)際應(yīng)用場(chǎng)景具體權(quán)衡。
其次,還需要考慮模型的開源程度。半開源模型信息不對(duì)稱度高,我們優(yōu)先選擇完全開源的模型,可以推進(jìn)后續(xù)定制和社區(qū)研發(fā)。
綜上所述,對(duì)基礎(chǔ)模型選擇的標(biāo)準(zhǔn)如下:
具備編程領(lǐng)域能力,在編程類模型評(píng)估中各類語言得分越高越好(HumanEval/Babelcode 指標(biāo))。
考慮模型參數(shù)量,參數(shù)量過大,會(huì)導(dǎo)致精調(diào)和部署成本的提升。
在編碼能力基礎(chǔ)上,最好具備一定中文能力,當(dāng)然其選擇的優(yōu)先級(jí)低于編碼能力。
當(dāng)前主流的基礎(chǔ)模型如表 1 所示,最終我們選擇 Code LLaMA 作為基礎(chǔ)模型。
表 1 主流模型對(duì)比
增強(qiáng)預(yù)訓(xùn)練
模型選好后,接下來就是對(duì)模型進(jìn)行增強(qiáng)預(yù)訓(xùn)練。增強(qiáng)預(yù)訓(xùn)練的框架要解決兩個(gè)問題:資源和速度。我們采用以下優(yōu)化方式:
對(duì)于模型訓(xùn)練,我們可以采用 3D 并行訓(xùn)練的方式來實(shí)現(xiàn)。將模型參數(shù)和梯度張量劃分為多個(gè)分區(qū),分配到不同 GPU 卡上進(jìn)行計(jì)算。每張卡負(fù)責(zé)自己分區(qū)的梯度和參數(shù)更新工作,間隔時(shí)同步到其他卡上。這樣可以很好地利用更多計(jì)算資源,降低單卡資源需求。
同時(shí),我們還可以采用 Distributed Data Parallel 的方式,將訓(xùn)練數(shù)據(jù)并行讀取和樣本處理工作分發(fā)到各節(jié)點(diǎn),充分利用多卡資源進(jìn)一步提升訓(xùn)練速度。對(duì)于節(jié)省 GPU 資源,我們使用 ZeRO 技術(shù)。這個(gè)技術(shù)通過對(duì)靜態(tài)和動(dòng)態(tài)參數(shù)/張量進(jìn)行精細(xì)地分區(qū)存儲(chǔ),有效減少顯存占用。同時(shí)它支持異步參數(shù)更新,計(jì)算和參數(shù)傳輸可以重疊進(jìn)行,有效縮短迭代周期。
對(duì)于模型訓(xùn)練加速,我們采用 FlashAttention 技術(shù)。它通過對(duì)注意力操作進(jìn)行分塊并進(jìn)行融合,如將 QK 乘積和后續(xù)運(yùn)算融成一個(gè)算子,可以大幅減少數(shù)據(jù)傳輸次數(shù),從而提升計(jì)算吞吐。
訓(xùn)練數(shù)據(jù)組織及語料庫(kù)建設(shè)
訓(xùn)練數(shù)據(jù)組織
明確訓(xùn)練數(shù)據(jù)的來源、用途和特點(diǎn)。在組織訓(xùn)練數(shù)據(jù)前,要了解數(shù)據(jù)的來源,確認(rèn)其可靠性和有效性。同時(shí),要明確這些數(shù)據(jù)將用于哪些任務(wù),并了解其特點(diǎn),如數(shù)據(jù)量的大小、數(shù)據(jù)類型等。
進(jìn)行數(shù)據(jù)預(yù)處理。預(yù)處理是組織訓(xùn)練數(shù)據(jù)的關(guān)鍵步驟,包括數(shù)據(jù)清理、去重、變換等。數(shù)據(jù)清理主要是去除無效、錯(cuò)誤或重復(fù)的數(shù)據(jù);去重則是去除重復(fù)的信息,以避免模型過擬合;變換則是對(duì)數(shù)據(jù)進(jìn)行必要的轉(zhuǎn)換,以便于模型的學(xué)習(xí)和訓(xùn)練。
合理組織訓(xùn)練數(shù)據(jù)。首先要將數(shù)據(jù)進(jìn)行分類,按照不同的任務(wù)需求劃分不同的數(shù)據(jù)集。例如,可以將數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,以便于模型的訓(xùn)練和測(cè)試。同時(shí),要合理存儲(chǔ)數(shù)據(jù)文件,可以選擇常見的存儲(chǔ)格式,如 CSV、JSON 等,并確保文件的安全性和完整性。
圖 1訓(xùn)練數(shù)據(jù)組織及語料庫(kù)建設(shè)架構(gòu)
語料庫(kù)建設(shè)
語料庫(kù)是語言學(xué)研究的基礎(chǔ),為自然語言處理任務(wù)提供豐富的語料信息。建設(shè)語料庫(kù)的目的是為了滿足特定語言任務(wù)的需求,如文本分類、情感分析、信息提取等。
選擇合適的語料庫(kù)構(gòu)建方法。常用的語料庫(kù)構(gòu)建方法有手工采集、自動(dòng)化采集和混合采集。手工采集適用于小規(guī)模、高質(zhì)量的語料庫(kù)建設(shè);自動(dòng)化采集則可以快速地獲取大量語料信息;混合采集則是結(jié)合前兩種方法的優(yōu)勢(shì),以獲得高質(zhì)量且大規(guī)模的語料庫(kù)。
做好語料庫(kù)的管理和維護(hù)。為了確保語料庫(kù)的安全性和可靠性,需要對(duì)語料庫(kù)進(jìn)行科學(xué)的管理和維護(hù),這包括文件管理、關(guān)鍵詞提取、數(shù)據(jù)備份等。要建立完善的文件管理制度,對(duì)語料庫(kù)進(jìn)行合理的分類和存儲(chǔ);同時(shí),要定期對(duì)語料庫(kù)進(jìn)行關(guān)鍵詞提取,以便于檢索和使用;此外,還要定期備份語料庫(kù)數(shù)據(jù),以防止數(shù)據(jù)丟失或損壞。
精調(diào)方法選型
接下來,需要對(duì)大模型進(jìn)行精調(diào)。針對(duì)已經(jīng)預(yù)訓(xùn)練好的研發(fā)大模型,在具體應(yīng)用任務(wù)上進(jìn)行優(yōu)化和微調(diào),以適應(yīng)研發(fā)領(lǐng)域和應(yīng)用場(chǎng)景的需求。在精調(diào)中,面臨的問題包括:
顯存占用量超過預(yù)訓(xùn)練需求
大模型通常需要大量的顯存來存儲(chǔ)模型參數(shù)和中間狀態(tài),而顯存的有限性限制了模型的規(guī)模。在進(jìn)行精調(diào)時(shí),如果使用的數(shù)據(jù)量較大或者模型的復(fù)雜度較高,顯存占用量可能會(huì)超過預(yù)訓(xùn)練的需求,導(dǎo)致模型訓(xùn)練失敗或效率低下。
計(jì)算量超過預(yù)訓(xùn)練需求(單位數(shù)據(jù)量)
大模型通常需要大量的計(jì)算資源來進(jìn)行推理和訓(xùn)練,這包括 CPU 核心數(shù)、GPU 內(nèi)存和顯存等。在進(jìn)行精調(diào)時(shí),如果使用的數(shù)據(jù)量較大或者模型復(fù)雜度較高,計(jì)算量可能會(huì)超過預(yù)訓(xùn)練的需求(單位數(shù)據(jù)量),導(dǎo)致模型訓(xùn)練速度變慢或者無法收斂。
此外,大模型精調(diào)還可能面臨其他問題,如模型復(fù)雜度過高導(dǎo)致調(diào)參困難、數(shù)據(jù)量過大導(dǎo)致過擬合風(fēng)險(xiǎn)增加等。因此,在進(jìn)行大模型精調(diào)時(shí),需要根據(jù)實(shí)際情況進(jìn)行權(quán)衡和優(yōu)化。
圖 2精調(diào)方法選型
精調(diào)需要達(dá)到降低計(jì)算和存儲(chǔ)成本、提高泛化能力和輕便性、克服災(zāi)難性遺忘的問題、根據(jù)不同任務(wù)動(dòng)態(tài)地調(diào)整額外參數(shù)的效果。因此,我們需要在保持預(yù)訓(xùn)練模型的大部分參數(shù)不變的情況下,只微調(diào)少量額外的參數(shù)。在資源足夠的情況下,也可以選擇全量精調(diào)(選型可參見圖 2)。
研發(fā)大模型實(shí)踐結(jié)果
截至 2023 年三季度,我們針對(duì)研發(fā)場(chǎng)景的大模型在公司內(nèi)部上線在短短兩個(gè)月的時(shí)間里就取得了顯著的效果。用戶超過 3000 人,30 日留存率超過 50%,產(chǎn)品成功完成冷啟動(dòng)。在這背后是僅使用了 4 張 A800 卡,這意味著 AI 編程成本完全可以被企業(yè)所接受。需要注意的是,AI 編程對(duì)人員能力有比較高的要求,需要對(duì)員工進(jìn)行系統(tǒng)性培訓(xùn),才可能用得更好。
當(dāng)然,大模型的使用也面臨一些挑戰(zhàn),如計(jì)算資源需求和數(shù)據(jù)隱私問題。這些挑戰(zhàn)主要來自于大模型龐大的計(jì)算規(guī)模和對(duì)大量個(gè)人敏感數(shù)據(jù)的依賴。經(jīng)典的大模型需要大量 GPU 資源進(jìn)行訓(xùn)練與推理,離線部署效率低下;同時(shí)由于學(xué)習(xí)自大量的互聯(lián)網(wǎng)數(shù)據(jù),模型內(nèi)可能含有用戶隱私信息。
因此,未來的研究應(yīng)重點(diǎn)關(guān)注如何利用分布式計(jì)算和隱私保護(hù)技術(shù)等手段,來解決大模型計(jì)算資源和數(shù)據(jù)隱私的問題。例如采用 Model Parallel(模型并行)和 Data Parallel(數(shù)據(jù)并行)方法降低單機(jī)硬件需求,使用關(guān)注點(diǎn)機(jī)制和微分隱私等隱私算法來保護(hù)用戶數(shù)據(jù)等。同時(shí)也應(yīng)探索如何設(shè)計(jì)支持在線增量學(xué)習(xí)的大模型架構(gòu),有效應(yīng)對(duì)業(yè)務(wù)需要持續(xù)迭代優(yōu)化模型的需求。只有解決這些建設(shè)性的挑戰(zhàn),大模型才能在軟件研發(fā)深度應(yīng)用和持續(xù)推廣。
審核編輯:黃飛
-
gpu
+關(guān)注
關(guān)注
28文章
4740瀏覽量
128951 -
大模型
+關(guān)注
關(guān)注
2文章
2451瀏覽量
2714
原文標(biāo)題:大模型在研發(fā)效率提升方面的應(yīng)用與實(shí)踐 | 新程序員
文章出處:【微信號(hào):AI科技大本營(yíng),微信公眾號(hào):AI科技大本營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論