I suppose ads could be cached server-side, but it would probably be more efficient to cache an ad client-side. If ads are personalized few users of a website may see the same ad, but an individual may see the same ad on different websites.
If a smaller site uses and ad network on the server side then ads cannot be cached on the server, because the ad network always serves the highest paying ad at the moment which constantly changes according to the ongoing ad auction and inventory.