生成式AI 的爆發元年
一、AI導致的工作流變化
在最近這段時間內我們已經見證了AI在各行各業產生的巨大影響。在技術領域,AI工具已經成為一股不可忽視的力量,為程序員、數據分析師和設計師等技術人員提供了強大的輔助功能。
在編程方面,基于人工智能的代碼補全工具如GitHub Copilot可以極大地幫助開發者提高編程效率。而在GPT4公布以后Copilot也發布了自己的升級版本即 GitHub Copilot X,它不僅繼承了原有的代碼補全功能,還圍繞 AI 對話、Pull Request 提交處理、文檔智能檢索與閱讀、命令行改造、代碼審查和質量分析甚至是語音生成代碼等功能進行了全方位的升級。
▲ 圖1 GitHub Copilot X新功能[2]
上述工具需要付費或者加入waiting list等待才可以拿到體驗資格,所以如果你想獲得類似的智能工具體驗也可以直接使用Cursor這樣免費的IDE工具,據官方說這是一個基于gpt4接口開發的簡易IDE(實際體驗下來應該還是GPT3.5),能力同樣足夠強悍,它可以支持用GPT給你寫代碼,也可以支持圍繞你的代碼項目工程問任何問題,并進行改進。
▲ 圖2 Cursor功能演示[3]
在數據分析領域,AI工具也發揮著重要作用。近期許多證券公司同樣參與到了chatGPT這個熱潮中,不管是直接借助OpenAI的API調用還是自研小型的GPT類模型,AI技術可以幫助分析師高效地總結和歸納研究報告。通過AI技術進行文本分析和自然語言處理,可以提高信息處理速度,減輕人力負擔,從而為證券公司帶來更多便利。在筆者深度體驗chatGPT一段時間后,的確發現它的信息歸納總結能力非常出色,像目前就有許多利用chatGPT的能力對文獻進行快速總結的工具比如chatPDF,你只需要上傳一個PDF文件就可以基于此進行諸多提問。
▲ 圖3 chatPDF功能演示[4]
在設計領域,AI工具同樣大放異彩,不過那里的主角是擴散模型。例如,DALL-E這樣的AI生成器,可以根據用戶提供的文本描述,生成相應的圖像;除此之外也有像Midjourney這樣已經非常完善的產品;在開源社區,這里的生態也不亞于chatGPT,基于開源的Stable Diffusion模型以及各種插件和Lora小模型所形成的解決方案已經非常完善,設計師們完全可以基于AI輔助進行工作。而就在我寫下這篇文章的時間點,基于擴散模型、Controlnet以及Segment-Anything[1]的開源工具已經出現了。
▲ 圖4 Sample1-Edit Anything[5]
沒什么感覺?再來一張感受一下:
▲ 圖5 Sample2-Edit Anything[5]
總之,AI工具在技術領域的應用正變得越來越廣泛和深入,它們已經對程序員、數據分析師和設計師等技術人員的工作流產生了重大影響。回想了一下最近我自己在工作上面的流程變化,首先是使用搜索引擎的頻率大大降低,對于自己不熟悉的領域會優先使用chatGPT來進行提問學習,然后再實際驗證準確性;編程方面雖然沒有使用Github Copilot(基于安全以及隱私的考慮),但是我們私有化的代碼智能補全工具同樣可以提升我的編碼效率,在擴散模型方面雖然我沒有設計方面的需求,但是在開發IDE插件并發布到插件市場前,我使用它進行logo的生成,生成效果的確不賴。
▲ 圖6 Acepilot logo由擴散模型生成
二、LLM模型實踐
現在開源社區有許多類chatGPT的開源實現方案:
■ 駱駝(Luotuo): 開源中文大語言模型[8]
■ Vicuna: 號稱能達到90% ChatGPT質量的開源模型[9]
■ Koala:經過在網絡上收集的對話數據并基于Meta的LLaMA微調訓練的模型 [10]
■ Baize:Baize是由Lora技術訓練的開源模型[11]
這些開源方案中所使用的模型都集中在100億參數量附近,對LLM來說這已經是非常輕量化的模型參數量了,但是即便訓練這些輕量模型(包括使用Lora的方案)也需要耗費我們許多算力。在之前的?文章中提到過,我們基于Codegen代碼生成模型進行了實踐,并且陸續開發了IDE插件供研發人員使用體驗,最終形成了私有化部署的代碼智能補全工具。后續隨著工作的持續開展我們優化了模型的生成效果,模型的參數量也從27億參數量提升到了60億參數量,但是對模型進行調優和實際優化部署時都碰到了許多問題,因此光有模型并沒有用,你需要有模型持續迭代優化的能力和資源,在模型部署上也需要有完善的模型加速手段。
1.模型訓練
由于當時在進行代碼智能補全工具的體驗時許多前端的同事都覺得它在Vue上的補全效果并不理想,因此我們爬取了Github上40個優質的Vue項目并進行了數據上的預處理,因為計算資源有限,我們基于此數據首先在2.7Billion參數量的模型上進行了調優嘗試。
▲ 圖7 27億參數量模型微調
這是一個失敗的嘗試,雖然微調過后的模型的確在Vue上的生成效果有了提升,但是在我們使用了自己收集和構建的多語言版本的HumanEval數據集進行測試發現,微調后的模型在其他語言上效果是有下降的,這并不符合我們的初衷。然后在測試原版的CodeGen 60億參數量模型的效果時我們發現在Vue上它也比微調過后的27億參數量模型更加優秀,至于其他語言就完全無需比較了。
但是這的確給我們優化LLM積累了一些經驗和思考。首先是計算資源消耗方面,即使是27億參數量的模型我們也至少需要兩張32GB的V100顯卡才能比較有效率地微調我們的模型,在使用分布式訓練框架DeepSpeed 在不同的優化策略需要的顯存和內存占用如下:
如果我們需要微調的是60億參數量的模型,那至少需要4張32GB顯存的V100顯卡才能滿足算力的需求。另外是模型訓練的方式上我們還是采用了普通的微調方法,使用普通微調方法的好處是對數據的質量要求沒有那么高,也不需要復雜的數據處理。如果我們收集足夠多的數據并把數據處理成指令微調的形式進行訓練那樣會對模型的生成效果有一個比較大的提升。
2.模型部署
計算圖優化:計算圖是用于表示神經網絡中各層之間連接關系的有向圖。在模型部署階段,計算圖優化可以通過剪枝、融合和重排等操作減少計算量和內存占用。剪枝是指移除網絡中不重要的權重或神經元,以減小模型的體積。融合是將多個操作合并為一個操作,以減少計算量。重排是調整計算圖中操作的順序,以減少內存訪問和數據傳輸。通過這些優化手段,計算圖優化可以在保持模型精度的同時,提高模型在不同硬件平臺上的性能。
其他部署技術:除了模型量化和計算圖優化外,還有其他一些技術可以提高模型部署效果。例如,模型壓縮可以進一步減小模型體積,加快加載速度。還可以通過使用高性能的深度學習庫(如TensorRT、OpenVINO等)來提高模型在特定硬件上的性能。
三、總結與思考
相信大多數人都已經感受到AI工具在各行各業產生了影響,作為技術人員我們需要不斷地擁抱變化、學習新技能和方法,以充分利用AI所帶來的好處。同時我們也需要認識到當前AI技術存在的局限性,即使是GPT4,在進行很長一段深度使用后我還是可以非常自信地說讓它來代替程序員還太早了。總的來說:
1. 提高效率:AI類工具可以幫助技術人員更快地完成任務,如代碼智能補全工具在提高編碼效率方面。通過使用先進的AI算法,開發人員可以減少編碼時間,提高生產力,這使得他們可以將更多的時間和精力投入到其他關鍵任務上,如設計架構、調試和優化上。
2. 創新與拓展:LLM的火爆給AI領域的從業人員提供了新的機會和挑戰。例如,如何利用有限的計算資源盡可能高效地訓練模型以及在模型部署技術、模型加速方面的持續探索,這可以推動整個領域內的技術創新。
3. 適應性與持續學習:隨著AI技術的不斷發展,技術人員需要不斷適應并掌握新的工具和方法。這要求他們具備持續學習的能力,以便跟上行業的發展趨勢。
4. 人工智能與人類協同:雖然AI工具在許多方面都有顯著的優勢,但在某些情況下,人類的專業知識和創造力仍然不可替代。因此,技術人員需要學會與AI工具協同工作,充分利用它們的優勢,同時發揮自己的專業能力,共同實現更高質量和效率的工作成果。
參考文獻
[1]GPT4
[2] Introducing GitHub Copilot X
[3] Cursor | Build Fast
[4] ChatPDF - Chat with any PDF!
[5] sail-sg/EditAnything: Edit anything in images powered by segment-anything, ControlNet, StableDiffusion, etc.
[6] MindSpore量化算法概述
[7] M. Shoeybi, M. Patwary, R. Puri, P. LeGresley, J. Casper, and B. Catan-
zaro, “Megatron-lm: Training multi-billion parameter language modelsusing model parallelism,” arXiv preprint arXiv:1909.08053, 2019.
[8] https://github.com/LC1332/Luotuo-Chinese-LLM
[9] https://github.com/lm-sys/FastChat
[10] https://bair.berkeley.edu/blog/2023/04/03/koala
[11] https://github.com/project-baize/baize-chatbot
本文轉載自 ??AI遇見云??,作者: 張宇博
