...
Verzije
verzija | modul | python | Supek | Padobran |
---|---|---|---|---|
2.4.0 | scientific/ray/2.4.0-rayproject | 3.9 |
Dokumentacija
- Službena dokumentacija - https://www.ray.io/
- Priručnik - https://docs.ray.io/en/latest
Primjeri
Ispod se nalaze neki primjeri funckionalnosti koje Ray pruža poput:
2.10.0 | scientific/ray/v2.10.0 | 3.8 |
|
Note | ||
---|---|---|
| ||
Python aplikacije i knjižnice na Supeku su dostavljene u obliku kontejnera i zahtijevaju korištenje wrappera kao što je opisano ispod. Više informacija o python aplikacijama i kontejnerima na Supeku možete dobiti na sljedećim poveznicama: |
Dokumentacija
- Službena dokumentacija - https://www.ray.io/
- Priručnik - https://docs.ray.io/en/latest
Primjeri pokretanja na Supeku
Ispod se nalaze neki primjeri funckionalnosti koje Ray pruža poput:
- Sučelja Ray Train u svrhu treniranja modela PyTorch
- Sučelja Ray Tune u svrhu optimizacije hiperparametara modela TensorFlow
- Sučelja Ray
- Sučelja Ray Train u svrhu treniranja modela PyTorch
- Sučelja Ray Tune u svrhu optimizacije hiperparametara modela TensorFlow
- Sučelja Ray Air u svrhu pronalaženja najboljeg Scikit-Learn modela za klasifikaciju
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#!/bin/bash
#PBS -l select=2:ngpus=2:ncpus=16
#PBS -e output/
#PBS -o output/
# environment
module load scientific/ray/2.4.0-rayproject
# cd
cd ${PBS_O_WORKDIR:-""}
# run
ray-launcher.sh train-pytorch.py |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#!/bin/bash
#PBS -l select=2:ngpus=2:ncpus=16
#PBS -e output/
#PBS -o output/
# environment
module load scientific/ray/2.4.0-rayproject
# cd
cd ${PBS_O_WORKDIR:-""}
# run
ray-launcher.sh tune-tensorflow.py
|
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#!/bin/bash #PBS -l select=12:ngpus=1:ncpus=4 #PBS -e output/ #PBS -o output/4 # environment # module load scientific/ray/2.4.0-rayproject # cd cd ${PBS_O_WORKDIR:-""} # run ray-launcher.sh sklearn-automl.py |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
# sources:
# 1) data - https://archive.ics.uci.edu/dataset/15/breast+cancer+wisconsin+original
import os
import glob
import numpy as np
import pandas as pd
import itertools
import ray
from ray import air, tune
from ray.air import Checkpoint, session
from ray.train.sklearn import SklearnTrainer
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_validate
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
def get_estimators(estimators):
for model, options in estimators.items():
options_cross = itertools.product(*options.values())
options_keys = options.keys()
for options_row in options_cross:
yield model(**{key: value for key, value in zip(options_keys, options_row)})
def cross_validate_config(config, data):
# X, y
df = data.to_pandas()
X = df.drop(columns=['id-number', 'diagnosis'])
y = df['diagnosis'].map({'M': 1, 'B': 0})
# cv
result = cross_validate(estimator=config['estimator'],
X=X,
y=y,
scoring="f1",
n_jobs=1)
# output
results = { "f1": result['test_score'].mean() }
session.report(results)
def main():
# train, test
data = ray.data.read_csv('wdbc.data')
train, test = data.train_test_split(test_size=0.2)
# estimator space
estimators = {
SVC: {
'kernel': ['linear',
'poly',
'rbf',
'sigmoid'],
'C': [1,
4,
16],
},
DecisionTreeClassifier: {
'max_depth': [None,
2,
8,
32],
'splitter': ['best',
'random'],
},
KNeighborsClassifier: {
'algorithm': ['auto',
'ball_tree',
'kd_tree',
'brute'],
'weights': ['uniform',
'distance'],
},
MLPClassifier: {
'hidden_layer_sizes': [10,
40,
160],
'activation': ['identity',
'logistic',
'tanh'],
},
}
estimators = list(get_estimators(estimators))
# grid search
trainable = tune.with_parameters(cross_validate_config, data=train)
param_space = {"estimator": tune.grid_search(estimators),
"n_splits": 5}
tune_config = tune.TuneConfig(metric="f1",
mode="max")
tuner = tune.Tuner(trainable=trainable,
param_space=param_space,
tune_config=tune_config)
result_grid = tuner.fit()
best_result = result_grid.get_best_result()
print(best_result)
print(best_result.config)
if __name__ == '__main__':
import ray
ray.init(address='auto',
_node_ip_address=os.environ['NODE_IP_ADDRESS'])
main() |
...
)
if __name__ == '__main__':
import ray
ray.init(address='auto',
_node_ip_address=os.environ['NODE_IP_ADDRESS'])
main() |
Primjer pokretanja na Padobranu
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#!/bin/bash
#PBS -q cpu
#PBS -l select=1:ncpus=20:mem=20GB
# environment
module load scientific/ray/v2.10.0
# cd
cd ${PBS_O_WORKDIR}
# run
ray-run python3 ime_vase_py_skripte.py |
Napomene za pokretanje na Supeku
Tip | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Za ispravno korištenje knjižnice Ray, dostavljen je wrapper ray-launcher.sh koji osigurava pravilno zauzimanje dodijeljenih resursa stvaranjem Ray klastera i omogućava pokretanje aplikacija kroz ray.init API U skripti posla PBS, potrebno je pozvati skriptu Python na sljedeći način:
Dok se u skripti Python sučelje Ray incijalizira na sljedeći način:
|
...