[Python] Utilizzo completo della cpu

Gianfranco Durin g.durin a inrim.it
Gio 17 Nov 2011 18:00:35 CET


----- Original Message -----
> Ciao lista,
> Vorrei sapere se è possibile utilizzare tutti i core della cpu per
> eseguire calcoli gravosi.
> Ho guardato un po' in internet e  come risposta ho trovato il
> multithreading che ho già utilizzato un paio di volte.
> Però non riesco a capire se è possibile applicarlo anche ad un unico
> comando.
> Mi spiego meglio.
> 
> ho una funzione fp non lineare che deve essere ottimizzata...
> fp = lambda v, x,y,
> phi:(1+v[0]*phi+v[1]*x+v[2]*x*phi+v[3]*y+v[4]*y*phi+v[5]*x**2...
> +v[6]*phi*x**2+v[7]*y**2+v[8]*phi*y**2+v[9]*x*y+v[10]*phi*x*y)/(v[11]+v[12]*phi...
> +v[13]*x+v[14]*x*phi+v[15]*y+v[16]*y*phi+v[17]*x**2+v[18]*phi*x**2+v[19]*y**2...
> +v[20]*phi*y**2+v[21]*x*y+v[22]*phi*x*y)
> 
> 
> imposto la funzione obiettivo
> e = lambda v, x,y, phi, z: (fp(v,x,y,phi)-z)
> 
> e infine avvio il processo di ottimizzazzione ai minimi quadrati
> v, success = leastsq(e, v0, args=(x,y,phi,z), maxfev=10000)
> 
> Questo va avanti per minuti e usa un solo core.
> C'è un modo per suddividere i calcoli di leastsq tra più core?
> (spero di si)
> Grazie a tutti dell'aiuto sempre pronto
> Ciao
> Matteo

Matteo,
oggi ti tempesto...

Io non so nulla di calcolo su più core, ma faccio molto i minimi quadrati.
Se ti interessa sto sviluppando un sistema semplice per fare tutto da riga di comando, lo trovi qui:
 
https://github.com/gdurin/pyFitting

la cosa che ti potrebbe aiutare potrebbe essere utilizzare le derivate analitiche (il mio parametro -d), che diminuiscono sensibilmente il numero di passi da far fare alla routine. Oppure prendi spunto per farlo tu (ho usato sympy e numexpr per compilare e ottimizzare il calcolo)
Per ogni dettaglio puoi vedere qui in un talk che ho fatto di recente:
http://emma.inrim.it:8080/gdurin/talks/fit-the-elefant-on-the-use-of-least-square-methods-from-simple-cases-to-multiparameter-scaling-functions/

Certo, fittare con 22 parametri è un bel problema, ed è proprio fittare un elefante (che pare abbia bisogno di 'soli' 13 parametri). 
Un problema noto è che spesso molti sistemi (le funzioni teoriche) sono 'sloppy', cioé poco sensibili alle variazioni anche ampie dei parametri. Quindi il fit non si muove mai, soprattutto se hai le derivate (per il calcolo dello jacobiano) numeriche.

Inoltre di solito è un casino decidere i valori iniziali, soprattutto nel tuo caso (so che qualcuno usa degli algoritmi genetici per la stima dei valori iniziali, ma non ne so molto).
 
Cose biologiche?

ciao
Gianfranco
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
> 
> 


Maggiori informazioni sulla lista Python