Staff.fmi.uvt.ro



Laborator Procesarea Volumelor Mari de DateAnul 1 master Bioinformatic?Anul 1 IACDAnul 1 SecuritateNecesit? ?i parcurgerea cursurilor de calcul paralel ?i distribuit.Structur? laboratorlaborator 1: introducere in Google cloud (interfa?a web). Creare conturi.laborator 2-3: gcloud (instan?e, discuri, snapshot-uri, imagini).Laborator 4-10: instalare OpenMP, MPI, CUDA ?i testare pe aplica?ie exemplu. laborator 11-14: implementarea aplica?iilor da?i ca temeNoti?e laboratorInstalare Google Cloud SDK Interfa?are din linie de comand? cu Google CloudToate comenziile din linia de comand? pot fi executate ?i din interfa?a webAdres?: Documenta?ie: Comenzi de baz?ini?ializare> gcloud initajutor> gcloud helpconsol? interactiv?> gcloud alpha interactiveNOT?: Necesit? instalarea componentelor alpha:> gcloud components install alphaLansarea unei instan?e listare imagini disponibile> gcloud compute images listpornirea unei ma?ini virtuale cu o imagine predefinit?> gcloud compute instances create PRIMA_INSTANTA --image-family debian-9 --image-project debian-cloudpornirea unei ma?ini virtuale cu GPU-uri ata?ate unei ma?ini virtuale cu o imagine personalizat? (a se vedea ?i pct. 6)> gcloud compute instances create PRIMA_INSTANTA --image NUME_SNAPSHOTsau > gcloud compute instances create PRIMA_INSTANTA --image NUME_IMAGINE listarea instan?elor disponibile (pentru a vedea starea acestora)> gcloud compute instances listlistarea st?rii unei anumite instan?e> gcloud compute instances describe PRIMA_INSTANTAoprirea unei anumite instan?e> gcloud compute instances stop PRIMA_INSTANTANot?: Nu induce costuri (except?nd dac? are ata?at? resurse permanente: discuri, ...)repornirea unei instan?e oprite> gcloud compute instances start PRIMA_INSTANTA?tergerea unei anumite instan?e> gcloud compute instances delete PRIMA_INSTANTAConectarea la o instan??> gcloud compute ssh PRIMA_INSTANTANOT?: Pentru ma?ini Linux odat? conectat se vor putea trimite comenzi ca ?n orice consol?. Pentru deconectare se tasteaz? exit.Ad?ugarea de disk-uri de stocare persistente> gcloud compute disks create PRIMUL_DISC --size 600GB --type pd-standard PRIMA_INSTANTA> gcloud compute instances attach-disk PRIMA_INSTANTA --disk PRIMUL_DISCCreare de snapshot-urilistarea snapshot-urilor din proiect> gcloud compute snapshots listcrearea unui snapshop> gcloud compute ssh PRIMA_INSTANTA > sudo sync> gcloud compute disks snapshot PRIMUL_DISC --snapshot-name NUME_SNAPSHOTSalvare snapshot pe alt disk:> gcloud compute disks create DISC_NOU --source_snapshot NUME_SNAPSHOT –type pd-standardlistarea detaliilor despre un anumit snapshot> gcloud compute snapshots describe PRIMUL_SNAPSHOTredimensionarea unui snapshot> gcloud compute disks create PRIMUL_DISC_MARIT --source-snapshot NUME_SNAPSHOT –size=600GB?tergerea unui snapshot> gcloud compute snapshots delete NUME_SNAPSHOTCrearea unei imagini personalizate> gcloud compute disks snapshot NUME_DISC --snapshot-name NUME_SNAPSHOT> gcloud compute disks create NUME_DISC_NOU --source_snapshot NUME_SNAPSHOT --type pd-standard --size 10> gcloud compute images create NUME_IMAGINE --source_disk NUME_DISC_NOUCopierea de fi?iere ?ntre ma?ina local? ?i intan?a cloud> gcloud compute scp NUME_INSTANTA:CALE_SURSA CALE_DESTINATIE> gcloud compute scp CALE_SURSA NUME_INSTANTA:CALE_DESTINATIEDockercontainere: ma?ini virtuale lightweightPacket software ce con?ine tot ce este necesar pentru a rula o aplica?ieadres?: din ma?ina virtual?:> sudo apt-get update> wget $(. /etc/os-release; echo "$ID")/gpg > sudo apt-key add gpg> sudo apt-key fingerprint 0EBFCD88> sudo add-apt-repository \ "deb [arch=amd64] \ $(lsb_release -cs) \ stable"> sudo apt-get update> sudo apt-get install docker-ce> sudo docker run hello-worldCreare containerese creaz? un fi?ier numit Dockerfile (f?r? extensie)# Use an official Python runtime as a parent imageFROM python:2.7-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appADD . /app# Run app.py when the container launchesCMD ["python", "app.py"]se ruleaz? comanda de build (creaz? imaginea)> sudo docker build -t primulcontainer .?n exemplul anterior . este calea c?tre fi?ierele pentru contextul de creare a daemonulu Docker. Practic toate fi?ierele din directorul curent sunt trimise nu doar cele specificate ?n ADD ?n fi?ierul Docker.Rulare containere> sudo docker run primulcontainer sau pentru a-l ?terge dup? rulare > sudo docker run --rm primulcontainerListare containere existente> sudo docker ps –aExecu?ie comand? ?n interiorul unui container care ruleaz? (docker run ...)> sudo docker exec -ti primulcontainer COMANDA [LISTA ARGUMENTE]Comanda trebuie s? fie un executabil ?i containerul trebuie s? ruleze deja (docker run)!Sau: > docker run --name primulcontainer --rm -i -t ubuntu bashExecut? comenzi ?n container: exemplu comenzi bash: echo ?i exit> echo test> exit?tergere container dup? nume/ID> sudo docker rm primulcontainerBioinformatic? simpl? (acces date ?i procesare simpl? folosind SAMTOOLS)acces la protocolul HTSGET definit de Global Alliance for Genomics and Healthexemplu: Statistic? pe 1500 de intr?ri pentru cromozomul 11 folosind SAMTOOLS (Sequence Alignment Map)> docker network create test> docker run -d --network=test --name=htsget gcr.io/genomics-tools/htsget> docker run --network=test gcr.io/genomics-tools/samtools flagstat aplica?ie OpenMP pe o instan?? cu mai multe procesoarese creaz? o instan?? cu cel pu?in dou? procesoarese instaleaz? gcc (dac? nu e instalat)se compileaz? codul C ?i se execut?> gcc -o exemplu-openmp -fopenmp exemplu-openmp.c> export OMP_NUM_THREADS=2>./exemplu-openmpExemplu demonstrativ:#include <omp.h>#include <stdio.h>#include <stdlib.h>int main (int argc, char *argv[]) {int nthreads, tid;/* Fork a team of threads giving them their own copies of variables */#pragma omp parallel private(nthreads, tid) { /* Obtain thread number */ tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } /* All threads join master thread and disband */ }Rulare aplica?ie MPI pe mai multe instan?ese creaz? o imagine ce con?ine mpich2 (sau alt? bibliotec?) ?i codul MPI compilat cu biblioteca MPI aleas? codul MPI implementat se compileaz? ?i se testeaz?:> mpicc -o executabil mpi-test.c> mpirun -np 1 executabilse lanseaz? mai multe instan?e cu aceea?i imagineeste important ca aplica?ia MPI s? fie instalat? pe fiecare ma?in? virtual?se d? drept de acces SSH inter-instan?e pe baz? de cheievede?i: Pe fiecare instan?? se genereaz? perechea de cheie public?-privat?> ssh-keygen -t rsa?n directorul .ssh se vor crea dou? fi?iere: id_rsa ?i (cheia privat?) .pub (cheia public?). Se copiaz? con?inutul fi?ierului .pub de pe ma?ina unde a fost rulat? comanda ?n fi?ierul .ssh/authorized_keys de pe toate celelalte ma?ini.Se repet? procedura pentru fiecare ma?in? ?n parte.se creaz? un fi?ier hostfile pe fiecare instan?? ?n directorul unde este codul MPI. Acesta este un fi?ier text ce con?ine pe fiecare r?nd numele instan?elor ce vor fi folosite pentru a executa ?n paralel codul MPI.IP-ul poate fi g?sit rul?nd:> gcloud compute instances listse ruleaz? codul MPI cu comanda:> mpirun -np NR_INSTANTE --hostfile=hostfile executabilExemplu demonstrativ:#include <mpi.h>#include <stdio.h>int main(int argc, char** argv) {// Initialize the MPI environment. The two arguments to MPI Init are not// currently used by MPI implementations, but are there in case future// implementations might need the arguments.MPI_Init(NULL, NULL);// Get the number of processesint world_size;MPI_Comm_size(MPI_COMM_WORLD, &world_size);// Get the rank of the processint world_rank;MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);// Get the name of the processorchar processor_name[MPI_MAX_PROCESSOR_NAME];int name_len;MPI_Get_processor_name(processor_name, &name_len);// Print off a hello world messageprintf("Hello world from processor %s, rank %d out of %d processors\n",processor_name, world_rank, world_size);// Finalize the MPI environment. No more MPI calls can be made after thisMPI_Finalize();}Rulare aplica?ie CUDAse creaz? o nou? instan?? cu Ubuntu 16.04 ?i cu accelerator grafic ?i se instaleaz? driverele de CUDA> gcloud compute instances create gpu-instance-1 --accelerator type=nvidia-tesla-k80,count=1 --image imaginenoua --zone us-east1-d --maintenance-policy TERMINATE --restart-on-failure --metadata startup-script='#!/bin/bash echo "Checking for CUDA and installing." # Check for CUDA and try to install. if ! dpkg-query -W cuda-8-0; thenwget dpkg -i?cuda-repo-ubuntu1604_9.2.88-1_amd64.debsudo apt-get install dirmngr --install-recommendssudo apt-key adv --fetch-keys apt-get updatesudo apt-get install cudasudo apt-get install nvidia-cuda-toolkit fi'NOT?: trebuie s? existe alocate resurse (quota) pentru acceleratoare ?n proiect altfel nu se pot porni instan?e cu GPU-uriNOT?: pa?ii din if pot fi efectua?i ?i manual din consol?. Pentru alte variante de Linux vede?i pagina: testeaz? instalarea> nvidia-smise seteaz? variabilele de mediu CUDA> echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc> echo 'export PATH=$PATH:$CUDA_HOME/bin' >> ~/.bashrc> echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64' >> ~/.bashrc> source ~/.bashrcprogramele CUDA se salveaz? cu extensia .cuprogramele CUDA se compileaz? ?i se testeaz? folosind> sudo nvcc program-cuda.cu -o executabil-cuda> ./executabil-cudaCloud Dataprocserviciu cloud pentru clustere Hadoop ?i Sparkcreare cluster> gcloud dataproc clusters create NUME_CLUSTERgestiunea num?rului de noduri pe cluster> gcloud dataproc clusters update NUME_CLUSTER --num-workers NUMAR_NODURI?tergere cluster> gcloud dataproc clusters delete NUME_CLUSTER> gsutil rm gs://bucket/subdir/**Buckets (stocare date)creare> gsutil mb gs://NUME_BUCKET/?nc?rcare/desc?rcare/?tergere obiecte (fi?iere)> sutil cp FISIER_LOCAL gs://NUME_BUCKET/> sutil cp gs://NUME_BUCKET/ DIRECTOR_LOCAL> sutil rm gs://NUME_BUCKET/NUME_OBIECTRulare aplica?ie Hadooprulare aplica?ie existent? local> gcloud dataproc jobs submit hadoop --cluster NUME_CLUSTER --class PACHET.CLASA --jars NUME_JAR1 NUME_JAR2 -- ARG1 ARG2rulare aplica?ie care este deja ?nc?rcat? pe cluster> gcloud dataproc jobs submit hadoop --cluster NUME_CLUSTER --jar -- wordcount gs://NUME_BUCKET/NUME_FISIER_INTRARE.txt gs://NUME_BUCKET/NUME_FISIER_IESIRERulare aplica?ie Spark (core, streaming, graphx)> gcloud dataproc jobs submit spark --cluster NUME_CLUSTER --jar --class org.apache.spark.examples.JavaWordCount gs://NUME_BUCKET/NUME_FISIER_INTRARE.txtexemplu: calculul num?rului Pi folosind metoda Monte Carlo> gcloud dataproc jobs submit spark --cluster NUME_CLUSTER --class org.apache.spark.examples.SparkPi --jars -- 1000se pot scrie aplica?ii Spark ?n Java, Python, Scala Exerci?ii (se lucreaz? ?n echipe mixte de 3 persoane de la Bioinformatic?, IACD ?i SC)Un model de raport technic se afl? la .(toate sec?iile) Implementa?i aplica?ia de calcul a num?rul PI folosind tehnica Monte Carlo, secven?ial, ?n (1) OpenMP, (2) MPI ?i (3) CUDA sau Spark. Analiza?i scalabilitatea tare ?i slab? conform celor discutate ?n cadrul cursurilor. G?si?i punctul critic (momentul c?nd precizia nr. PI nu mai cre?te semnificativ raportat la cre?terea timpului de execu?ie). Testa?i codul pe: o instan?? cu 1-24 core-uri (OpenMP), 1-8 VM (MPI) ?i un GPU (CUDA). Testa?i pe minim 100M, 1000M, 10000M de puncte.Vede?i pentru o implementare corect? ?n OpenMP + discu?ie. Aten?ie la func?ia rand()! Vede?i ?i cursul 3.(toate sec?iile) Implementa?i algoritmul de calcul Smith-Waterman pentru alinierea local? a unei secven?e ?n OpenMP, MPI ?i CUDA. Analiza?i scalabilitatea tare ?i slab? conform celor discutate ?n cadrul cursurilor. Discuta?i eficien?a fiec?rei metode de paralelizare ?n parte. Se vor folosi matrici de cel pu?in 100x100. Configura?iile sistemului vor fi acelea?i ca la problema 1. Contribu?ii a?teptate: bioinformatic? – explica?ie algoritm; IACD – implementare cod paralel; SC – aspecte de securitate, confiden?ialitate ?i etic?. Se va prezenta un referat care s? ating? toate punctele de mai sus.Articole utile: ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download