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