跳轉到主要內容
工程的博客”>
             <noscript>
              <img data-gatsby-image-ssr=

射線在磚

分享這篇文章

2023年5月更新:我們推出以來指導使用射線引發更新,請參考博客最新的變化。


是一個開源項目開發的第一RISELab使它簡單規模任何Python計算密集型工作負載。與一組豐富的庫和集成框架,建立在一個靈活的分布式執行射線帶來了新的用例和簡化了開發定製的分布式的Python函數通常是複雜的創建。

射線上的運行Apache火花™集群創建分發PySpark udf的內部代碼的能力以及Python代碼,隻是司機節點上運行。它還增加了能夠使用射線的可伸縮的強化學習RLlib開箱即用的。這些能力允許廣泛的新的應用程序。

為什麼需要另一個分布式框架之上的火花嗎?

有兩種方法可以考慮如何分配一個函數在一個集群。第一種方法是部分數據集的分割和功能作用於每個部分並收集結果。這就是所謂的數據並行性,在大數據是最常見的形式,和最好的例子是Apache火花。現代形式的數據並行性框架通常DataFrame功能,其目的並非為低層建築內部的分布式操作,如手工函數之外的udf(用戶自定義函數)。

數據並行性是最常見的方式分發任務在集群。這裏,部分數據集分割和功能作用於每個部分並收集結果。”src=
圖1:數據並行性

另一種形式的分布函數是當數據集很小,但足夠複雜的操作,隻是不同的分區上運行相同的函數並不能解決這個問題。這被稱為任務並行性或邏輯並行性和描述當許多功能可以同時運行和設置在複雜管道使用參數服務器和調度器協調依賴關係。這種類型的並行性主要是發現在HPC(高性能計算)或自定義分布式工作,不可能與DataFrame操作。通常,這些框架意味著從頭開始設計分布式功能。例子包括物理模擬、金融交易算法和先進的數學計算。

任務並行分配任務在集群的另一種方法,通常用於更複雜的用例。在這裏,很多任務可以同時運行在一個複雜的管道。”src=
圖2:任務並行性

然而,許多任務並行和傳統HPC Python庫為c++編寫,而不是工作負載(要求在許多科學數據管道)和推廣不夠適應定製工作要求等先進的設計模式。他們也可以對硬件的優化多核CPU架構,比如改善線性代數操作的性能在一個機器,而不是跨集群分發功能。這樣的硬件庫也可以創建專門的硬件雲硬件而不是商品。大多數任務並行庫的主要困難是需要創建任務之間的依賴關係的複雜性和大量的開發時間。為了克服這些挑戰,已研製出許多開源的Python庫,結合簡單的Python和規模定製任務的能力。

最好的一個最近的例子或邏輯在Python中並行的任務是射線。它的簡單性、低延遲快速創建分布式調度和能力非常複雜的分布函數之間的依賴關係解決了普遍性的問題,可伸縮性和複雜性。看到一個溫柔的介紹射線為更多的細節。

一個簡單的介紹射線架構

雷架構”src=
圖3:射線架構

雷的架構的一個重要的區別是,有兩個層次的抽象如何安排工作。雷將本地係統視為一個集群,獨立的進程,或Raylets,功能類似於一個節點在典型的大數據術語。還有一個全球調度程序,它可以將單獨的機器作為節點。這允許高效的從單一節點擴展或筆記本電腦水平發展到大規模雲計算。每個節點都有自己的本地的調度器,也可以與全球通信調度程序,一個任務可以從任何節點發送其餘的集群。該功能允許開發人員創建遠程任務可以觸發其他遠程任務,使許多麵向對象編程的設計模式的分布式係統,這是至關重要的一個圖書館為從頭創建分布式應用程序設計的。還有一個節點管理全球控製儲存,跟蹤任務的函數,事件和其他係統級元數據。

工作者節點之間的數據流圖和gc”src=
圖4:工人節點之間的數據流圖和gc

射線是一種分布式對象存儲的對象存儲基於Apache箭頭管理共享功能,集群使用的對象和任務。雷的一個最重要的方麵是它的對象存儲內存與內存管理的層次結構為驅逐或持久化對象(Ray v1.2 +)導致內存泄漏。這種高速內存係統允許在大規模高性能通信,但要求有大量的實例內存,以避免內存泄漏。

采取以下的簡單示例中的遠程任務調用另一個遠程任務功能。程序的任務所代表的依賴關係圖和物理執行顯示了對象存儲是常見的變量和結果而函數是獨立工作者節點上執行。

司機和工人的關係的例子節點和對象存儲在應用程序”src=
圖5:司機和工人的關係的節點和對象存儲在應用程序。

遠程類對象(稱為遠程演員射線)允許參數服務器和更複雜的設計模式嵌套樹等演員或功能。使用這個簡單的API和體係結構,可以快速設計複雜的分布式任務而不需要創建底層基礎設施。許多設計模式的例子可以在這裏找到

@ray.remote計數器(對象):def__init__(自我):self.value=0def增量(自我):self.value+=1返回self.valuedefget_counter(自我):返回self.valuecounter_actor = Counter.remote ()

底層架構的更多細節,請參閱雷1.0架構白皮書

雷在磚開始集群

注:官方射線文檔描述了通過RayDP火花集成項目。然而,這是“火花射線”以來磚集群作為集群管理的火花開始而不是能夠初始化一個射線集群。雷也不是官方支持的磚。

一些自定義設置之前需要能夠運行射線Databrick腳本。一個init腳本是一個shell腳本,在啟動前的每個集群節點運行Apache火花司機或工人JVM開始。說明如何配置一個init腳本可以被發現在這裏

運行下麵的細胞在一個磚筆記本創建init腳本:

% pythonkernel_gateway_init =”“# ! / bin / bash#雷港口RAY_PORT = 9339REDIS_PASS = "d4t4bricks#安裝光/磚/ python / bin / pip安裝線#安裝額外的射線庫/磚/ python / bin / pip安裝射線(調試、儀表板曲調,rllib,服務)#如果火花驅動節點上啟動,初始化雷頭節點#如果火花工人開始節點,連接頭光節點如果[!- zDB_IS_DRIVER美元)& & (DB_IS_DRIVER美元= TRUE);然後回聲”開始的頭節點雷開始——min-worker-port = 20000——max-worker-port = 25000——temp-dir = "/ tmp /雷”——頭——端口=RAY_PORT美元——redis-password = "REDIS_PASS美元”——include-dashboard = false其他的睡眠40回聲”啟動non-head節點連接DB_DRIVER_IP美元:RAY_PORT美元雷開始——min-worker-port = 20000——max-worker-port = 25000——temp-dir = "/ tmp /雷”——地址= "DB_DRIVER_IP美元:RAY_PORT美元”——redis-password = "REDIS_PASS美元fi”“#“用戶名”改成你的磚在DBFS用戶名#例子:用戶名= "(電子郵件保護)用戶名= " <用戶名>”dbutils.fs.put (“dbfs: /用戶/ {0}/ init / ray.sh”kernel_gateway_init .format(用戶名),真正的)< /用戶名>

配置集群運行init腳本的筆記本上創建啟動集群。高級選項,如果使用集群UI,看起來應該是這樣的:

先進的集群配置示例”src=
圖6:先進的集群配置的例子

Python分發udf

用戶定義的函數(udf)很難優化線性函數的內部仍然運行。有選項可以幫助優化等火花UDF使用熊貓UDF,它使用Apache箭頭與數據傳輸數據和熊貓,這可以幫助UDF性能。這些選項允許硬件優化,但是雷可用於邏輯優化大幅度減少複雜的Python運行時的任務,通常不能夠分布。例子包括在連接筆記本電腦用於分發毫升模型在一個UDF來實現2倍的性能。

強化學習

示例圖的射線可以用來強化學習”src=
圖7:圖的強化學習

機器學習的一個重要的和不斷增長的應用是強化學習中可以毫升代理培訓學習行為的環境回報函數最大化。它的應用範圍很廣,從自主駕駛功耗優化最先進的遊戲。強化學習是機器學習的第三個主要類別以及非監督和監督學習。

創建強化學習應用程序的挑戰包括需要創建一個學習環境或模擬的代理可以火車,擴展的複雜性,以及缺乏開源標準。每個應用程序需要一個環境,通常是定製,通過曆史記錄或物理模擬,可以提供每一個行動代理可以執行的結果。這樣的模擬環境的例子包括OpenAI健身房(環境從雅達利經典遊戲機器人),卡拉(開源駕駛模擬器),或張量貿易(培訓股市交易算法)。

這些模擬的規模,他們不能簡單地分區的數據集上運行。一些模擬之前將完成他人,他們必須交流的機器學習模型的權重回歸中央服務器模型整合在最簡單的形式的分布式模型的訓練。因此,這就變成了一個任務並行性問題,它不是大數據,而是計算許多同步計算的高複雜性。最後一個問題是缺乏強化學習的開源標準庫。而深度學習或傳統機器學習有更多的時間來建立標準或庫橋框架(如MLflow)的差異,強化學習是一種年輕的發展,還沒有一個完善的標準模型庫,可以相差很大。這將導致更多的發展的時候切換算法或框架。

要解決這些問題,光有強化學習圖書館命名RLlib高可伸縮性和一個統一的API。它可以運行OpenAI健身房和用戶定義的環境,可以訓練在一個非常廣泛的算法和支持TensorFlow和PyTorch潛在的神經網絡。RLlib結合磚允許高度可伸縮的好處流和數據集成與三角洲湖的高性能先進的強化學習模型。

RLlib使用調優一線庫可伸縮hyperparameter調優運行變化的模型來找到最好的一個。在這個代碼示例中,它運行一個PPO(近端政策優化)代理OpenAI健身房的CartPole環境和執行網格搜索學習速率的三個選項。在引擎蓋下麵是火花的射線過程節點運行模擬環境和發送回批中心培訓射線火車這些批次的模型的過程。然後將模型發送到推出員工收集更多的培訓數據。雖然教練過程可以使用gpu加速訓練,通過“num_gpus”設置為0,它將火車便宜CPU上的節點。

雷•庫優化使用近端政策優化(PPO)架構加速模型的訓練。”src=
圖8:PPO架構
進口調優
              tune.run (“PPO”,停止= {“episode_reward_mean”:200年},配置= {“env”:“CartPole-v0”,“num_gpus”:0,“num_workers”:3,“lr”:tune.grid_search ([0.01,0.001,0.0001]),},)

強化學習廣泛的應用包括場景無論能夠運行模擬時,可以建立一個成本函數,是一個複雜的問題,堅決的邏輯規則或簡單的試探性模型不能應用中止。最著名的案例強化學習通常research-orientated AlphaGo等重點是遊戲,超人級別的雅達利的代理,或模擬自主駕駛,但有許多現實世界的業務用例。最近的應用程序的例子有機器人操縱控製工廠、功耗優化,甚至市場營銷和廣告的建議。

開始

雷的力量結合的好處使用火花幫助擴大使用磚Lakehouse平台的應用可能通過允許為可伸縮的任務並行性以及強化學習。Beplay体育安卓版本集成結合了可靠性、安全性、分布式計算性能,和廣泛的合作夥伴與三角洲湖集成,利用射線的通用分布式計算框架來添加新的流,毫升,大數據的工作量。

試著筆記本

免費試著磚

相關的帖子

看到所有工程的博客的帖子