Emilio Girard

I measure AI systems on real hardware, from 5-watt boards to a B200 ⚡📏🤖

In plain terms: I make AI models run faster and cheaper on hardware that has limits, and I measure what they actually cost in watts, joules and GPU time. That means robot policies on a 15 W Jetson, speculative decoding on a single GPU, and serving records on a B200. I publish my failed experiments along with the ones that worked.

Status: Montréal, remote-first. Open to conversations about ML-systems and inference-infrastructure work (research engineer, performance engineer, edge deployment). Email me; I answer within a day.

Timeline

Hardware I've worked on

DeviceWhat I did on it
Raspberry Pi 5agentosd daemon; rootless stripped-OS builds; cluster node
2x Jetson Orin Nanothe JPT energy measurements; TensorRT ports of three published papers at INT8/FP16; 263 fps terrain navigation; MAXN tuning, Tegra cuBLAS quirks
Apple M2 Studio / M4 MacBookMetal targets; SwiftUI clients for the camera and voice systems
NVIDIA DGX Spark (GB10, sm_121)daily driver: 24B full-parameter CPT, EAGLE-3/DFlash drafter training, NVFP4 serving, a live voice product served from my desk, unified-memory wall daemons
RTX 3080the first live deployment of the Maxim voice stack
RTX 509033.8x warm sustained speculation; the 6,361-block counterfactual collection; F5-TTS render farm
RTX Pro 6000 Blackwellproduction voice serving; 30B diffusion-LM training experiments; MoshiRAG
A100full-duplex speech serving for the phone line
H100trained the full-duplex speech model on its 147-hour joual corpus, FSDP across two cards
B200 (up to 4x, sm_100)full-parameter 24B pretrain; the Llama-8B serving records, verified across two datacenters; the 70B single-stream record runs
42-CPU Ray clusterdistributed CPU work across the whole fleet, Pi to Spark

Stack

GPU architecturessm_87 (Orin) · sm_100 (B200) · sm_120 (5090, Pro 6000) · sm_121 (GB10) · Apple Metal
Inference enginesTensorRT · TensorRT-LLM · vLLM · SGLang · llama.cpp · ONNX Runtime
QuantizationNVFP4 · MXFP4 · FP8 KV-cache · INT8 QDQ with calibration · GGUF (IQ3_XXS, Q4_K_M) · TensorRT Model Optimizer
Speculative decodingEAGLE-3 · DFlash · Medusa · MTP · suffix automaton · n-gram · grammar-constrained trees · self-distilled drafters · SpecForge
Trainingfull-parameter CPT · SFT · DPO · GRPO · distillation · FSDP2/DTensor · LoRA · QLoRA · DoRA · PiSSA · rsLoRA · NeMo · Unsloth · LLaMA-Factory · Axolotl
SpeechMoshi/Mimi full-duplex · PersonaPlex · F5-TTS · Whisper · NVIDIA Canary · custom codec upsamplers
VisionYOLO (v8 to 11) · RT-DETR · OSNet Re-ID · Frigate NVR · go2rtc · COLMAP · gaussian splatting (gsplat, NeRFStudio) · RoomPlan LiDAR
Retrieval and dataQdrant · Neo4j · Postgres · SQLite · full-text search at 554K documents · BM25 + dense hybrid · embedding pipelines
SystemsCUDA · PyTorch · Ray · ROS 2 · Gazebo · Docker · systemd · Ansible · PM2 · Cloudflare tunnels and Pages · Tailscale · Telnyx telephony · MQTT · Linux from kernel boot params up
AppsNode.js · FastAPI · Next.js · SwiftUI · hand-written WebGL2

Papers with public code and data

Joules Per Task: Energy Measurements for Learned Policies on Embedded Hardware. code
Preparing submission. First energy numbers for a vision-language-action policy in the literature, now extended across four policies spanning 0.2M to 450M parameters on one Jetson. A 19M diffusion policy costs 5x a 30M transformer policy, so parameter count is a bad proxy for edge energy. Includes the vision-reuse failure boundary and six documented deployment traps.
Per-Block Drafter Selection in Speculative Decoding. code
In preparation. 7,309 blocks with four drafters verified on identical prefixes across two GPUs. Workload-level routing is a measured null at 0.6% headroom; per-block confidence selection captures 61% of a 13.3% oracle gap, and transfers to code, math and chat but carries no signal on copy. Every number has a bootstrap interval, and the wall-clock break-even condition is stated rather than assumed.

Work in progress

Listed so the scope is visible; none of these has a public artifact yet, so treat them as claims about work in flight rather than results.

Aesthetic Attractors in Recursive Multi-Model Diffusion.
Draft complete. Seven models fed their own output for 1,000 iterations each converge to distinct attractors; ~8,000-frame dataset.
Hochelaga: Québec-Native Foundation Modeling on Blackwell.
In progress. Corpus assembly, tokenizer extension, CPT and evaluation of the first open-weights Québec French model.
Quatroo: Llama-8B Serving Records on a Single B200.
Technical report with cross-datacenter validation and the honest diverse-workload ceiling; reproduction scripts written, public release pending.
Connectome Topology as a Reservoir Substrate.
Results complete, write-up pending. One positive result and two nulls across 14 connectomes and four phyla.

Achievements

Projects