Cuprins:
- Pentru a efectua paralelismul multicore cu Python, integrați pachetul Scikit-learn cu pachetul joblib pentru operații consumatoare de timp, cum ar fi replicarea modelelor pentru validarea rezultatelor sau pentru căutarea cei mai buni parametri hiper-parametri. În special, Scikit-learn permite multiprocesarea atunci când
- Este o idee bună să utilizați IPython atunci când executați o demonstrație a modului în care multiprocesarea vă poate economisi timp în timpul proiectelor de știință a datelor. Utilizarea IPython oferă avantajul utilizării comenzii% timeit magic pentru executarea calendarului. Începeți prin încărcarea unui set de date multiclass, algoritm complex de învățare a mașinilor (Vector Classifierul de suport sau SVC) și o procedură de validare încrucișată pentru estimarea scorurilor rezultate din toate procedurile.
Video: Technology Stacks - Computer Science for Business Leaders 2016 2024
Majoritatea calculatoarelor de astăzi sunt multicore (două sau mai multe procesoare într-un singur pachet) cu procesoare fizice multiple. Una dintre cele mai importante limitări ale Python este aceea că utilizează un singur nucleu în mod implicit. (A fost creată într-o perioadă când normele au fost simple.)
Proiectele de date științifice necesită o mulțime de calcule. În special, o parte din aspectul științific al științei datelor se bazează pe teste și experimente repetate pe diferite matrice de date. Nu uitați că lucrul cu cantități mari de date înseamnă că cele mai multe transformări care consumă timp repetă observația după observație (de exemplu, operații identice și nerelevante pe diferite părți ale matricei).
Folosirea mai multor nuclee de CPU accelerează un calcul printr-un factor care aproape se potrivește cu numărul de miezuri. De exemplu, având patru nuclee ar însemna lucrul în cel mai bun caz de patru ori mai rapid. Nu primiți o creștere completă de patru ori, deoarece există o sarcină suplimentară atunci când începeți un proces paralel - noile instanțe Python care rulează trebuie să fie configurate cu informațiile corecte din memorie și lansate; în consecință, îmbunătățirea va fi mai mică decât posibilă, dar încă semnificativă.
Știind cum să folosești mai mult de un CPU este, prin urmare, o abilitate avansată, dar incredibil de utilă, pentru creșterea numărului de analize efectuate și pentru accelerarea operațiunilor atât la înființarea, cât și la utilizarea produselor dvs. de date.
Multiprocesarea funcționează prin replicarea aceluiași cod și conținut de memorie în diferite instanțe Python (lucrătorii), calculând rezultatul pentru fiecare dintre ele și returnând rezultatele colectate către consola originală principală. Dacă instanța dvs. originală ocupă deja o mare parte din memoria RAM disponibilă, nu va fi posibilă crearea de instanțe noi și este posibil ca aparatul să nu funcționeze în memorie.
Paralelism multicorePentru a efectua paralelismul multicore cu Python, integrați pachetul Scikit-learn cu pachetul joblib pentru operații consumatoare de timp, cum ar fi replicarea modelelor pentru validarea rezultatelor sau pentru căutarea cei mai buni parametri hiper-parametri. În special, Scikit-learn permite multiprocesarea atunci când
Validarea încrucișată:
-
Testarea rezultatelor unei ipoteze de învățare a mașinii folosind diferite date de instruire și testare Căutarea în rețea:
-
Schimbarea sistematică a parametrilor hiper-parametri a unei ipoteze de învățare a mașinilor și testarea rezultatelor urmărite Predicția multilobilelor:
-
Rularea unui algoritm de mai multe ori împotriva țintelor multiple atunci când există multe rezultate țintă diferite pentru a prezice în același timp Metode de învățare a ansamblului de mașini:
-
Modelarea unei game largi de clasificatori, fiecare independentă de cealaltă, cum ar fi atunci când se folosește modelarea bazată pe RandomForest Nu trebuie să faci nimic special pentru a profita de calculul paralel - puteți activa paralelismul prin setarea n_jobs -parametrul la un număr de nuclee mai mare de 1 sau prin setarea valorii la -1, ceea ce înseamnă că doriți să utilizați toate instanțele CPU disponibile.
Dacă nu rulați codul din consola sau dintr-un Notebook IPython, este extrem de important să vă separați codul de orice import de pachete sau alocare de variabile globale în scriptul dvs. folosind __name __ == '__ main__': comandă la începutul oricărui cod care execută paralelismul multicore. Instrucțiunea if verifică dacă programul este rulat direct sau este apelat de o consolă Python deja executată, evitând orice confuzie sau eroare de către procesul multiparallel (cum ar fi apelul recursiv al paralelismului).
Demonstrarea multiprocesării
Este o idee bună să utilizați IPython atunci când executați o demonstrație a modului în care multiprocesarea vă poate economisi timp în timpul proiectelor de știință a datelor. Utilizarea IPython oferă avantajul utilizării comenzii% timeit magic pentru executarea calendarului. Începeți prin încărcarea unui set de date multiclass, algoritm complex de învățare a mașinilor (Vector Classifierul de suport sau SVC) și o procedură de validare încrucișată pentru estimarea scorurilor rezultate din toate procedurile.
Cel mai important lucru pe care trebuie să-l cunoaștem este că procedurile devin destul de mari, deoarece SVC produce 10 modele, care se repetă de 10 ori fiecare, folosind fiecare validare încrucișată, pentru un total de 100 de modele.
din sklearn. seturi de date import load_digits digits = load_digits () X, y = cifre. date, cifre. tinta de la sclearn. SVM import SVC din sklearn. cross_validation import cross_val_score% timeit single_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = 1) Out [1]: 1 bucle, trebuie să activați paralelismul multicore și să efectuați timp utilizând următoarele comenzi:
% timeit multi_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = -1) cel mai bun din 3: 11. 7 secunde pe buclă
Mașina de exemplu demonstrează un avantaj pozitiv folosind procesarea multicore, în ciuda folosirii unui set de date mic, în care Python petrece cea mai mare parte a timpului pornind consolele și executând o parte a codului în fiecare. Această depășire, câteva secunde, este încă semnificativă, dat fiind faptul că execuția totală se extinde pentru o mână de secunde. Imaginați-vă ce s-ar întâmpla dacă ați lucrat cu seturi de date mai mari - timpul dvs. de execuție ar putea fi ușor tăiat de două sau de trei ori.
Deși codul funcționează bine cu IPython, punerea în jos într-un script și rugându-l pe Python să o ruleze într-o consolă sau folosind un IDE poate cauza erori din cauza operațiilor interne ale unei sarcini multicore. Soluția este de a pune întregul cod sub o declarație if, care verifică dacă programul a pornit direct și nu a fost apelat după aceea. Iată un exemplu de script:
de la sklearn. seturile de date import_digits de la sklearn. SVM import SVC din sklearn. cross_validation importați cross_val_score dacă __name__ == '__main__': digits = load_digits () X, y = cifre. date, cifre. țintă multi_core_learning = cross_val_score (SVC (), X, y, cv = 20, n_jobs = -1)