作者:夕陌,臨在,熊兮,道轅,得水,施晨
隨著人工智能技術的快速發展,大模型在各個領域的應用日益廣泛。大模型能夠更好地模擬人類的認知能力,大幅提升機器在復雜任務上的表現。然而,不斷增長的模型參數規模使得數據集的復雜度也不斷上升,數據質量更直接影響模型的準確性和可靠性。本文敘述的 Big Data for AI 最佳實踐,基于阿里云人工智能平臺PAI、MaxCompute自研分布式計算框架MaxFrame、Data-Juicer等產品和工具,實現了大模型數據采集、清洗、增強及合成大模型數據的全鏈路,解決企業級大模型開發應用場景的數據處理難題。
Data-Juicer是通義實驗室和PAI共建的開源數據處理工具。它提供了豐富的數據處理算子、高效并行化的數據處理流水線,支持數據預處理、可視化、數據評估等各項能力。還為不同背景的用戶提供了開箱即用的組件和豐富的數據配方。此外,Data-Juicer與MLLM和分布式計算生態系統無縫集成,以實現高效且可擴展的數據處理。
MaxFrame是MaxCompute自研的分布式計算框架,為MaxCompute提供了一套完整的Python開發生態,為大規模數據分析和機器學習任務提供了極佳的靈活性。數據科學家和數據工程師可利用MaxCompute的海量計算資源對數據進行大規模處理分析、可視化探索、科學計算,以及傳統ML開發等工作。
阿里云人工智能平臺PAI是是面向開發者和企業的機器學習/深度學習工程平臺,提供AI開發全鏈路服務,為用戶提供低門檻、高性能的云原生AI工程化能力。PAI的數據處理工具提供了一套全方位、覆蓋多領域的解決方案。充分利用深度學習集群(DLC)和MaxCompute的分布式能力和資源,結合Ray、UDF和MaxFrame等底層框架,基于DataJuicer豐富的算子,為用戶提供了開箱即用的組件和豐富的數據配方,能夠高效且靈活地處理復雜數據任務,使得快速上手和簡化流程成為可能。
PAI大模型數據處理套件架構概覽:
自底向上:
- 云資源:資源層是整個架構的基礎,PAI大模型數據處理套件同時支持DLC(深度學習集群)和MaxCompute集群,為上層應用提供強大的計算和存儲能力。
- 引擎框架:
- DLC集群:支持Ray自動化部署,可以進行大規模數據的并行處理,提升數據處理效率。
- MaxCompute集群:利用UDF算子和MaxFrame框架,依托MaxCompute的強大計算和存儲能力,滿足特定業務需求。
- 算子底座:DataJuicer提供了豐富的數據處理算子和高效的并行處理流水線,提供了全面的數據處理能力。我們以DataJuicer作為基石,進行算子改造,適配DLC和MaxCompute的分布式能力,進一步加速處理效率。
- 產品:PAI-Designer 提供了用戶友好的工具和界面,用戶可以自定義工作流對數據安全、數據脫敏、數據增強等組件進行任意編排。我們同時與百煉合作,這些組件也作為百煉數據處理的底層工具為用戶提供數據處理服務。
- 解決方案:利用PAI的產品工具集,提供涵蓋多個應用場景的解決方案,如文生圖/視頻、圖片/視頻理解、CT、SFT和RAG等。旨在簡化整個數據處理流程。幫助用戶快速上手。每個解決方案都是為特定領域的應用需求而設計的,用戶可以根據自身需求選擇適合的解決方案,滿足多樣化的業務需求。
Data-Juicer
Data-Juicer 是一個由通義實驗室主導,PAI深度參與共建的一站式開源數據處理系統,旨在為多模態大語言模型(MLLMs)提供更高質量、更豐富、更易“消化”的數據,提供超過 100 個內置多功能算子和可插拔工具。通過模塊化協同、靈活組合和彈性擴展,Data-Juicer 可以應對 MLLM 數據處理的異質需求,包括但不限于分析、清洗、合成和混合。 Data-Juicer 為各種背景的用戶優化了可用性,包括提供開箱即用的底層組件,支持數據菜譜可配置,以及為 MLLM 預訓練和后調優預置豐富的、效果證明過的數據菜譜。經過了多方面的系統性能優化, Data-Juicer 與 MLLM 和分布式計算的大量生態基建無縫集成,以支持高效且可規模化擴展的大模型數據處理。
此外, Data-Juicer 提供了一個定制化的中間層套件,“沙盒實驗室”,來支持便捷的多模態大模型 “數據-模型協同開發”。它提供了靈活的實驗平臺,在 Data-Juicer 已有的數據處理能力之上,沙盒實驗室持續集成多模態大模型的先進開源基建,提供數據和模型多維度的反饋循環。通過該套件,研發人員能在端到端工作流、典型開發行為、底層開發能力之間便捷組合,快速迭代小規模洞察,提高數據處理和模型開發的可衡量性和科學實踐性,以便在更大規模場景下“有的放矢”。通過該實驗室沉淀的數據開發工作流和實踐洞察,也將持續集成到PAI中,幫助提升用戶體驗。
相關參考
- 開源鏈接:https://github.com/modelscope/data-juicer
- (SIGMOD'24) "Data-Juicer: A One-Stop Data Processing System for Large Language Models"
- (V-Bench 文生視頻 Leaderboard 第一名) "Data-Juicer Sandbox: A Comprehensive Suite for Multimodal Data-Model Co-development"
MaxCompute - MaxFrame
MaxFrame是有阿里云計算平臺事業部MaxCompute團隊研發的大數據處理框架,支持用戶直接引用NumPy、SciPy、Matplotlib等三方庫進行科學計算、數據分析、可視化等操作,并提供了兼容Pandas接口的分布式數據處理算子。使用MaxFrame框架編寫的作業可直連存儲在MaxCompute中的數據,利用MaxCompute的海量彈性計算資源對數據進行大規模分布式處理。傳統基于Pandas編寫的數據處理腳本經過一定的適配改寫即可使用MaxFrame框架在MaxCompute中分布式運行,大幅提高了數據處理的規模及計算效率。
MaxFrame 特點優勢:
- 更熟悉的開發習慣
MaxFrame提供Python編程接口,兼容Pandas算子,且算子提交至MaxCompute自動分布式執行,不再受本地資源大小限制。
- 更高效的數據處理能力
MaxFrame直接在MaxCompute集群中進行數據分布式計算,運行時無需將數據拉取至本地處理,消除了不必要的本地數據傳輸,提高作業執行效率。
- 更便捷的開發體驗
MaxFrame已與MaxCompute Notebook、DataWorks集成,提供開箱即用的交互式開發環境及離線調度能力;MaxFrame支持在代碼開發中直接引用MaxCompute內置鏡像(Pandas、Numpy、XGBoost等)及用戶自定義鏡像,且支持Python3.7和Python3.11版本,無需考慮復雜的環境準備以及兼容問題。
MaxFrame在24年7月開始了公共云公測,目前已經有掌閱、通義、餓了么等內外部客戶的作業使用MaxFrame大幅提升了數據處理的開發效率和體驗。
MaxFrame官網文檔:MaxFrame概述_云原生大數據計算服務 MaxCompute(MaxCompute)-阿里云幫助中心 (aliyun.com)
PAI大模型數據處理套件
我們已將DataJuicer豐富的數據處理算子和MaxCompute的強大數據處理能力進行結合,封裝成PAI-Designer產品中的算子,以簡單易用的產品形態提供給廣大大模型開發人員。
使用文檔請參考:大模型數據處理。
算子列表:
在DataJuicer的基礎功能之上,我們做了如下適配和優化:
支持MaxCompute-MaxFrame
我們將DataJuicer的算子封裝成UDF函數,重新開發了一套UDF算子,并使用SQL腳本運行。可以充分利用MaxCompute海量數據存儲和強大的彈性計算能力。同時,我們陸續將目前UDF+SQL的方式切換到MaxFrame框架,在保證性能的同時,MaxFrame友好的Python開發生態可以為開發者提供更好的白盒化支持。
支持PAI-DLC&RAY的分布式處理
- 支持Ray自動化部署
用戶啟動多節點作業時,自動啟動Ray集群,并監聽多節點的狀態,防止集群意外退出。
- Ray的性能優化
我們和DataJuicer團隊也在持續優化Ray的性能,會根據算子本身的特性適配Task或Actor模式。在不同的使用方式上做了大量的性能測試。目前會適配batch模式并自適應分配并行度,以最大程度利用Ray的優勢。
- 支持數據自動切分
除了支持Ray的分布式處理,我們還支持了將數據均勻切分到多個節點獨立處理的功能。一方面可以減少節點間的通信時間,另一方面是因為我們發現當節點的內存占用達到某個臨界點時,Ray的性能會打折扣。
算子迭代和創新
為了提升數據處理算子的性能與準確性,我們依據終端用戶在日常操作中的反饋,對幾個算法模塊進行了優化和擴展。
- 敏感詞過濾算子
在原有的DataJuicer算子中,采用語種對應的分詞模型對文本進行分詞處理,并對切分后的結果進行遍歷。這一方式在處理含有混合語言文本的情況時會出現識別精度下降的問題。為了解決這一點,我們改進了策略,取消了分詞步驟,改用貪心算法對文本進行遍歷,在一定程度提升了敏感詞識別的準確率。此外,我們還對敏感詞庫進行了補充和擴展,解決了原有庫存量不足的問題,同時確保了性能與先前版本相當。
- 質量打分算子(DLC)
使用DataJuicer訓練出的pyspark模型,質量打分算子(DLC)能夠充分利用pyspark的分布式計算能力,實現了多節點協同處理。鑒于pyspark算子對MaxCompute的適配存在一定難度,MaxCompute的質量打分算子是另一套模型,支持了batch推理。后續我們計劃推出DataJuicer非pyspark模型來取代當前的MaxCompute質量打分算子。
-
敏感信息打碼
對文本數據中的敏感信息進行打碼,例如電話號碼、郵箱地址、身份證號等。
毒性過濾算子
與綠網協作,構建了一套精準識別網絡中毒性言論的機制。這個算子能夠檢測與過濾出侮辱性、歧視性、煽動性等不當言論,并能進行自我學習來適應新的表達形式,大幅提高網絡環境的健康性,以保障網上環境的健康和用戶體驗。
- 數據增強算子
數據增強算子可以生成更多樣化且具有挑戰性的訓練樣本。我們通過指令擴充來增加命令和請求的多樣性,同時采用指令優化策略提升現有數據集的質量。高質量的指令集對于訓練出能夠理解語言多樣性與復雜性的模型至關重要。我們自己訓練了指令優化和指令擴充模型,以提高自然語言處理的廣泛性和準確性。
指令優化模型:alibaba-pai/Qwen2-7B-Instruct-Refine、alibaba-pai/Qwen2-1.5B-Instruct-Refine
指令擴充模型:alibaba-pai/Qwen2-7B-Instruct-Exp、alibaba-pai/Qwen2-1.5B-Instruct-Exp
- QA提取算子(RAG應用)
在文檔理解和問答領域中,高效從大量文本中提取和生成準確的問答對至關重要。我們新引入的RAG算子專門為這一需求而設計,為了更好地應對問答(QA)場景,我們自行采集數據,訓練了模型。
模型列表:alibaba-pai/pai-llama3-8b-doc2qa、alibaba-pai/pai-baichuan2-7b-doc2qa、
alibaba-pai/pai-qwen1_5-4b-doc2qa、alibaba-pai/pai-qwen1_5-7b-doc2qa、
alibaba-pai/pai-qwen1_5-1b8-doc2qa、alibaba-pai/pai-qwen1_5-0b5-doc2qa
數據轉換組件
在處理需要大量CPU計算資源的任務方面,MaxCompute算子有較大優勢。然而,對于圖像、音頻、視頻的數據存儲和處理,及一些依賴于GPU加速的算子,MaxCompute則無法提供相應支持。鑒于此,這部分算子我們優先支持DLC資源,數據存儲支持OSS(對象存儲服務)。
另外,對于DLC算子我們測試pyodps sdk直接讀取MaxCompute表中的數據時,性能較慢,無法達到預期,所以DLC組件暫不支持直讀表數據。這一限制使得在實際的數據處理中可能會出現兩種算子的混合使用情況。
為了支持算子混用,提升數據傳輸效率,我們開發了數據轉換組件。該組件支持OSS與MaxCompute表之間的數據轉換,且在處理千萬量級的數據時能實現秒級的轉換速度。可以大幅提升數據處理的靈活性和效率。
對接QuickStart
我們將PAI快速開始(QuickStart)的部分LLM模型遷移到PAI-Designer。支持數據處理+LLM模型訓練+LLM模型推理端到端的工作流鏈路,在Designer中實現閉環。
訓練和推理同時支持DLC和MaxCompute兩套處理算子。
算子的串聯
當前,PAI-Designer各組件操作均相互獨立。每個組件完成處理任務后,會將結果持久化保存至OSS或表中。這一處理流程不可避免地伴隨著一些額外時間消耗,包括機器調度、容器的重新初始化及數據保存所需時間。為了解決這一問題,我們正計劃支持組件之間的無縫串聯,無需進行數據落盤操作,每個數據處理算子的輸出結果將直接在內存中保留,直至所有算子均順利執行完畢后再進行一次性落盤。這能夠顯著降低因機器調度、容器啟動、以及反復執行數據落盤操作而產生的時間開銷,從而提高整個處理流程的效率和性能。
處理模板
為了幫助用戶快速上手,我們基于數據處理組件列表,預置了多個領域的數據處理模板,包括LLM相關的SFT數據處理模板、CT數據處理模板 ,LVM相關的文圖處理模板和文視頻處理模板。還有端到端的數據處理+訓練+推理模板,用戶可以一鍵導入運行。
預置工作流模板請參考:LLM大語言模型數據處理 - github code、LLM大語言模型端到端鏈路:數據處理+模型訓練+模型推理 、LLM大語言模型數據處理-Alpaca-Cot(sft數據)、視頻數據過濾打標
數據增強模型的單獨部署
數據增強技術能夠生成更具多樣性和挑戰性的訓練樣本。我們通過擴展指令集的方式增加命令和請求的多樣性,并采用指令優化策略來提升現有數據集的質量。高質量的指令集對于訓練能夠理解復雜語言多樣性的模型是至關重要的。為此,我們開發了自有的指令優化和指令擴充模型如下:alibaba-pai/Qwen2-7B-Instruct-Refine、alibaba-pai/Qwen2-1.5B-Instruct-Refine、alibaba-pai/Qwen2-7B-Instruct-Exp、alibaba-pai/Qwen2-1.5B-Instruct-Exp。
除了在數據處理的產品中作為算子串接使用,在其他應用場景(例如線上應用的自動指令改寫),許多企業和開發者也有單獨部署上述模型的需求。我們在QuickStart中上架了這四個自研模型的model card,并且支持用戶以零代碼方式單獨部署這些模型至PAI-EAS。模型的model card示例如下所示:
典型案例
百煉
阿里云百煉是基于通義大模型、行業大模型以及三方大模型的一站式大模型開發平臺。面向企業客戶和個人開發者,提供完整的模型服務工具和全鏈路應用開發套件,預置豐富的能力插件,提供API及SDK等便捷的集成方式,高效完成大模型應用構建。
PAI的數據處理算子能力已接入百煉的數據處理模塊中,我們為百煉支持了算子串聯的不落盤功能,降低了數據處理時延,并優化了整個數據處理鏈路的性能。
在算子層面與數據層面,我們支持了容錯。在單個數據處理算子出現問題的情況下,整個數據處理流也能夠穩定運行,不會影響到后續算子的處理過程。數據層面的容錯則保證了輸入到系統中的數據,即使部分有損壞或格式錯誤,也能夠被識別和自動修正或隔離,確保數據處理流程的魯棒性。共同保障了數據處理的穩定性。
餓了么
本地生活集團-餓了么團隊,已在阿里云PAI-Designer平臺上構建了一套全面且精細的大型語言模型(LLM)數據處理流程,已成功實現部分關鍵業務的遷移與優化。為驅動其自主研發的E-GPT系列模型,該團隊精心篩選并處理了源自20個不同源頭的數據集,總數據量2TB,最終提煉出1T token的優質數據,專用于餓了么垂直領域的基座模型訓練。團隊每約一個月便進行一次數據迭代,以此不斷更新與優化其基模型,確保模型的時效性和競爭力,至今已在PAI-Designer上穩定運行超過三個月。
餓了么團隊基于 Qwen-Base 模型進行繼續預訓練。他們使用了開源網頁和域內自建兩部分數據。從互聯網收集高質量中、英、代碼、數學等語料,涵蓋網絡數據、圖書、論文、百科、知識學科題目和社交媒體等通用知識語料,同時本地構造清洗大量垂類語料。對原始數據進行精細的預處理工作,包括質量評估、冗余去除、隱私消除等步驟。
借助PAI-Designer平臺提供的工具鏈,餓了么團隊得以快速穩定的構建一套高度定制化的Post-Training流程,這一系列復雜的數據處理流程被簡化,顯著提升了研發效率,確保了模型迭代的順利進行與穩定發布,為餓了么的業務創新與技術升級注入了強勁動力。
餓了么工作流:
未來工作
PAI將繼續與Data-Juicer、MaxCompute緊密合作,持續推動大模型數據處理易用性、產品豐富度、性能的提升。
短期規劃:
- 組件擴充:不斷豐富和優化處理算子,擴展MLLM、MLVM等領域的處理功能。
- 用戶體驗改進:根據客戶反饋,優化組件易用性,減少用戶的學習成本。
- 數據可視化工具:開發用戶友好的數據處理可視化工具,增強數據流程的透明度。
- 組件白盒化:我們計劃支持組件的白盒化,將代碼全部開放給用戶,用戶可以基于自己業務領域的特性對代碼進行修改。修改后的組件代碼也可以和其他組件正常串聯運行。不影響已有的功能。
- 領域垂直解決方案:根據不同行業的數據特性,開發和推出更多的領域特定的預置工作流模板和算子,針對性解決各個垂直行業的數據挑戰。
- 性能優化:繼續深化對現有數據處理框架進行性能調優,旨在降低延遲,提高數據處理速度和吞吐量。