Author Archives: Marius Urbonas

The Open Immune Window: Notes on Sweaty Workouts and Vanishing Immune Cells

Here is a question for you: is an intense, sweaty workout in the gym building up your immune health, or is it just opening a window of opportunity for a pathogen to ruin your week? To understand this, we first have to look at energy. The immune system is incredibly energy-hungry, constantly patrolling and repairing the body. When you exercise hard, your body is forced into a rapid game of resource allocation, diverting precious energy away from baseline functions to fuel your contracting muscles.

This brings us to a rather scary observation in sports science that I stumbled on one day reading random headlines. If you draw blood one to two hours after a hard run or heavy exertion, your immune cell count (specifically lymphocytes) absolutely plummets. Apparently for decades, scientists looked at this massive drop in the blood and concluded that our immune system temporarily crashed after exercise, leaving an “open window” of 3 to 72 hours where we were highly vulnerable to infections. Which leads us back to the main question – is a hard workout actually making you sick?

Thankfully, no. It turns out those missing immune cells didn’t just die off. Driven by the acute spike in adrenaline from your workout, those cells rapidly exit your bloodstream and migrate directly into peripheral tissues, specifically mucosal barriers like your lungs and gut. Think about it: during a hard workout, you are hyperventilating and exposing your airway to massive amounts of external air. Your body isn’t suppressing its defenses; it’s actively deploying its best troops exactly where a pathogen is most likely to enter. It is a state of heightened immune surveillance, not suppression.

So why do athletes often get the sniffles after a big race? Often, it is just non-infectious airway inflammation from heavy breathing, combined with the psychological stress and lack of sleep that accompany big events. Your workout actually acts as a natural immune adjuvant, making you more resilient. If you want to dive deeper into this topic, I highly recommend checking out the paper Debunking the Myth of Exercise-Induced Immune Suppression by Campbell and Turner (Frontiers in Immunology, 2018).

Democratising the Dark Arts: Writing Triton Kernels with Claude

Why would you ever want to leave the warm, fuzzy embrace of torch.nn? It works, it’s differentiable, and it rarely causes your entire Python session to segfault without a stack trace. The answer usually comes down to the “Memory Wall.” Modern deep learning is often less bound by how fast your GPU can do math (FLOPS) and more bound by how fast it can move data around (Memory Bandwidth). When you write a sequence of simple PyTorch operations, something like x = x * 2 + y the GPU often reads x from memory, multiplies it, writes it back, reads it again to add y, and writes it back again. It’s the computational equivalent of making five separate trips to the grocery store because you forgot the eggs, then the milk, then the bread. Writing a custom kernel lets you “fuse” these operations. You load the data once, perform a dozen mathematical operations on it while it sits in the ultra-fast chip registers, and write it back once. The performance gains can be massive (often 2x-10x for specific layers).But traditionally, the “cost” of accessing those gains, learning C++, understanding warp divergence, and manual memory management, was just too high for most researchers. That equation is finally changing.

Continue reading

Handling OAS Scale Datasets Without The Drama

Working with Observed Antibody Space (OAS) dataset sometimes feels a bit like trying to cook dinner with the contents of the whole fridge emptied into the pan. There are countless CSVs, all of different sizes (some might not even fit onto your RAM), and you just want a clean, fast pipeline so you can get back to modelling. The trick is to stop treating the data like a giant spreadsheet you fully load into memory and start treating it like a columnar, on-disk database you stream through. That’s exactly what the 🤗 Datasets library gives you.

At the heart of 🤗 Datasets is Apache Arrow, which stores columns in a memory-mapped format (if you are curious about what that means there is a great explanation in another blog post here. In plain terms: the data mostly lives on disk, and you pull in just the slices you need. It feels interactive even when the dataset is huge. Instead of a single monolithic script that does everything (and takes forever), you layer small, composable steps—standardize a few columns, filter out junk, compute a couple of derived fields—and each step is cached automatically. Change one piece, and only that piece recomputes. Sounds great, right? But of course, the key question now is how to get OAS data into Datasets to begin with.

Continue reading

Cream, Compression, and Complexity: Notes from a Coffee-Induced Rabbit Hole

I have recently stumbled upon this paper which, quite unexpectedly, sent me down a rabbit hole reading about compression, generalisation, algorithmic information theory and looking at gifs of milk mixing with coffee on the internet. Here are some half-processed takeaways from this weird journey.

Complexity of a cup of Coffee

First, check out this cool video.

Continue reading