At first few layers, each layer has offset to -X/-Y direction base on previous layer. But above ~2mm, it is vertical.
I've checked the printer build that there is no noticeable error in towers. Tried both manual calibration and Marlin auto calibration
G33 with z probe.
No idea what's the cause and don't know which part I need to check with.
Finally I found out that it was caused by not enough torque output by B tower stepper motor. Increasing current didn't work. I replaced the stepper motor and it prints perfectly.