Slimme wiskunde versnelt verwerking van genetische data

In deze blogserie laten we zien dat onze wiskundige kracht een belangrijke aanvulling is op onze programmeervaardigheden.  Met een wiskundige aanpak brengen we oplossingen die je met alleen programmeren niet bereikt.

De blogs zijn gebaseerd op interviews met collega’s die recent een project hebben gedaan waar wiskunde een doorslaggevende rol in speelde.

In deze eerste bijdrage spreken we met Maarten, die een leuk project voor Wageningen University & Research (WUR) uitvoerde. Hij werkte hier aan het efficiënt opslaan en verwerken van een enorme hoeveelheid genetische data.

Maarten, kun je kort omschrijven wat je precies hebt gedaan binnen je project?

“Ik werkte mee aan een onderzoeksproject dat enorme hoeveelheden genetische data combineerde met stamboom- en prestatiegegevens om fokwaarden te schatten. Zulke berekeningen vragen normaal gesproken ontzettend veel rekenkracht en geheugen.  Mijn bijdrage liet zien dat dit tóch haalbaar is op relatief normale computers, zonder dure gespecialiseerde hardware.”

Hoe wordt deze genetische informatie in een computer opgeslagen?

“Het DNA van een koe kun je opslaan als een reeks getallen tussen 1 en 4. Normaal gesproken neemt ieder getal 32 bits in beslag, maar voor deze getallen zijn slechts 2 bits per cijfer nodig. Dat scheelt enorm veel opslagruimte en we gebruikten dit ook om de berekeningen sneller en efficiënter te maken.”

Op welke manier werd deze data voor berekeningen gebruikt?

“Met deze data bereken je hoe erfelijk bepaalde eigenschappen zijn, en zo kom je uit op een fokwaarde per dier. Het ging hier om een database met bijna 30 miljoen dieren. Dankzij onze aanpak konden deze berekeningen op een schaalbare manier uitgevoerd worden. Voor de klant betekende dit dat zij betrouwbare resultaten ontvingen zonder dat er peperdure rekeninfrastructuur nodig was.”

Wat was hierin jouw bijdrage?

“Ik ontwikkelde een speciale methode om matrixvermenigvuldigingen te doen die optimaal gebruikmaakt van het compacte DNA-formaat. Daardoor werden de berekeningen aanzienlijk sneller dan met standaardoplossingen en past alles wel in het werkgeheugen van een rekenserver. Deze aanpak is een goed voorbeeld van hoe onze wiskundige blik tot oplossingen leidt waar je met alleen programmeren niet op uitkomt.”

Ben je tevreden met het eindresultaat?

“Zeker. De klant was onder de indruk dat hun enorme datasets op normale computers verwerkt konden worden. Zij konden hun onderzoek dus sneller voortzetten, zonder te investeren in dure hardware.  Het resultaat heeft bovendien geleid tot een wetenschappelijke publicatie waarin mijn bijdrage expliciet wordt genoemd.  Daarmee blijft de impact van dit project ook in toekomstig onderzoek zichtbaar.  Voor ons is dit precies het soort impact waar we trots op zijn: slimme wiskunde die echte resultaten oplevert.”

De wiskundige details

Het lastigste performance-probleem zat in de lineaire algebra met compact opgeslagen vectoren. Bestaande, sterk geoptimaliseerde bibliotheken zoals BLAS werken vooral met standaard floats, niet met compacte kleine integers. Maarten maakte een aangepaste implementatie van de matrix-matrixvermenigvuldiging die wel met de compact opgeslagen vectoren in combinatie met standaard floats kon werken.

Door zijn inzicht in het grotere algoritme, konden slimme keuzes worden gemaakt in hoe het lineaire stelsel opgedeeld wordt. Sommige matrices hoefden bijvoorbeeld helemaal niet in z’n geheel te bestaan.  Of soms was alleen de transpose nodig om verder te kunnen rekenen. Daarnaast was het heel belangrijk dat het compacte opslagformaat elders geen vertraging veroorzaakte.

De performance van de zelfgeschreven matrixvermenigvuldiging moest het niveau van de BLAS routines kunnen evenaren. Hiermee leverde VORtech een doorslaggevende bijdrage aan de performance van het hele project.