William Zhang
I am a third-year (3B) computer engineering student at the University of Waterloo.
Main Focus
I work on making machine learning run efficiently on hardware, through:
- GPU optimization: writing and tuning GPU kernels
- ML models: understanding and optimizing how models learn and map onto hardware
- Compilers: lowering and optimizing kernels and models for GPUs and other domain-specific architectures
Also Exploring
Areas I’m passionate about outside of my main focus:
- RTL and chip design: CPU and ASIC design. Taped out a chip on Tiny Tapeout, another one in progress!
- Convex optimization: applied in personal projects and open-source contributions to CVXPY. I am also supplementing my knowledge by taking CO 255 at school.
- FPGA CAD: open-source CAD tools that apply optimization to placement and routing
Experience
- NVIDIA Jan. 2027 - Apr. 2027Software Engineer Intern Toronto, Canada
- Cerebras Systems May 2026 - Aug. 2026Software Engineer Intern Toronto, Canada
- Trend Micro Sept. 2025 - Dec. 2025Software Engineer Intern Ottawa, Canada
- Ford Motor Company Jan. 2025 - Apr. 2025Software Engineer Intern Ottawa, Canada
- Ford Motor Company May 2024 - Aug. 2024Software Engineer Intern Ottawa, Canada
Open-Source Contributions
Some of the open-source projects that I have contributed to include:
- CVXPY, a Python-embedded modeling language for convex optimization problems, with over 4M downloads/month. Originates from a research project at Stanford University.
- Huber scale parameter: extended the
huberatom with a scale parametert, adding a new perspective-based atomt·huber(x/t, M)that stays convex and DCP-compliant, so users can jointly optimize over the scale of a robust loss. - Dual feasibility checks: implemented constraint residuals across CVXPY’s constraint types to enable post-solve checks of dual feasibility, helping users verify solver results.
- Huber scale parameter: extended the
- CVXPYlayers, a Python library for convex optimization-based layers in deep neural networks, compatible with PyTorch, JAX, and MLX.
- Custom solver interface: enabled plugging custom solvers, such as generated C code from CVXPYgen, into differentiable layers in both PyTorch and JAX. The generated C solver can enable 3.3x faster solve times than default paths.
- DCCP (Disciplined Convex-Concave Programming), a convex heuristic for solving nonconvex problems.
- DPP compatibility: parametrized the linearization so each iteration updates parameters instead of rebuilding the problem, resulting in 30% speedups.
- Tilus, a GPU domain-specific language by NVIDIA that provides explicit low-level control and hardware abstraction.
- Hopper matmul examples: wrote a progression of Hopper GEMM kernels reaching ~108% of cuBLAS throughput on an H100 (FP16, 8192³).
- Faster compilation: cut autotuning re-run latency via dependency-aware specialization keys and compiler fingerprinting, taking a full 12-schedule first call from ~3.1 s to ~65 ms (~48x).
- Mirage Persistent Kernel, a megakernel compiler for models being developed by the CMU Catalyst Lab. Work still in progress!