
Mars هو إطار موحد قائم على الموتر لحساب البيانات على نطاق واسع والذي يقيس Numpy ، Pandas ، Scikit-Learn والعديد من المكتبات الأخرى.
الوثائق ، 中文文档
المريخ سهل التثبيت بواسطة
pip install pymarsعندما تريد المساهمة في الكود في المريخ ، يمكنك اتباع الإرشادات أدناه لتثبيت المريخ للتنمية:
git clone https://github.com/mars-project/mars.git
cd mars
pip install -e " .[dev] "يمكن العثور على مزيد من التفاصيل حول تثبيت المريخ في قسم التثبيت في مستند المريخ.
بدء وقت تشغيل جديد محليًا عبر:
> >> import mars
> >> mars . new_session ()أو الاتصال بمجموعة المريخ التي تمت تهيئتها بالفعل.
> >> import mars
> >> mars . new_session ( 'http://<web_ip>:<ui_port>' )يوفر Mars Tensor واجهة مألوفة مثل 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
أوقات وحدة المعالجة المركزية: المستخدم 11.6 s ، sys: 8.22 s ،
المجموع: 19.9 ق
وقت الجدار: 22.5 s
| 3.14161908
أوقات وحدة المعالجة المركزية: المستخدم 966 مللي ثانية ، النظام: 544 مللي ثانية ،
المجموع: 1.51 ق
وقت الجدار: 3.77 ق
|
يمكن للمريخ الاستفادة من النوى المتعددة ، حتى على جهاز كمبيوتر محمول ، ويمكن أن يكون أسرع لإعداد موزع.
يوفر Mars DataFrame واجهة مألوفة مثل Pandas.
| الباندا | MARS DataFrame |
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 ()) |
أوقات وحدة المعالجة المركزية: المستخدم 10.9 s ، sys: 2.69 s ،
المجموع: 13.6 ق
وقت الجدار: 11 ثانية
| أوقات وحدة المعالجة المركزية: المستخدم 1.21 S ، SYS: 212 MS ،
المجموع: 1.42 ق
وقت الجدار: 2.75 s
|
يوفر Mars Learn واجهة مألوفة مثل 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_ ) |
يتكامل المريخ أيضًا مع العديد من المكتبات:
يتيح Mars Remote للمستخدمين تنفيذ وظائف بالتوازي.
| مكالمات وظيفة الفانيليا | المريخ عن بعد |
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
أوقات وحدة المعالجة المركزية: المستخدم 32.2 s ، sys: 4.86 s ،
المجموع: 37.1 ق
وقت الجدار: 12.4 ثانية
| 3.1416312
أوقات وحدة المعالجة المركزية: المستخدم 616 مللي ثانية ، النظام: 307 مللي ثانية ،
المجموع: 923 مللي ثانية
وقت الجدار: 3.99 s
|
الرجوع إلى داسك على المريخ لمزيد من المعلومات.
يدعم MARS الوضع المتحمس الذي يجعله ودودًا للتطوير وسهل التصحيح.
يمكن للمستخدمين تمكين الوضع المتحمس بالخيارات ، وتعيين الخيارات في بداية البرنامج أو جلسة وحدة التحكم.
> >> 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
>> > ...إذا كان الوضع المتحمس في تشغيل ، فسيتم تنفيذ Tensor و DataFrame وما إلى ذلك على الفور عن طريق الجلسة الافتراضية بمجرد إنشائها.
> >> 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 يمتلك MARS أيضًا تكاملًا عميقًا مع RAY ويمكنه تشغيل Ray بكفاءة ويتفاعل مع النظام الإيكولوجي الكبير للتعلم الآلي والأنظمة الموزعة المصممة على أعلى الأشعة الأساسية.
بدء المريخ الجديد على Ray Runtime محليًا عبر:
import mars
mars . new_session ( backend = 'ray' )
# Perform computationالتفاعل مع مجموعة بيانات Ray:
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 ())الرجوع إلى المريخ على راي لمزيد من المعلومات.
يمكن للمريخ التوسع في آلة واحدة ، وتوسيع نطاقها إلى مجموعة مع آلاف الآلات. من السهل إلى حد ما الترحيل من جهاز واحد إلى مجموعة لمعالجة المزيد من البيانات أو الحصول على أداء أفضل.
من السهل توسيع نطاق المريخ إلى مجموعة من خلال بدء مكونات مختلفة من وقت التشغيل الموزعة على المريخ على أجهزة مختلفة في الكتلة.
يمكن اختيار العقدة كمشرف قام بدمج خدمة الويب ، وترك العقد الأخرى كعمال. يمكن أن يبدأ المشرف بالأمر التالي:
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 لمزيد من المعلومات.
الرجوع إلى تشغيل على الغزل لمزيد من المعلومات.
شكرا لك مقدمًا على مساهماتك!