我注意到torch.device可以接受一系列参数,确切地说是cpu, cuda, mkldnn, opengl, opencl, ideep, hip, msnpu。
然而,在训练深度学习模型时,我只见过cuda或被cpu使用过。很多时候代码看起来像这样
if torch.cuda.is_available():
device = torch.device("cuda")
else:
device = torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)
我从未见过其他任何人被使用,并且想知道它们是否可以使用以及如何使用。我相信配备 AMD 显卡的最新 MacBook 应该可以使用"hip",但这是真的吗?训练速度会与使用一个 CUDA GPU 相似吗?torch.device如果不是,那么如果实际上无法使用这些选项,那么接受这些选项又有什么意义呢?
我可以使用 6 个 24GB GPU。当我尝试加载一些 HuggingFace 模型时,例如以下
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("google/ul2")
model = AutoModelForSeq2SeqLM.from_pretrained("google/ul2")
Run Code Online (Sandbox Code Playgroud)
我收到内存不足错误,因为该模型似乎只能在单个 GPU 上加载。然而,虽然整个模型无法装入单个 24GB GPU 卡,但我有 6 个 GPU 卡,并且想知道是否有一种方法可以将模型加载分布到多个卡上,以执行推理。
HuggingFace 似乎有一个网页,他们解释了如何执行此操作,但截至目前还没有任何有用的内容。
python multi-gpu deep-learning torch huggingface-transformers
我正在具有 2 个 Tesla M60 GPU 的 Linux 机器上训练一些 PyTorch 模型,并使用此示例使用数据并行化在两个 GPU 之间分割训练https://towardsdatascience.com/how-to-scale-training-on-multiple -GPU-dae1041f49d2
然而,当代码到达调用 torch.multiprocessing.spawn 函数时,它会引发
类型错误:无法腌制“_thread.lock”对象
我知道最好的做法是发布一个小的可重现的示例,但是代码库非常大,并且我无法在足够小的模型上重现此错误以在此处发布。python 错误回溯也没有多大帮助,因为它只是引用多处理库的内部结构。我知道如果没有代码示例,这听起来可能有点太笼统了,但我只是想知道是否有人在 Linux 机器上使用 PyTorch 进行多处理时遇到了同样的错误,如果是这样,需要注意哪些事项来尝试和修理它。代码在单个 GPU 上运行得非常好,因此事实证明很难调试。
如果有帮助,我正在使用 python 3.8.11 和 torch 1.9.0,CUDA 版本 11.1