I was wondering if the UI automatically cull hidden rects or render only the visible part of the canvas

There is a UI component called UI Mask, which will automatically hide any UI element which is hidden behind the attached Image element (although I don’t think this is what you are wondering).

As far as I know, UI elements aren’t automatically culled when they leave the screen, but what you could write a script to remove them when they leave the screen.

I would expect that it does. In the end, UI elements are bound to mesh data and meshes are frustrum culled by default (see: http://forum.unity3d.com/threads/frustum-culling-by-default.48384/)

You could verify this with a setup like Eric5h5 mentions in that thread, where you simply move things offscreen and watch the draw call count.