XGBoostでsklearn APIを使用する場合、save_modelとload_modelには、"pythonだけで完結する場合はpickleを使うこと"という注釈があります。sklearnのmodelと同じつもりで使うと、loadしても"'XGBClassifier' object has no attribute '_le'"というerrorが出てpredictに利用できません。
これはBoosterオブジェクトのみ保存していて、LabelEncoderが保存されていないことによるので、下記のようにすると回避できます。pickle使ったほうがわかりやすいのですが、どうしてもpickleを使いたくないときには有効かもしれません。
from xgboost import XGBClassifier
import xgboost
# model1の学習と保存
model1 = XGBClassifier()
model1.fit(X, Y)
model1.save_model('./xgb1.model')
# 保存したmodel1をロードして使用する
model2 = XGBClassifier()
model2.load_model('./xgb2.model')
model2._le = xgboost.compat.XGBLabelEncoder()
model2._le.fit(Y) # YのラベルをLabelEncoderに学習させる
model2.predict(X)
LabelEncoderはsklearn.preprocessing.LabelEncoderと同一で、ユニークな値をソートして保持するという実装になっています。なので、同じラベルが網羅されていれば必ずしも学習時のYを取っておかなくても大丈夫です。ただ、将来的にLabelEncoderの仕様が変更になった場合などには注意が必要かもしれません。