
MARS-это унифицированная структура на основе тензора для крупномасштабных вычислений данных, которая масштабирует Numpy, Pandas, Scikit-Learn и многих других библиотек.
Документация, 中文文档
Марс легко установить
pip install pymarsЕсли вы хотите внести код на Марс, вы можете следовать инструкциям ниже, чтобы установить Mars для разработки:
git clone https://github.com/mars-project/mars.git
cd mars
pip install -e " .[dev] "Более подробную информацию об установке MARS можно найти в разделе установки в документе MARS.
Запуск нового времени выполнения локально через:
> >> 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 с, Sys: 8,22 с,
Всего: 19,9 с
Время стены: 22,5 с
| 3.14161908
Время процессора: пользователь 966 мс, Sys: 544 MS,
Всего: 1,51 с
Время стены: 3,77 с
|
Марс может использовать несколько ядер, даже на ноутбуке, и может быть еще быстрее для распределенной обстановки.
Mars DataFrame предоставляет знакомый интерфейс, такой как Pandas.
| Панды | Марс 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 с, sys: 2,69 с,
Всего: 13,6 с
Время стены: 11 с
| Время процессора: пользователь 1,21 с, sys: 212 мс,
Всего: 1,42 с
Время стены: 2,75 с
|
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 Learn также интегрируется со многими библиотеками:
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 с, Sys: 4,86 с,
Всего: 37,1 с
Время стены: 12,4 с
| 3.1416312
Время процессора: пользователь 616 мс, SYS: 307 MS,
Всего: 923 мс
Время стены: 3,99 с
|
Обратитесь к 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
>> > ...Если будет включен стремление, 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 Марс также имеет глубокую интеграцию с Ray и может эффективно работать на лучах и взаимодействовать с большой экосистемой машинного обучения и распределенных систем, построенных на вершине основного луча.
Начав новый Марс на Ray Runtime Locally через:
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 на разных машинах в кластере.
Узел может быть выбран в качестве руководителя, который интегрировал веб -сервис, оставляя другие узлы в качестве работников. Супервизор можно начать со следующей команды:
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 для получения дополнительной информации.
См. Запуск на пряжу для получения дополнительной информации.
Заранее спасибо за ваш вклад!