In this paper, we focus on maximizing weighted sum energy efficiency (EE) for a multi-cell multi-user channel. In order to solve this non-convex problem, we first decompose the original problem into a sequence of parallel subproblems which can be optimized separately. For each subproblem, a base station employs dirty paper coding to maximize the EE for users within the cell while regulating interference induced to other cells. Since each subproblem can be transformed to a convex multiple-access channel problem, the proposed method provide a closed-form power allocation. Then, based on the optimal covariance matrix, a locally optimal solution is obtained to maximize the sum EE. Finally, simulation results show that our algorithm based on the non-linear precoding achieves close to 20 percent gain than the conventional linear precoding method.