使用cuml训练机器学习模型时,Python Nvidia会加快内存错误

时间:2019-06-06 09:35:38

标签: python tensorflow gpu nvidia rapids

我正在将python 3与nvidia Rapids结合使用,以便通过cuml库和GPU来加快机器学习训练的速度。

我的脚本还使用keras进行了GPU培训(超过tf),当我到达尝试使用CUML的阶段时,我遇到了内存错误。我怀疑这是因为TF不会释放GPU内存(看着nvidia-smi),我看到所有内存都已分配。

这是我用来训练累积模型的代码

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 Logistic回归进行训练时,它们都可以正常工作。

我怎么能: 1,使用同一个GPU(首选)而不丢失我训练的所有tf模型(我拥有的内存比tf模型实际使用的内存更多,但是tf进程仍然占用了所有内存) 2.使用第二个GPU进行CUML计算(我无法找到一种方法来选择哪个GPU运行RAPIDS CUML模型训练。

1 个答案:

答案 0 :(得分:0)

我将在下面回答#2,因为它可以使您以最快的速度上路。这是3行代码。对于#1,请在RAPIDS Github上提问,或在我们的slack channel上提问。

首先,运行nvidia-smi获得您的GPU编号,并查看哪个正在为其分配给keras的内存。这是我的:

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