Ошибка памяти порогов Python Nvidia при использовании cuml для обучения модели машинного обучения
Я использую Python 3 с nvidia Rapids, чтобы ускорить машинное обучение с использованием библиотеки cuml и графического процессора.
Мои скрипты также используют керас с обучением на GPU (через tf), и когда я достигаю стадии, на которой я пытаюсь использовать CUML, я получаю ошибку памяти. Я подозреваю, что это происходит, потому что TF не освобождает память GPU (глядя на nvidia-smi). Я вижу, что вся память распределена.
Это код, который я использую для обучения модели CUML
import cuml
from cuml import LinearRegression
lr = LinearRegression()
lr.fit(encoded_data, y_train)
это ошибка, которую я получаю
[2] Вызов результатов cuMemAlloc в CUDA_ERROR_OUT_OF_MEMORY
encoded_data и y_train - это массивы numpy, encoded_data - это массив чисел с плавающей запятой n*m, а y_train - вектор n*1 целых чисел, которые являются метками; оба работают нормально при обучении с помощью логической регрессии sklearn.
Как я могу: 1. Использовать один и тот же графический процессор (предпочтительно), не теряя все модели tf, которые я обучал (у меня больше памяти, чем на практике модели tf, но процесс tf по-прежнему занимает всю память) 2. Использовать мой второй графический процессор для вычислений CUML (я не могу найти способ выбрать, какой графический процессор проводить обучение модели RAPIDS CUML.
1 ответ
Я собираюсь ответить на #2 ниже, так как это поможет вам быстрее всего. Это 3 строки кода. Для #1, пожалуйста, поднимите вопрос о RAPIDS Github или задайте вопрос на нашем слабом канале.
Первый забег nvidia-smi
чтобы получить ваши номера GPU и посмотреть, какой из них выделяет свою память для кера. Вот мой:
nvidia-smi
Fri Jun 28 16:50:06 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.39 Driver Version: 418.39 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro GV100 Off | 00000000:15:00.0 Off | Off |
| 29% 40C P2 26W / 250W | 32326MiB / 32478MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Quadro GV100 Off | 00000000:2D:00.0 On | Off |
| 33% 46C P0 29W / 250W | 260MiB / 32470MiB | 26% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
Здесь есть GPU #0 и GPU #1. GPU #0 хорошо использует свою память. Если я хочу запустить что-то еще в RAPIDS, мне нужно использовать GPU # 1
import os
# Select a particular GPU to run the notebook
os.environ["CUDA_VISIBLE_DEVICES"]="1" # or replace '1' with which GPU you want to use if you
Затем запустите остальную часть вашего кода.
Пожалуйста, lmk, если это поможет или если вам нужна дополнительная помощь