如何确保我的模型使用 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 模型