mars
v0.10.0

火星是用於大規模數據計算的基於張量的統一框架,可擴展Numpy,Pandas,Scikit-Learn和許多其他庫。
文檔,中文文檔
火星很容易安裝
pip install pymars當您想向火星貢獻代碼時,可以按照以下說明安裝火星進行開發:
git clone https://github.com/mars-project/mars.git
cd mars
pip install -e " .[dev] "有關安裝火星的更多詳細信息,請訪問MARS文檔的安裝部分。
通過:
> >> import mars
> >> mars . new_session ()或連接到已經初始化的火星群集。
> >> import mars
> >> mars . new_session ( 'http://<web_ip>:<ui_port>' )火星張量提供了一個熟悉的接口,例如numpy。
| numpy | 火星張量 |
import numpy as np
N = 200_000_000
a = np . random . uniform ( - 1 , 1 , size = ( N , 2 ))
print (( np . linalg . norm ( a , axis = 1 ) < 1 )
. sum () * 4 / N ) | import mars . tensor as mt
N = 200_000_000
a = mt . random . uniform ( - 1 , 1 , size = ( N , 2 ))
print ((( mt . linalg . norm ( a , axis = 1 ) < 1 )
. sum () * 4 / N ). execute ()) |
3.14174502
CPU時間:用戶11.6 s,系統:8.22 s,
總計:19.9 s
牆時間:22.5 S
| 3.14161908
CPU時間:用戶966 MS,SYS:544 MS,
總計:1.51 s
牆時間:3.77 S
|
火星即使在筆記本電腦上也可以利用多個內核,並且在分佈式設置中甚至可以更快。
火星DataFrame提供了像Pandas這樣熟悉的界面。
| 貓熊 | 火星數據框架 |
import numpy as np
import pandas as pd
df = pd . DataFrame (
np . random . rand ( 100000000 , 4 ),
columns = list ( 'abcd' ))
print ( df . sum ()) | import mars . tensor as mt
import mars . dataframe as md
df = md . DataFrame (
mt . random . rand ( 100000000 , 4 ),
columns = list ( 'abcd' ))
print ( df . sum (). execute ()) |
CPU時間:用戶10.9 s,系統:2.69 s,
總計:13.6 s
牆時間:11 S
| CPU時間:用戶1.21 s,系統:212 ms,
總計:1.42 s
牆時間:2.75 S
|
火星學習提供了一個熟悉的界面,例如Scikit-Learn。
| Scikit-Learn | 火星學習 |
from sklearn . datasets import make_blobs
from sklearn . decomposition import PCA
X , y = make_blobs (
n_samples = 100000000 , n_features = 3 ,
centers = [[ 3 , 3 , 3 ], [ 0 , 0 , 0 ],
[ 1 , 1 , 1 ], [ 2 , 2 , 2 ]],
cluster_std = [ 0.2 , 0.1 , 0.2 , 0.2 ],
random_state = 9 )
pca = PCA ( n_components = 3 )
pca . fit ( X )
print ( pca . explained_variance_ratio_ )
print ( pca . explained_variance_ ) | from mars . learn . datasets import make_blobs
from mars . learn . decomposition import PCA
X , y = make_blobs (
n_samples = 100000000 , n_features = 3 ,
centers = [[ 3 , 3 , 3 ], [ 0 , 0 , 0 ],
[ 1 , 1 , 1 ], [ 2 , 2 , 2 ]],
cluster_std = [ 0.2 , 0.1 , 0.2 , 0.2 ],
random_state = 9 )
pca = PCA ( n_components = 3 )
pca . fit ( X )
print ( pca . explained_variance_ratio_ )
print ( pca . explained_variance_ ) |
火星學習還與許多庫集成:
火星遙控器允許用戶並行執行功能。
| 香草功能調用 | 火星遙控器 |
import numpy as np
def calc_chunk ( n , i ):
rs = np . random . RandomState ( i )
a = rs . uniform ( - 1 , 1 , size = ( n , 2 ))
d = np . linalg . norm ( a , axis = 1 )
return ( d < 1 ). sum ()
def calc_pi ( fs , N ):
return sum ( fs ) * 4 / N
N = 200_000_000
n = 10_000_000
fs = [ calc_chunk ( n , i )
for i in range ( N // n )]
pi = calc_pi ( fs , N )
print ( pi ) | import numpy as np
import mars . remote as mr
def calc_chunk ( n , i ):
rs = np . random . RandomState ( i )
a = rs . uniform ( - 1 , 1 , size = ( n , 2 ))
d = np . linalg . norm ( a , axis = 1 )
return ( d < 1 ). sum ()
def calc_pi ( fs , N ):
return sum ( fs ) * 4 / N
N = 200_000_000
n = 10_000_000
fs = [ mr . spawn ( calc_chunk , args = ( n , i ))
for i in range ( N // n )]
pi = mr . spawn ( calc_pi , args = ( fs , N ))
print ( pi . execute (). fetch ()) |
3.1416312
CPU時間:用戶32.2 s,系統:4.86 s,
總計:37.1 s
牆時間:12.4 S
| 3.1416312
CPU時間:用戶616 MS,系統:307 ms,
總計:923毫秒
牆時間:3.99 S
|
有關更多信息,請參閱火星上的Dask。
火星支持渴望的模式,這使其對開發且易於調試友好。
用戶可以通過選項啟用急切的模式,在程序開頭或控制台會話開始時設置選項。
> >> from mars . config import options
> >> options . eager_mode = True或使用上下文。
> >> from mars . config import option_context
> >> with option_context () as options :
> >> options . eager_mode = True
> >> # the eager mode is on only for the with statement
>> > ...如果急切的模式打開,張量,數據幀等將在創建後立即通過默認情況下執行。
> >> import mars . tensor as mt
> >> import mars . dataframe as md
> >> from mars . config import options
> >> options . eager_mode = True
> >> t = mt . arange ( 6 ). reshape (( 2 , 3 ))
> >> t
array ([[ 0 , 1 , 2 ],
[ 3 , 4 , 5 ]])
> >> df = md . DataFrame ( t )
> >> df . sum ()
0 3
1 5
2 7
dtype : int64 火星還與Ray具有深層集成,並且可以在射線上有效地運行,並與機器學習和分佈式系統的大型生態系統進行交互。
通過以下方式在本地啟動新火星:
import mars
mars . new_session ( backend = 'ray' )
# Perform computation與射線數據集交互:
import mars . tensor as mt
import mars . dataframe as md
df = md . DataFrame (
mt . random . rand ( 1000_0000 , 4 ),
columns = list ( 'abcd' ))
# Convert mars dataframe to ray dataset
ds = md . to_ray_dataset ( df )
print ( ds . schema (), ds . count ())
ds . filter ( lambda row : row [ "a" ] > 0.5 ). show ( 5 )
# Convert ray dataset to mars dataframe
df2 = md . read_ray_dataset ( ds )
print ( df2 . head ( 5 ). execute ())有關更多信息,請參閱火星上的火星。
火星可以擴展到一台機器,並擴展到具有數千台機器的群集。從一台計算機遷移到集群以處理更多數據或獲得更好的性能非常簡單。
通過在群集的不同機器上啟動火星分佈式運行時的不同組件,火星很容易擴展到群集。
可以選擇一個節點作為主管,該主管集成了Web服務,而將其他節點作為工人。主管可以從以下命令開始:
mars-supervisor -h < host_name > -p < supervisor_port > -w < web_port >工人可以從以下命令開始:
mars-worker -h < host_name > -p < worker_port > -s < supervisor_endpoint >所有火星過程開始啟動後,用戶可以運行
> >> sess = new_session ( 'http://<web_ip>:<ui_port>' )
> >> # perform computation有關更多信息,請參考在Kubernetes上運行。
有關更多信息,請參考在紗線上運行。
預先感謝您的貢獻!