I am Gleb Lukicov, a machine learning engineer with a passion for MLOps. Visit my homepage to read about my PhD research and ML projects. When I am not de-bugging my code, I am actively engaged in the Agentic AI Foundation (AAIF) Community London as a co-host, π tech blogging, or π΄ββοΈ road cycling. You can contact me for collaborations ideas or questions on LinkedIn.
The projects below contain analysis code used in my PhD thesis and personal ML projects:
1. EDMTracking code to perform Fourier transforms and regression analysis on large datasets.
The Muon g β 2 experiment at Fermilab, near Chicago, discovered a tantalising sign of New Physics (a new force of nature!). This was done by measuring a deviation between the experimental and theoretically predicted value of the muon magnetic anomaly. As part of my PhD, I collaborated on the experiment with 200 scientists and engineers. This project contains analysis code to measure the Electric Dipole Moment (EDM) of the muon using the tracking detectors. The oscillation in the number of the observed tracks in the detector can be plotted and fitted, as shown below:
2. llm_pipelines_demo End-to-end demo of local and remote pipelines with Kubeflow and Vertex AI.
To make your systems data-centric and model-agnostic, a robust evaluation framework is essential. Pipelines are particularly useful for this purpose. I demonstrate how to implement local testing using Kubeflow Pipelines to shorten the development cycle using Docker cache, multi-stage builds, dynamic user credentials injection, and experiment tracking on Google Cloud.
Also included are infrastructure goodies like GitHub CI/CD & pre-commit config for linting and testing, local scripts with typer, project dependency management with uv, and static checking with mypy. This repo is a companion to this blog post.
3. slideops Turn a repository into a slide deck that tells you when it stops matching the code.
Your documentation is a build artifact, so it is worth treating it like one. SlideOps is a pair of Agent Skills: one turns a repository into a single-file HTML slide deck, the other tells you when that deck stops matching the code. Every reference in the deck carries its source file, the exact line range, and a hash of those lines, so the check costs zero tokens and runs in milliseconds. This repo is a companion to this blog post.
4. ltm Can a tabular foundation model replace your training pipeline?
I tried to make an LLM fail on tabular data. It didn't, sort of! LTM puts Google's tabular foundation model, TabFM, head to head with a trained CatBoost model and GPT-6 Astra on the same rows, and then changes the table under all three: the same columns shuffled, then two new columns inserted mid-table. The deployed CatBoost model crashed on both changes, GPT-6 Astra changed 22 of its 240 answers on a column shuffle, and TabFM changed none, then used the new columns straight away with nothing retrained. Every prediction behind the results is committed. This repo is a companion to this blog post.
5. ltm_ft Does fine-tuning a tabular foundation model beat its in-context learning?
A follow-up to LTM: instead of just prompting TabFM, I fine-tuned it, measured honestly against its own zero-shot in-context learning on synthetic data where the best achievable score is known, and ran the same code on an Apple M4 laptop and as a Kubernetes Job on an NVIDIA L4 in GKE. Training the row/column encoders takes a checkerboard task from 66.5% to 93.8% test accuracy, close to the 94.9% ceiling β but only on 2 of 5 data seeds; the others collapse to predicting 0.5 for every row. The L4 ran fine-tuning 9Γ faster than the laptop, for about $1.30 in GPU time. This repo is a companion to this blog post.
6. ltm_serve TabFM re-reads its whole training table on every prediction. Can it still serve online requests in ~100 ms?
The third repo in the LTM series takes TabFM from a predict_proba call in a notebook to low-latency online serving: measure it properly, optimise the model, then serve it three ways (FastAPI, Triton, KServe) on a laptop and on an NVIDIA L4 in GKE. TabFM's attention masks let the training rows be cached exactly, like an LLM's KV cache: 9.47 s β 129 ms (74Γ) at 8,192 context rows. torch.compile with CUDA graphs then cut the cached forward from 111 ms to 28 ms, and compiled Triton on one L4 served 160 req/s at p50 91 ms / p99 125 ms. The load generator was the bottleneck twice, and Kubernetes set the rest of the bill: a 7 min 12 s cold start from zero GPU nodes and a 20β23 min compile warm-up per cold replica. This repo is a companion to this blog post.
7. laya_router Does a model router need a language model on every request?
Laya Router puts a local, open-source 421M-parameter System 1 decision model alongside GPT-5 nano behind the same FastAPI endpoint, then evaluates both on 180 labelled routing requests. They tie at 60% routing accuracy, but Laya makes one non-autoregressive forward pass in 184 ms with no per-request API cost; GPT-5 nano takes 6.4 s at the median while generating about 1,400 reasoning tokens per decision. The project includes reproducible evaluation, calibration and prompt-wording ablations, a resident local service, and a one-replica Kubernetes packaging proof. This repo is a companion to this blog post.
8. ML_GPU contains personal practice ML code, and Deep Learning on GPUs using scikit-learn, TensorFlow and Keras.
I wrote a practical guide on setting a personal GPU server for Machine Learning with Ubuntu 20.04 avaialbe on the Towards Data Science (TDS) website.
Photo by Caspar Camille Rubin on Unsplash.











