Как мне освободить всю память на GPU в XGBoost? - PullRequest
1 голос
/ 24 мая 2019

Вот мой код:

clf = xgb.XGBClassifier(
  tree_method = 'gpu_hist',
  gpu_id = 0,
  n_gpus = 4,
  random_state = 55,
  n_jobs = -1
)
clf.set_params(**params)
clf.fit(X_train, y_train, **fit_params)

Я прочитал ответы на этот вопрос и этот вопрос git , но ни тот, ни другой не помогли.

Я попытался удалить усилитель следующим образом:

clf._Booster.__del__()
gc.collect()

Удаляет усилитель, но не полностью освобождает память графического процессора.

Я думаю, это Dmatrix, которое все еще там, но я не уверен.

Как мне освободить всю память?

1 Ответ

0 голосов
/ 13 июня 2019

Ну, я не думаю, что есть способ получить доступ к загруженному Dmatrix, потому что функция fit не возвращает его. Вы можете проверить исходный код здесь по этой ссылке на github :

Так что я думаю, что лучший способ - это обернуть его в процесс и запустить его следующим образом:

from multiprocessing import Process

def fitting(args):
    clf = xgb.XGBClassifier(tree_method = 'gpu_hist',gpu_id = 0,n_gpus = 4, random_state = 55,n_jobs = -1)
    clf.set_params(**params)
    clf.fit(X_train, y_train, **fit_params)

    #save the model here on the disk

fitting_process = Process(target=fitting, args=(args))
fitting process.start()
fitting_process.join()

# load the model from the disk here
...