- Ray分布式機器學習:利用Ray進行大模型的數據處理、訓練、推理和部署
- (德)馬克斯·普佩拉等
- 4380字
- 2024-08-06 17:07:29
前言
分布式計算是當下非常熱門的技術。回顧計算的發展歷程,不禁讓人感嘆越來越多的公司將工作負載[1]分布在計算機集群上。人們開發出了高效的計算方法來做到這一點,與此同時,擴展計算也變得越來越必要。這是因為雖然單臺計算機的速度不斷提高,但人們對大規模計算的需求仍然超出了單臺機器的算力。
擴展計算不僅是必要的,而且極具挑戰性,而Ray的出現大大簡化了開發工作量。Ray使普通開發者也能輕松進行分布式計算,并且可以毫不費力地將Python腳本擴展到多個節點。Ray擅長處理數據密集型和計算密集型的計算任務(如數據預處理和模型訓練),非常適合需要擴展的機器學習(Machine Learning,ML)計算任務。雖然在當前的技術環境下不借助Ray也可以擴展這兩種類型的任務,但開發者可能需要為每種類型的任務使用不同的API和分布式系統。而且,管理多個分布式系統可能會導致混亂和低效。1
Ray 2.0于2022年8月發布,新增了Ray AI Runtime(AIR)功能,進一步提升了Ray在復雜機器學習計算任務上的能力。AIR是由庫和工具組成的集合,可在單個分布式系統中輕松構建和部署端到端的機器學習應用程序。借助AIR,即使處理最復雜的工作流,也可以將其表示為單個Python腳本。這意味著用戶可以預先在本地運行程序,從而大大提升調試和開發的效率。
因為可以使用持續增強的Ray機器學習庫和第三方集成,所以數據科學家從Ray受益良多。Ray AIR能幫助用戶快速實現想法原型,并更從容地從開發過渡到生產環境。與許多其他分布式系統不同,Ray原生支持GPU,這對于機器學習工程師尤為重要。為了支持數據工程師,Ray還與Kubernetes等工具緊密集成,并可以在多云環境中部署。
此外,用戶還可以將Ray作為統一的計算層,以提供計算任務的擴展性、容錯性、調度和編排。換言之,學習Ray對于各個崗位都具有非常大的價值。
目標讀者
很可能你選擇閱讀本書的原因是你對Ray的某些功能感興趣。也許你是一名分布式系統工程師,想了解Ray的引擎是如何工作的;也許你是軟件開發者,對新技術感興趣;或者,你是一名數據工程師,想評估Ray并與類似工具進行比較;又或者,你是機器學習工程師或數據科學家,需要找到擴展實驗的途徑。
無論你身處什么崗位,充分利用本書的關鍵都是熟練掌握Python編程。本書示例是用Python編寫的,因此讀者需要具備一定的Python知識。正如Python愛好者的口頭禪——“明確勝于含蓄”,我們也在這里明確指出,讀者需要熟練使用系統命令行,遇到問題時知道如何獲取幫助,還要掌握設置編程環境的方法。
如果你以前沒有接觸過分布式系統,不用擔心,因為本書涵蓋零基礎入門分布式系統所需的全部知識。除此之外,你可以在筆記本計算機上運行書中展示的大部分示例代碼。不過,涵蓋基礎知識意味著無法對分布式系統的細節進行深入講解。本書的重點是幫助開發者順利掌握Ray,特別是如何在數據科學和機器學習實戰中應用它。
本書后面章節的內容需要讀者對機器學習有一定了解,但并不強求具備機器學習領域的經驗。具體而言,讀者應該對機器學習范式以及它與傳統編程的區別有基本了解。讀者還應掌握NumPy和Pandas的基礎知識。此外,讀者需要能流暢閱讀TensorFlow和PyTorch示例。在API層面上,了解代碼的執行流程就足夠了,讀者不需要知道如何編寫模型。本書使用兩個主流深度學習庫(TensorFlow和PyTorch)的示例進行講解,無論讀者偏好哪個框架,都可以使用Ray來開發機器學習項目。
本書涵蓋很多高級機器學習主題,但主要關注Ray以及如何使用它。書中討論的機器學習示例對你來說可能是新的,可能需要多讀幾遍,但你仍然可以專注于Ray的API以及如何在實踐中使用API。了解了閱讀本書的要求,如下是你能從本書獲得的知識:
● 如果你是數據科學家,Ray可為你提供創建分布式機器學習應用程序的新途徑。你將學會如何在大規模集群中選擇超參數,掌握大規模模型訓練的實用知識,并學習先進的強化學習庫。
● 如果你是數據工程師,你將學會使用Ray Dataset進行大規模數據導入,利用Dask on Ray等工具改進管道,并學會如何高效部署模型并進行擴展。
● 如果你是工程師,你將了解Ray的底層工作原理,如何在云端運行和擴展Ray集群,以及如何使用Ray與其他項目進行集成。
無論身處什么崗位,讀者都可以學習以上所有主題。希望通過閱讀本書,你能夠掌握Ray的所有功能。
本書目標
本書的目標是幫助剛接觸Ray的讀者快速掌握并使用Ray。為了讓讀者理解Ray的底層核心思想,并掌握Ray的主要模塊,我們精心選擇了內容。閱讀完本書后,你將能夠自如地探索比書中內容更復雜的主題。
另外,讀者應該知道,本書不是為了提供盡可能多的信息,比如API參考或權威指南。本書也不是使用手冊或案例寶典,不能幫助你解決具體任務。本書的重點是幫助讀者學習和理解Ray,通過有趣的示例入門Ray。
軟件的發展和淘汰速度很快,但軟件背后的基本概念通常變化不大,甚至可以跨越多個版本。本書試圖在講解知識和提供具體代碼示例之間取得平衡。即使示例代碼發生了更新,你在本書中的所學所得也并不是徒勞無功的。
雖然Ray的官方文檔越來越完善,但我們相信專業的技術圖書擁有項目文檔難以企及的優勢。優秀的技術書籍能激發讀者對項目本身的興趣,讓原本沒有興趣的讀者翻閱項目的API文檔。希望本書也能成為廣受歡迎的技術書籍。
本書內容
本書內容經過精心安排,引導讀者從Ray的核心概念逐漸深入復雜主題。本書涉及的概念大多附有示例代碼,你可以訪問GitHub倉庫(https://oreil.ly/learning_ray_repo)獲取。
本書前3章通過實際示例介紹Ray作為分布式Python框架的基礎知識。第4~10章介紹Ray高級庫,并展示如何使用高級庫創建應用程序。第11章對Ray的生態進行總結,并指導讀者繼續學習。
第1章系統介紹Ray的三層架構,即內核、庫和生態。在本章中,讀者將使用Ray的庫運行首個示例,以初步了解Ray的功能。
第2章詳細介紹Ray的基礎知識,包括Ray的核心API。該章還會介紹Ray的任務和執行器是如何流暢地擴展Python函數和類的。讀者還將了解Ray的系統組件以及它們如何協同工作。
第3章使用Ray Core實現一個分布式強化學習應用程序。讀者將從頭開始實現這個應用程序,并觀察Ray在分發Python代碼方面的靈活性。
第4章簡要介紹強化學習,并展示Ray如何用RLlib實現重要概念。除了展示若干示例,我們還將深入探討課程學習(Curriculum Learning,CL)和使用離線數據等高級主題。
第5章介紹高效調優超參數難在何處、Ray Tune的工作原理,以及如何在實踐中將其應用于機器學習項目。
第6章介紹Ray Dataset,以及如何將其應用于其他數據處理系統。你還將學習如何與第三方工具(例如Dask on Ray)進行集成。
第7章介紹分布式模型訓練的基礎知識,并展示如何使用Ray Train與PyTorch等ML框架。該章還展示如何向模型添加自定義預處理器,如何使用回調函數監控訓練過程,以及如何使用Tune調優模型的超參數。
第8章介紹如何部署訓練好的ML模型,并使用API端點進行查詢。該章還介紹Ray Serve如何處理在線推理及其架構,并展示如何在實踐中使用Ray Serve。
第9章討論如何配置、啟動和擴展Ray集群以用于具體應用程序。你將學習Ray的集群啟動器命令和自動擴展器,以及如何在云端設置集群。該章還將展示如何在Kubernetes上部署Ray以及使用其他集群管理器。
第10章介紹ML計算任務的統一工具集Ray AIR,它為訓練模型或訪問自定義數據源提供了許多第三方集成。
第11章介紹Ray生態中有趣的插件和擴展。
如何使用代碼示例
讀者可在本書的GitHub倉庫(https://oreil.ly/learning_ray_repo)下載所有代碼。GitHub倉庫包含每章代碼筆記的notebook文件夾。通過代碼筆記,讀者可以邊閱讀邊運行,也可以根據指導在其他時間運行代碼。
對于書中的示例,讀者需要安裝Python 3.7或更高版本。在創作本書時,Ray對Python 3.10的支持只是試驗性的,因此建議不要使用高于3.9的Python版本[2]。所有代碼示例都假定讀者安裝了Ray,并且每章都包含特定要求。所有示例都在Ray 2.2.0上進行了測試,建議讀者在整本書中使用該版本。1
排版約定
本書中使用以下排版約定:
斜體(Italic)
表示新的術語、URL、電子郵件地址、文件名和文件擴展名。
等寬字體(Constant width)
用于程序清單,以及段落中的程序元素,例如變量名、函數名、數據庫、數據類型、環境變量、語句以及關鍵字。
等寬粗體(Constant width bold)
表示應由用戶直接輸入的命令或其他文本。
尖括號內的文本(<Text in angle brackets>)
表示應由用戶提供的值或由上下文確定的值替換的文本。
該圖示表示一般性說明。
該圖示表示警告或注意。
示例代碼
可以從https://oreil.ly/learning_ray_repo下載補充材料(示例代碼、練習、勘誤等)。
這里的代碼是為了幫助你更好地理解本書的內容。通常,可以在程序或文檔中使用本書中的代碼,而不需要聯系O'Reilly獲得許可,除非需要大段地復制代碼。例如,使用本書中所提供的幾個代碼片段來編寫一個程序不需要得到我們的許可,但銷售或發布O'Reilly的示例代碼則需要獲得許可。引用本書的示例代碼來回答問題也不需要許可,將本書中的很大一部分示例代碼放到自己的產品文檔中則需要獲得許可。
非常歡迎讀者使用本書中的代碼,希望(但不強制)注明出處。注明出處時包含書名、作者、出版社和ISBN,例如:
Learning Ray,作者Max Pumperla、Edward Oakes和Richard Liaw,由O'Reilly出版,書號978-1-098-11722-1。
如果讀者覺得對示例代碼的使用超出了上面所給出的許可范圍,歡迎通過permissions@oreilly.com聯系我們。
O'Reilly在線學習平臺(O'Reilly Online Learning)
40多年來,O'Reilly Media致力于提供技術和商業培訓、知識和卓越見解,來幫助眾多公司取得成功。
我們擁有獨一無二的專家和革新者組成的龐大網絡,他們通過圖書、文章、會議和我們的在線學習平臺分享他們的知識和經驗。O'Reilly的在線學習平臺允許你按需訪問現場培訓課程、深入的學習路徑、交互式編程環境,以及O'Reilly和200多家其他出版商提供的大量文本和視頻資源。有關的更多信息,請訪問http://oreilly.com。
如何聯系我們
對于本書,如果有任何意見或疑問,請按照以下地址聯系本書出版商。
美國:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中國:
北京市西城區西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術咨詢(北京)有限公司
要詢問技術問題或對本書提出建議,請發送電子郵件至errata@oreilly.com.cn。
本書配套網站https://oreil.ly/learning-ray上列出了勘誤表、示例以及其他信息。
關于書籍和課程的新聞和信息,請訪問我們的網站https://oreilly.com。
我們在LinkedIn上的地址:https://linkedin.com/company/oreilly-media。
我們在Twitter上的地址:https://twitter.com/oreillymedia。
我們在YouTube上的地址:https://youtube.com/oreillymedia。
致謝
我們要感謝O'Reilly團隊成員,在他們的幫助下,這本書得以順利出版。特別感謝勤勞的編輯Jeff Bleiel,他給予了寶貴的意見和反饋。非常感謝Jess Haberman,他在寫作的早期階段和我們進行了許多富有成果的討論,并保持開放的態度。我們還要感謝O'Reilly的許多人,包括Katherine Tozer、Chelsea Foster和Cassandra Furtado。
非常感謝所有審稿人的寶貴意見和建議,他們是Mark Saroufim、Kevin Ferguson、Adam Breindel和Jorge Davila-Chacon。我們還要感謝以各種方式協助我們完成本書的Anyscale同事,包括Sven Mika、Stephanie Wang、Antoni Baum、Christy Bergman、Dmitri Gekhtman、Zhe Zhang等人。
除此之外,我們還要衷心感謝Ray的貢獻者團隊和社區給予我們的支持與反饋,以及Anyscale的投資人對Ray項目的支持。
我(Max)還要感謝Pathmind團隊在項目早期的支持,特別是Chris Nicholson,對于他多年以來的幫助,我的感激之情無以言表。特別感謝在寫作過程中Winterhude的Espresso Society提供了上好的咖啡。越來越多基于GPT-3的工具也提供了很大的幫助。我還要對家人表示感謝,感謝他們的鼓勵和耐心。一如往常,如果沒有Anne,這一切都不可能實現,她總是在最關鍵的時刻給予我支持,即使工作占用了我的大部分精力。
[1] workload(工作負載)在本書中多譯作計算任務(或簡稱為任務)。
[2] 翻譯本書時,Ray的最新版本是2.6.1,已正式支持Python 3.10。
- 在最好的年紀學Python:小學生趣味編程
- GraphQL學習指南
- Visual Basic程序開發(學習筆記)
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第2版)
- INSTANT Django 1.5 Application Development Starter
- Spring Boot實戰
- Getting Started with Python and Raspberry Pi
- 零代碼實戰:企業級應用搭建與案例詳解
- PyQt編程快速上手
- 零基礎學C語言(第4版)
- Visual Basic語言程序設計基礎(第3版)
- Bitcoin Essentials
- VMware vSphere Design Essentials
- MySQL數據庫教程(視頻指導版)
- Python程序設計:基礎與實踐