[avis] nVidia CUDA pour la bioinformatique

Discussion dans 'Hardware, matos' créé par Axilatis, 13 Décembre 2011.

  1. Offline
    Axilatis Elite
    [IMG]


    Bonjour !

    Je vous expose donc mon petit projet :p

    Je dispose en classe d'une dizaine de PC fixes strictement identiques.
    Ils possèdent tous une carte graphique nVidia compatible CUDA.
    (Il me semble que ce sont des 8800GTS mais je confirme au plus vite).

    Mon but est de faire un petit cluster dans un but bioinformatique : alignement de protéines
    Ce qu'est un alignement de séquence (protéine ou ADN, le concept est identique).

    - 1 PC = serveur SOAP qui génère les combinaisons et envoit les séquences à aligner
    - autres PCs = clients SOAP qui testent les données envoyées et retournent le score d'alignement.
    - les OS utilisés : 1 client en Ubuntu (UNIX), le serveur et les autres clients en Gentoo (UNIX) (ps : c'est imposé, petit "défi" j'imagine...)

    [IMG] [IMG] [IMG]




    L'échange de données Clien <=> Serveur se fera par SOAP.
    1 Serveur SOAP.
    9 ou 10 clients SOAP (je ne sais plus exactement) qui executeront la tâche, il y aura certainement un petit script python à gauche ou à droite et forcément le logiciel/algorithme qui fera l'alignement et retournera le résultat, pour ensuite redemander de nouvelles données à aligner.

    Bref je me tourne vers vous pour écouter vos conseils, vos avis, des idées sur la démarche à suivre.

    Comme vous vous en doutez, ceci est un projet d'étude qui sera évalué. Je ne vous demande certainement pas de faire le travail à ma place, mais j'aimerais quelques pistes.
    Peut-être se cache parmi vous un averti de CUDA qui pourrait m'aiguiller du moins pour le début?? :)


    D'avance, merci pour tout commentaire constructif !! :-D

    ~Axilatis~
    Axilatis, 13 Décembre 2011
    #1
  2. Offline
    Ser!al Elite
    J'y connais rien en alignement de protéines ni en cartes graphique CUDA mais j'ai l'impression que la plus grosse charge du travail résidera dans la construction d'un simple "client" pouvant utiliser la carte graphique par un algorithme d'alignement.
    Une fois que t'auras codé (ou récupéré) un algo et que tu l'auras fait tourné avec les cartes, le reste devrait aller tout seul.
    Tout dépend aussi de tes bases en SOAP et le langage utilise par CUDA (j'ai cru voir du C mais je sais pas s'il y a d'autres possibilités).

    En tout cas, bonne chance :-D
    Ser!al, 13 Décembre 2011
    #2
  3. Offline
    Axilatis Elite
    Merci à toi Ser!al pour ton avis, je pense que tu as raison, le plus difficile sera du côté client et surtout l'exploitation des possibilités offertes par CUDA.
    Je continue mes recherches ;)
    Axilatis, 13 Décembre 2011
    #3
  4. Offline
    eGm_ Guinea Trump
    Il y a un article dans le dernier Programmez sur la programmation CUDA
    eGm_, 13 Décembre 2011
    #4
  5. Offline
    gregsting Elite
    gregsting, 13 Décembre 2011
    #5
  6. Offline
    Axilatis Elite
    enfait j'ai besoin de l'algorithme de Smith-Watermann, adapté à CUDA.
    Apparemment il faut aller faire un kernel sur mesure pour le GPU,
    putain ça a l'air vraiment chaud...
    Axilatis, 13 Décembre 2011
    #6
  7. Offline
    DeflaMental [-_-]
    juste une question : à part le fun, ça t'apportera quoi ?
    DeflaMental, 13 Décembre 2011
    #7
  8. Offline
    Axilatis Elite
    la réussite de mon examen de techniques bioinformatiques... :p)
    sachant que toute la classe va utiliser les CPU des pc fixes, et qu'avec
    l'utilisation GPGPU (CUDA) je peux gagner un facteur temps de 2x à 50x.
    Axilatis, 13 Décembre 2011
    #8
  9. Offline
    DeflaMental [-_-]
    Ah donc tu es prof et en même temps étudiant ?
    DeflaMental, 13 Décembre 2011
    #9
  10. Offline
    Le_Pev Elite
    Tu te mets un max de contraintes :D

    Je ne l'ai jamais fais, mais je crois que le chemin le plus simple serait de dévelloper la partie algorithme sous Matlab/Scilab et de faire accélerer le calcul par Cuda dans Matlab/Scilab. En plus l'algo dont tu parles est dans matlab. Il y a un tuto aussi.

    Sinon j'ai trouvé ça http://www.nvidia.com/object/swplusplus_on_tesla.html mais il ne fonctionne que sur une machine (tu peux la bourré de carte lol ) mais pas en distribué.
    Le_Pev, 13 Décembre 2011
    #10
  11. Offline
    xfire73 NEW AVATAR YOLO
    xfire73, 13 Décembre 2011
    #11
  12. Offline
    DeflaMental [-_-]
    Enfin, moi je connais pas " l'énormité " de la masse de calcul. Mais réfléchi quand même au temps que ça va te prendre pour coder et lancer tout ça.

    C'est clair une fois que tout est installé, ça sera du gain à chaque simul, mais si tu dois en faire une seule, ça ira ptet plus vite de le lancer bêtement sur un pc et d'attendre un temps de simul 10-20 fois plus long mais qui ne prendra pas le temps qu'il t'aura fallu pour tout mettre en place.
    DeflaMental, 13 Décembre 2011
    #12
  13. Offline
    Lagwagon Jésus
    Equipe GamerZ.be
    je pense que vu que c'est quoté, ta solution ne va pas plaire à son prof :-D
    Lagwagon, 13 Décembre 2011
    #13
  14. Offline
    Groszours Elite
    Tu peux expliquer les alignements que tu fais et qui demande tant de puissance de calcul ?
    Groszours, 13 Décembre 2011
    #14
  15. Offline
    Axilatis Elite
    Bon, alors c'est parti, je vais essayer de simplifier au maximum.:p)

    - Une protéine est un polymère d'acides aminés (AAs) qui se suivent les uns derrière les autres, tout comme les lettres se suivent dans une phrase.

    - Il existe 20 Acides aminés naturels. Chaque Acide aminé est désigné par une lettre de l'alphabet :

    [IMG]


    => Vous voyez donc que finalement on peut réduire une protéine à une phrase. <=

    Un alignement de protéine consiste à prendre 2 séquences différentes (on parle d'alignement pair) ou plusieurs (alignement multiple) et à essayer d'aligner au mieux leurs composants (lettres) afin de trouver des régions similaires.

    Pourquoi on aligne des protéines ? Ceci permet de retracer l'évolution (phylogénétique en gros) ou encore de trouver des structures similaires, ce qui nous amène à penser qu'elles ont la meme fonction, ou une meme région qui permet qu'elles se fixent ici ou la dans la cellule, trouver des différences entre deux protéines (mutation donc maladie ou évolution... ?) etc. Il y a de nombreuses raison à cela. (NB : on fait pareil avec l'ADN, c'est également une phrase sauf que les composants sont des nucléotides : A, T, C ,G.)

    Exemple d'alignement :
    [IMG]

    Légende :
    - Protéines sujettes à l'alignement : MASR, Ssc1, Ssc2, Cig30 (mais peu importe leur nom:colere:)
    - Lettres = Acides aminés (mais ça vous l'avez compris maintenant ;-D)
    - Zones grises = "match", concordance entre des acides aminés alignés (bref ce sont les mêmes !)
    - Zones blances = pas de match (on dit "mismatch")
    - Traits horizontaux (-) = "TROUS" crées dans une séquence pour favoriser l'alignement d'autres régions (cfr quote ici en dessous).

    Sur quoi se base-t-on pour aligner des séquences ?
    => sur un score.
    => si deux AAs sont les mêmes (il faut regarder de manière verticale), c'est bien, ça match, on va donner un score positif de disons.... +2 !
    => si ce ne sont pas les mêmes AA, on va attribuer une note "mauvaise", faiblement positive, voire meme négative! Il faut regarder si ces 2 AA différents ont par exemple une même affinité pour l'eau, ou si ils sont tous les deux chargés électriquement, etc. Bref le score d'un "mismatch" est proportionnel aux affinités/similarités des 2 AA différents. par exemple -2 ou encore +1 seulement ou même -15 (si ces deux AA sont carrément opposés !)
    => si il y a un trou (ou gap) : c'est pas bien ! (lool), disons -10 !

    Ces scores sont répertoriés dans une "Matrice de Score". exemple : BLOSUM62 (BLOck SUbstitution Matrix), ça ressemble à ceci :
    [IMG]

    L'alignement OPTIMAL de deux séquences est très gourmand car il faut envisager toutes les possibilités, calculer le score de chaque possibilité pour ENFIN sélectionner LA meilleure.

    C'est l'algorithme de Smith-Watermann.

    Je dois faire ceci pour 6000 protéines de 300 AA chacune, et les aligner toutes entre toutes. Voila :)

    (DSL si ça a été un peu long)
    Axilatis, 13 Décembre 2011
    #15
  16. Offline
    Groszours Elite
    Tu veux faire ça pour la performance de mettre au point ce genre de système en fait ? Pas parce que tu en as réellement besoin ?

    Sinon pas besoin de faire simple j'ai eu un cours de bioinformatique sur les alignements de séquences :D
    Groszours, 13 Décembre 2011
    #16
  17. Offline
    Axilatis Elite
    Je veux faire ça car c'est le sujet de mon examen.
    Le prof a réussi (ouf) et y est arrivé en utilisant les PC de la classe et les CPU des pc en une grosse heure.

    Je veux utiliser CUDA pour y arriver en 30 minutes, voire meme bcp moins selon l'optimisation de l'algorithme pour CUDA et selon les perfs des GPU :p

    NB : j'ai complété l'explication pour ceux que ça intéresse

    @ DeflaMental : je suis étudiant en dernière année (BAC +3)
    Axilatis, 13 Décembre 2011
    #17
  18. Online
    gun_shaft Bicky 3 Sauces
    J'ai un peu travaillé avec CUDA pour mon TFE mais ça restait très très simple comparé à ce que tu veux faire. Mon travail consistait simplement à traiter une vidéo en lui appliquant un filtre de Sobel (détection de contours).

    Voici en gros le principe de la programmation CUDA 3.2 (ça date de l'année passée) :
    • Allocation de la mémoire de l'host (CPU)
    • Allocation de la mémoire du device (GPU)
    • Copie des données de l'host vers le device
    • Traitement sur le device
    • Copie des données du device vers l'host

    Je veux bien essayer de t'aider si t'as des problèmes mais mes connaissances restent limitées.

    edit : je me souviens que lors de mon travail, CUDA ne supportait pas le mutli GPU, il fallait que tu définisses toi même le travail pour chaque GPU
    gun_shaft, 13 Décembre 2011
    #18
  19. Offline
    Axilatis Elite
    Merci beaucoup pour ces infos, ça semble pas grand chose mais dans la jungle que représente CUDA sur le net, ça m'éclaire déjà pas mal !
    Thx également pour ta proposition d'aide :-D
    Axilatis, 13 Décembre 2011
    #19
  20. Offline
    EINST Elite
    Je crois qu'avant de faire le cluster, tu devrais te contenter d'implémenter l'algorithme en CUDA.

    Ce sera déjà pas mal ;)
    Tu pourras comparer performance CPU vs GPU.


    Et ensuite, tu tentes sur FPGA :p
    ou tu compares avec les résultats effectués par ce cluster d'FPGA :
    http://www.timelogic.com/
    http://www.timelogic.com/catalog/758/decyphersw
    http://www.timelogic.com/documents/SeqCruncher_2008.pdf
    Je crois que point de vue performance FPGA win mais GPU est plus économique et p-e plus facile à programmer.
    EINST, 13 Décembre 2011
    #20