如何确保我的模型使用 jupyter notebook 中所有可用的 GPU

Posted

技术标签:

【中文标题】如何确保我的模型使用 jupyter notebook 中所有可用的 GPU【英文标题】:How to ensure that my model is using all available GPU in jupyter notebook 【发布时间】:2021-10-09 07:09:28 【问题描述】:

我正在使用tensorflow 2.3 专用于2-GPU's。我正在使用styleformer 模型来获取非正式到正式的句子。我想将所有2-GPU's 用于此任务。

以下是有关 GPU 的信息:

!nvidia-smi

| NVIDIA-SMI XXX.XX.XX   Driver Version: ********    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:89:00.0 Off |                    0 |
| N/A   34C    P0    42W / 300W |      0MiB / 32510MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Tesla V100-SXM2...  Off  | 00000000:8A:00.0 Off |                    0 |
| N/A   35C    P0    43W / 300W |      0MiB / 32510MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+


from tensorflow.python.client import device_lib

def get_available_gpus():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos if x.device_type == 'GPU']

['/device:GPU:0', '/device:GPU:1']

我在 GPU 上使用的代码

from styleformer import Styleformer
import torch
import warnings

sf = Styleformer(style = 0) 

source_sentences = [
"I am quitting my job",
"Jimmy is on crack and can't trust him",
"What do guys do to show that they like a gal?"
]   

for source_sentence in source_sentences:
    target_sentence = sf.transfer(source_sentence, inference_on=1, quality_filter=0.95, max_candidates=5)

在上面的代码中inference_on=1 表示我们正在使用GPU。但是我怎样才能确保它同时使用 GPU。我去了styleformer包内的transfer函数,发现这一行..

def transfer(self, input_sentence, inference_on=0, quality_filter=0.95, max_candidates=5):
      if self.model_loaded:
        if inference_on == 0:
          device = "cpu"
        elif inference_on == 1:
          device = "cuda:0"  
        else:  
          device = "cpu"
          print("Onnx + Quantisation is not supported in the pre-release...stay tuned.")

如何更改上述代码以使用两个 GPU?

【问题讨论】:

【参考方案1】:

您的模型没有使用 GPU,可能有多种原因,

    您没有为 GPU 安装 Cuda 工具包和驱动程序以在开发人员模式下访问 Nvidia 驱动程序问题(卸载和安装) Tensorflow 版本问题

检查所有这些,然后重试。如果您已安装所有内容,笔记本将自动使用 GPU。

当它在 GPU 上运行时,您会看到 0MiB / 32510MiB 将变为超过 0MiB。

如果您认为正确,请投票!!!将帮助其他人效仿!!

【讨论】:

使用您提到的所有 GPU 驱动程序部署笔记本。它是定制的内核。上面的输出现在没有运行任何进程。我的问题是它会自动选择两个 GPU 吗? 不,它不会,它只需要任何一个 GPU,GPU 集群训练和分布的工作方式不同,设置起来并不复杂。它会自动选择 GPU 编号:0。 @MAC 使用下面的链接可以帮助您进行设置,towardsdatascience.com/… 如果你在推理,考虑到输入数据不会超过 GPU 内存大小,一旦 GPU 绰绰有余 @MAC,同时检查nvidia smi,如果你在推理时有任何波动,那么它正在使用GPU。

以上是关于如何确保我的模型使用 jupyter notebook 中所有可用的 GPU的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 Django 项目中的 jupyter-lab 连接到 Django 的模型?

从父目录中的 python 模块导入到子目录中的 jupyter notebook 文件中

如何在 Jupyter Notebook 中使用 Python 库调试错误

从 Jupyter Notebook 创建 BigQueryML 模型

如何确保我的 django 应用程序中只有 1 个模型创建迁移?

Python与金融分析基础