Diffusion models from scratch in PyTorch