Hadoop meetup : HUGFR Construire le cluster le plus rapide pour l'analyse des datas : benchmarks sur un régresseur par Christopher Bourez (Axa Global Direct)
Construire le cluster le plus rapide pour l'analyse des datas : benchmarks sur un régresseur par Christopher Bourez (Axa Global Direct)
Les toutes dernières technologies de calcul parallèle permettent de calculer des modèles de prédiction sur des big datas en des temps records. Avec le cloud est facilité l'accès à des configurations hardware modernes avec la possibilité d'une scalabilité éphémère durant les calculs. Des benchmarks sont réalisés sur plusieurs configuration hardware, allant de 1 instance à un cluster de 100 instances.
Christopher Bourez, développeur & manager expert en systèmes d'information modernes chez Axa Global Direct. Alien thinker. Blog : http://christopher5106.github.io/
COMMENT LE BIGDATA CHANGE LA BUSINESS INTELLIGENCE ?
Similaire à Hadoop meetup : HUGFR Construire le cluster le plus rapide pour l'analyse des datas : benchmarks sur un régresseur par Christopher Bourez (Axa Global Direct)
Similaire à Hadoop meetup : HUGFR Construire le cluster le plus rapide pour l'analyse des datas : benchmarks sur un régresseur par Christopher Bourez (Axa Global Direct) (20)
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Hadoop meetup : HUGFR Construire le cluster le plus rapide pour l'analyse des datas : benchmarks sur un régresseur par Christopher Bourez (Axa Global Direct)
1. Construire le cluster le plus rapide pour
l'analyse des datas : benchmarks sur un
régresseur
Christopher Bourez
16 / 02 / 2016
http://christopher5106.github.io/
2. Présentation
1. Random Forest distribué sur cluster (Spark MLlib)
2. Auto-terminating cloud clusters
3. Random Forest sous GPU (Scala BIDMach)
4. Cluster de GPU
5. Benchmarks
4. Random Forest MLlib (MLib Python)
Développement local avec pyspark
pyspark --master local[4]
Soumission du script en local
spark-submit --master local[4] src/main/python/compute_rf.py myfile.csv
Soumission sur le cluster
5. from pyspark import SparkConf, SparkContext
sc = SparkContext()
file = sc.textFile(filename)
from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.linalg import SparseVector
from pyspark.mllib.regression import LabeledPoint
Script .py
6. Transformation au format LabeledPoint
def transform_line_to_labeledpoint(line):
values = line.split(";")
if values[index_label] == "":
label = 0.0
else:
label = float(values[index_label])
vector = []
for i in range(index_expl_start, index_expl_stop):
if values[i] == "":
vector.append(0.0)
else:
vector.append(float(values[i]))
return LabeledPoint(label,vector)
7. Calcul du modèle
file = sc.textFile(“file://test.csv”)
data = file.filter(lambda w: not w.startswith(header)).map
(transform_line_to_labeledpoint)
(trainingData, testData) = data.randomSplit([0.7, 0.3])
trainingData.cache()
testData.cache()
model = RandomForest.trainRegressor(trainingData, categoricalFeaturesInfo=
{},numTrees=2500, featureSubsetStrategy="sqrt",impurity='variance')
11. Transformation scala
val LabeledPointData = data.map(r => {
val values = r.split(";")
val expl = values.zipWithIndex.flatMap {
case ("", i:Int) if (i >= index_expl_start) => Some(0.0)
case (s:String,i:Int) if (i >= index_expl_start) => Some(s.toDouble)
case _ => None }
val label = if(values(index_label) == "") 0.0 else values(index_label).toDouble
LabeledPoint(label,Vectors.dense(expl))
})
12. Calcul du modèle
val data = sc.textFile(“file://test.csv”)
val LabeledPointData = data.map(r => { … } )
val splits = LabeledPointData.randomSplit(Array(0.7, 0.3))
val (trainingData, testData) = (splits(0), splits(1))
val model = RandomForest.trainRegressor(trainingData,
categoricalFeaturesInfo, numTrees, featureSubsetStrategy, impurity, maxDepth,
maxBins)
13. Evaluation
val labelsAndPredictions = testData.map { point =>
val prediction = model.predict(point.features)
(point.label, prediction)
}
val testMSE = labelsAndPredictions.map{ case(v, p) => math.pow((v - p), 2)}.
mean()
println("Test Mean Squared Error = " + testMSE)
println("Learned regression forest model:n" + model.toDebugString)
26. Spark+GPU
Création de plusieurs AMI :
- AMI avec NVIDIA driver et Cuda 7.5
- AMI avec NVIDIA driver, Cuda 7.5, JCuda, BIDMat et BIDMach
- AMI avec NVIDIA driver, Cuda 7.5, JCuda, BIDMat, BIDMach et Spark
Compilation Spark sous Scala 2.11
Lancement du cluster à la mano :
- configuration de conf/slaves et conf/spark-env.sh
- ajout de la clé à l’agent-ssh
- démarrage sbin/start-all.sh
28. Création des data "data%02d.fmat.lz4","label%02d.
imat.lz4"
val file = sc.textFile("myfile.csv")
val header_line = file.first()
val tail_file = file.filter( _ != header_line)
val allData = tail_file.mapPartitionsWithIndex( upload_lz4_fmat_to_S3 )
allData.collect()