Ошибка памяти порогов 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, если это поможет или если вам нужна дополнительная помощь

Другие вопросы по тегам