Grove Biopharma - Principal ML Engineer (2026 - present)
Joined when Grove acquired Fable's ML team. I am the engineering organization: everything that touches software, infrastructure, data or production runs through me, from buying and racking hardware to the cloud platforms that run large training and inference campaigns, the databases and apps scientists use, and day-to-day IT.
- On-prem GPU cluster, end to end. Procurement through production: specced and bought the hardware, physically installed it, and built the stack on top (Proxmox virtualization, pfSense networking and firewall, authentication, Slurm scheduling and configuration, Docker images for every job type), then onboarded scientists onto it.
- All of AWS. Own the account end to end: pricing negotiations, infrastructure as code, architecture of new platforms and maintenance of existing ones, IAM and service control policies, and managed databases.
- Compute procurement beyond AWS. Evaluate, negotiate and contract external GPU capacity and model providers (RunPod, Lambda and model labs) alongside our own cluster.
- Engineering operations. Run engineering project management (chose and set up Linear and its integrations), Slack commands and bots, Amazon Bedrock access, and colleague training. Also office IT: UniFi firewall and networking, meeting-room setup, laptops.
- Data with the lab. Work with scientists to define database schemas, connect them to the lab inventory management system, and automate assay data handling.
- AI agents for scientific engineering. Established the team's approach to AI coding agents: reusable skills for scoping engineering complexity, writing issues, implementing changes, reviewing code, communicating results and diagnosing GPU cluster problems, plus colleague education on working with agents. Designed supervised scientific workflows that turn a research question into an explicit plan (models and tools, stages, compute per stage, human review points) and defined their runtime, model/data access, scheduling, scratch storage and agent-access limits.
- Molecular dynamics platform. Architected and deployed a multi-region AWS platform for long-running CHARMM and Amber simulations on interruptible GPU instances, with checkpointing, automatic resume, trajectory reconstruction and diagnostic reports for researchers. Exercised recovery during real interruptions, delivered completed trajectories from a research campaign, and moved active simulations between AWS regions and GPU configurations (verifying progress at the destination before stopping the source).
- Faster trajectory reconstruction. Parallelized reconstruction of restarted simulations: 1 -> 8 workers cut median wall time from 76.10 s to 12.97 s (~5.9x, three repetitions, cached inputs, excluding input prep and transfers).
- Research database. Designed and deployed a PostgreSQL database linking molecular composition, compound records, inventory and assay measurements, separating a molecule's full chemical identity from the simplified sequences and grouping rules used for comparison. Built the release pipeline from source records, read-only query access, browsable views, and data-quality checks so scientists can see why a record is missing, excluded or represented a certain way.
- Lab analysis platform. Designed and delivered a Slack-based platform where scientists submit data and get processed results and reports back: supplier chromatography report extraction, compound lookup, peptide fragment and mass calculation (including terminal modifications), and assay workbooks. Shared submission interface, separately deployed applications, so conflicting scientific dependencies coexist and each app releases on its own.
- Boltz-2 GPU performance (open source). Authored a merged contribution to the public Boltz Community project integrating Anthropic's FlashPairformer kernels into Boltz-2: integration, hardware-dependent kernel selection, fallback behaviour and benchmarking (Anthropic authored the kernels). On ~1,000-token inputs, the timed prediction stage ran 1.12-1.16x faster on H100 and up to 1.23x on A10G vs cuEquivariance (warm caches, excluding load and first-use compile). Exact mode matched reference coordinates and confidences on 20 H100 samples.
- OpenFold for complexes. Extended OpenFold to keep inter-chain information from multichain templates so researchers can use known interacting structures to guide complex predictions, wired it into the prediction tooling, and fixed CUDA runtime/packaging so it runs on the research cluster.
- Poetry -> uv. Led the organization-wide migration from Poetry to uv for dependency management, packaging and CI, across projects with GPU libraries, compiled extensions, private packages and AWS Lambda deployments.
- DGX H100 back in service. Restored an eight-GPU NVIDIA DGX H100 after hardware replacement: firmware, OS, drivers and runtime, storage, monitoring and Slurm. Verified GPU diagnostics, Slurm GPU isolation and all-eight-GPU compute before lifting maintenance.
- GPU observability. Extended Prometheus/Grafana monitoring across GPU research hosts (job GPU allocation, host availability, GPU temperature and activity, memory pressure, local and shared storage) with dashboards and operational alerts.
- Hands-on volume. In a representative 30-day window I shipped 191 of the 208 PRs merged across the whole 7-person ML org (~92%), alongside architecture and technical leadership.
Fable Therapeutics - MLOps Lead (2024 - 2026)
Owned all infrastructure and engineering operations for a 9-person ML team: on-prem GPUs and Slurm, AWS, external GPU vendors, CI/CD, data platforms and code-review standards.
- Re-architected Fable's design-generation pipeline from 27 manually chained Jupyter notebooks into a config-driven Python orchestration system on AWS Batch (auto-queueing, compute routing, spot fleets, centralized observability via CloudWatch).
- Reduced per-run operator time from ~2 weeks to ~8 hours by replacing a hand-executed 27-notebook workflow with a custom orchestration system spanning multiple compute environments, with automated handoffs, monitoring, and alerting.
- Cut recurring compute cost ~60% per run ($130k-$170k -> $50k-$60k) for a biweekly production pipeline by combining orchestration-driven compute routing, spot/instance strategy, and model/runtime optimizations that reduced required compute per workload.
- Built CI/CD across internal repos and model pipelines using GitHub Actions, enforcing lint/test/build gates, automated Docker builds/deployments, and standardized release workflows.
- Established code quality standards and review operating model (PR templates, review guides, required checks/reviewers), then drove adoption through coaching and documentation across a 9-person team.
- Integrated Weights & Biases artifact/version tracking into the model release workflow, enabling PR-based config changes with full model lineage and reproducibility.
- Reduced required manual interventions during production batch runs by ~70% year-over-year by automating orchestration and eliminating common failure points in the pipeline.
- Reduced inference unit cost by >99% (~$1 -> <$0.01 per prediction) across >90% of production workloads through input pruning, custom kernels, and optimized GPU selection, while maintaining equivalent output quality.
- Research code to production speed. Took the ML scientists' PyTorch and made it run well on real hardware: fixed the bugs first, then profiled, found work silently running on CPU, and audited the whole ML codebase to cut CUDA stream syncs to a minimum (tensors created on CPU and waited on, poor indexing, dynamic tensor shapes). Built multiple independently compiled CUDA kernels for different model versions and configurations so each code path ships its own optimized build. Taught the team to avoid device syncs and CPU fallbacks in new code.
- Reduced training compute from ~1,920 H100 GPU-hours to ~80 H100 GPU-hours by removing CUDA sync bottlenecks, using compiled PyTorch, and adding optimized CUDA kernels, with no model quality loss.
- Built a centralized, self-hosted monitoring platform (Grafana/Prometheus with custom Slurm integrations) for all ML workloads, including training, hyperparameter optimization, inference, and large compute jobs, unifying telemetry across GitHub CI, AWS Batch, on-prem infrastructure, and external compute vendors to inform utilization, capacity, and workload-prioritization decisions.
- Architected and led a bidirectional wet-lab and ML data platform, replacing CSV/email handoffs with a governed Postgres pipeline and enabling reliable ML-to-wet-lab design delivery plus fast assay-result flow back to ML.
- In a representative 180-day period: contributed 52/152 merged PRs, completed 78/228 PR reviews, authored 491/1200 commits, and reviewed ~120k LOC across a 9-person engineering team.
Semantic Health (acquired) - ML Lead (2021 - 2022)
- Spearheaded the research and development of the company's clinical ML offerings (variety of clinical NLP + OCR + Tabular), successfully delivering multiple client deployments, leading to a US expansion, and driving a $60M valuation.
- Hired and led a team of 7 ML Scientist / Engineers: Managed their professional growth, setting objectives, conducting standups, and nurturing their leadership and technical capabilities.
- Defined Hiring Policies and Interview Processes: Established effective hiring policies, interview questions, scoring systems, and take-home assignments to identify top talent for ML, Data Engineering, and Backend roles.
- Created the long-term ML product vision of the company
- Rewrote the initial Python stack reducing technical debt and allowing for new hire onboarding without big issues. Introduced unified code, data, and testing standards
- Created and deployed multiple new ML product lines based on customer calls and product insights from internal QA efforts leading to increases of 100k ARR per contract
- Introduced a novel non-intrusive data labelling and feedback scheme, increasing the granularity of labels without impacting the end user's workflow, which led to creation of new models with >50% performance gain on downstream KPIs
- Created weekly progress reports and presented at all-hands and led customer calls
- Created extensive model and prediction fallbacks allowing us to eliminate the need for on-call support on the ML side
- Contributed to open-source libraries supporting US Military veteran care efforts. Named the first outside collaborator to the library.
- Contributed optimizations to multiple NLP libraries allowing for parallelization of computation (spaCy extensions + Srsly)
- Supervised research projects leading to multiple scientific publications and product improvements
- Created an active learning approach allowing to improve data labelling efforts reducing costs by >75%
- Led the MLOps + DevOps efforts to integrate ML into dev and staging cloud environments allowing for end-to-end model testing for releases which allowed the team to move away from on-prem testing
- Led code review and tech debt improvement sprints across the entire Python stack
- Designed and implemented APIs for vending model predictions
- Roadmapped and oversaw a new MLOps initiative to allow for better data and model monitoring (Feast + MLflow + Seldon)
- Led internal R&D efforts on new modelling schemes to improve the existing products
UofT - Teaching (2020 - 2023)
- Developed comprehensive educational materials and delivered engaging instruction for a range of undergraduate and graduate courses in Statistics and Machine Learning.
- Communicated sophisticated technical topics to a non-technical audience
- Modernized the CSC412 - Probabilistic ML course curriculum by adding Attention, Transformers, and Diffusion models
Semantic Health - Machine Learning Scientist (2019 - 2020)
- Joined as the first employee - architected and built the ML stack setting the foundation for the company's NLP capabilities
- Developed Transformer-based models consistently surpassing the state-of-the-art performance on a complex, massively multi-label dataset with significant labeling noise.
- Successfully deployed models to production, initially through Python scripts and database uploads, later optimizing the process by transitioning to Airflow, leading to first long-term customer contracts
- Designed and implemented a diverse stack of models, spanning from basic keyword matching to advanced Deep Learning techniques.
- Pioneered a novel architecture for generating supporting evidence for ML model predictions, implemented and deployed it leading to a 300% increase in business KPIs for the product
- Developed a custom multi-armed bandit model deployment scheme eliminating guesswork and quadrupling ML deployment velocity to production (monthly to weekly model release cadence)
- Engaged with customers and gathered feedback to iterate on model improvements, ensuring alignment with customer needs and expectations.
- Conducted ML feature discovery calls with end users, resulting in the development of simple ML models that significantly enhanced product performance
- Established a custom quality assurance process for on-premises model deployments in a secure environment, guaranteeing model reliability and performance.
- Authored a series of Architecture Decision Records that still serve as the model for decision documents for the company
- Actively contributed to the company's culture by hosting weekly game sessions and fostering a positive and engaging atmosphere in meetings.
- Implemented a comprehensive testing suite for the ML stack, including model minification allowing for pre-commit end-to-end ML testing
- Planned and conducted data and label quality experiments identifying problems, addressed those by creating a novel, ontology-graph based label smoothing algorithm increasing model performance by 35%
- Found and solved a major bug in a major open-source framework (AllenNLP)
UofT - Masters (2019 - 2022)
- Part-time masters while working a full-time (early stage startup) job
- An average (only one course not A+) in challenging courses
- Actively engaged in research leading to Publications and a Research Visitor position at St. Michael's Hospital in Toronto
- Recognized for expertise, was offered to teach my own cohort as a sessional lecturer in Machine Learning
UofT - Bachelors (2015 - 2019)
- President Stats Union - brought it from a dead union (won with 14 total votes for a president of a union with ~6000 members) to multiple yearly events with attendance in the hundreds
- Took on teaching assistant (TA) responsibilities for upper-level courses while still an undergraduate, including instructing students in my own year.
- 4.0 GPA in stats courses
- Allowed to take One-on-One reading courses under famous professors (Dan Simpson, David Duvenaud)
- Actuarial Students National Association (ASNA) leadership from second year - held Director positions for Operations, Events, and Case competition
- Conducted ML research at RiskLab
Deloitte (2018)
- Authored a practice-wide internal report on the state and future of AI in insurance
- Participated in reserving audits for a number of large auto insurance customers
- Assumed a client-facing role by working on-site for nearly 8 months, collaborating closely with a major auto-insurance client to fulfill their data engineering needs, assisting in reconciling their extensive book of business.
- Contributed to creation of a report for the Ministry of Finance on the state of Auto Insurance in Canada
Intact (2017)
- First year intern building a relatively large data project on my own (EoE)
- Built GLM auto insurance pricing models for regulators
Family business (2023)
- Built an English version of the site (WordPress)
- Done Business dev efforts to expand the company to North America
Misc
- Podcast guest for the Mentorship podcast