William Zhang

headshot_cropped.JPG

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. 2027
    Software Engineer Intern Toronto, Canada
  • Cerebras Systems May 2026 - Aug. 2026
    Software Engineer Intern Toronto, Canada
  • Trend Micro Sept. 2025 - Dec. 2025
    Software Engineer Intern Ottawa, Canada
  • Ford Motor Company Jan. 2025 - Apr. 2025
    Software Engineer Intern Ottawa, Canada
  • Ford Motor Company May 2024 - Aug. 2024
    Software 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 huber atom with a scale parameter t, adding a new perspective-based atom t·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.
  • 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!