is there a way to speed up the render process?
If you're able to, start thinking about how you can break your project down into manageable parts.
You say you have a large city. Does every building need to be an actual object? Maybe think about making billboards (a plane with a texture on it), with buildings on them.
Is every building super detailed? Think about making LoD (level of detail) variants that are less detail and less poly count. So the further away something is from the camera, the less detail it has. Which means overall your scene is less heavy. Kind of like how video games work.
Also, try and make sure your buildings aren't super messy in terms of geometry (extraneous loop-cuts, floating verts, etc.). It's a small thing, but multiplied by the amount of an entire city's worth of messy geometry, it can have an effect.
Do you have multiples of the same building? Are they duplicated? If you've got a bunch of objects that are duplicated with shift+d, each of those objects are treated as individuals. If they're all exactly the same, it's a waste of memory and can also cause problems with scenes. Instead, instance those objects with alt+d. Which means each instanced object shares the same data between those objects. Which lowers memory cost.
Do you have heavy effects like volumetrics? Are they necessary? Sure, everyone loves having atmospherics and stuff in their scenes. But if you just need some slight fade in the distance to make your scene have an atmosphere, do you really need to use something like volumetric absorption/scatter? You can get pretty much the same effect with a low-strength emission node in the volume output instead. It's essentially free in terms of render times.
Also, making sure that your tile-size in render settings is correct, is important if you're using GPU. 256x256 is generally the most optimized when it comes to GPU rendering.
Lastly, if it's still not having an effect, look into distributed rendering solutions like SheepIt. It'll render multiple frames on other people's computers, which should give an output in a more reasonable time-frame.