查看、指定使用的 GPU 数量和编号

在使用 PyTorch 框架时,可以通过以下步骤查看可用的 GPU 数量,指定使用的 GPU 编号,并在代码中体现这一点。下面以2个GPU为例:

目录

  • 一、脚本代码块实现
    • [1. 查看可用的 GPU](#1. 查看可用的 GPU)
    • [2. 指定使用 GPU 的数量和编号](#2. 指定使用 GPU 的数量和编号)
      • [使用 `CUDA_VISIBLE_DEVICES` 环境变量](#使用 CUDA_VISIBLE_DEVICES 环境变量)
      • [将模型和数据移动到指定的 GPU](#将模型和数据移动到指定的 GPU)
      • [使用 `DataParallel` 进行多 GPU 并行计算](#使用 DataParallel 进行多 GPU 并行计算)
    • [3. 示例完整代码](#3. 示例完整代码)
  • 二、命令行实现
    • [1. 使用 `CUDA_VISIBLE_DEVICES` 环境变量](#1. 使用 CUDA_VISIBLE_DEVICES 环境变量)
      • [只使用 GPU 0](#只使用 GPU 0)
      • [使用 GPU 0 和 GPU 1](#使用 GPU 0 和 GPU 1)
    • [2. 在 Python 代码中自动检测可用 GPU](#2. 在 Python 代码中自动检测可用 GPU)
    • [3. 结合 `CUDA_VISIBLE_DEVICES` 和 PyTorch 代码](#3. 结合 CUDA_VISIBLE_DEVICES 和 PyTorch 代码)

一、脚本代码块实现

1. 查看可用的 GPU

python 复制代码
import torch

if torch.cuda.is_available():
    num_gpus = torch.cuda.device_count()
    print(f"Available GPUs: {num_gpus}")
    for i in range(num_gpus):
        print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:
    print("No GPUs available")

2. 指定使用 GPU 的数量和编号

在 PyTorch 中,可以通过以下几种方法来指定使用的 GPU。

使用 CUDA_VISIBLE_DEVICES 环境变量

可以在代码中设置环境变量来指定使用的 GPU:

python 复制代码
import os

# 只使用 GPU 0 和 GPU 1
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

import torch

# 检查可用的 GPU
if torch.cuda.is_available():
    num_gpus = torch.cuda.device_count()
    print(f"Available GPUs: {num_gpus}")
    for i in range(num_gpus):
        print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:
    print("No GPUs available")

将模型和数据移动到指定的 GPU

可以将模型和数据移动到指定的 GPU。例如:

python 复制代码
import torch

# 检查是否有 GPU 可用
if torch.cuda.is_available():
    # 将模型移动到 GPU 0
    device0 = torch.device('cuda:0')
    model = MyModel().to(device0)
    
    # 将数据移动到 GPU 1
    device1 = torch.device('cuda:1')
    data = data.to(device1)
else:
    device = torch.device('cpu')
    model = MyModel().to(device)
    data = data.to(device)

使用 DataParallel 进行多 GPU 并行计算

可以使用 torch.nn.DataParallel 来让模型在多个 GPU 上并行运行:

python 复制代码
import torch
import torch.nn as nn

# 假设模型已经定义好
model = MyModel()

if torch.cuda.is_available():
    # 使用 DataParallel 并行运行在多个 GPU 上
    model = nn.DataParallel(model, device_ids=[0, 1])
    model = model.cuda()
else:
    device = torch.device('cpu')
    model = model.to(device)

3. 示例完整代码

以下是一个完整的示例,演示了如何在 PyTorch 中查看 GPU 数量、指定使用 GPU,并在代码中体现:

python 复制代码
import os
import torch
import torch.nn as nn

# 设置使用的 GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

# 查看可用的 GPU
if torch.cuda.is_available():
    num_gpus = torch.cuda.device_count()
    print(f"Available GPUs: {num_gpus}")
    for i in range(num_gpus):
        print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:
    print("No GPUs available")

# 定义模型
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.layer = nn.Linear(10, 10)

    def forward(self, x):
        return self.layer(x)

model = MyModel()

# 将模型移动到 GPU
if torch.cuda.is_available():
    model = nn.DataParallel(model, device_ids=[0, 1])
    model = model.cuda()

# 示例数据
data = torch.randn(5, 10).cuda()

# 前向传播
output = model(data)
print(output)

在命令行中,可以使用环境变量 CUDA_VISIBLE_DEVICES 来指定使用的 GPU 数量和编号。这种方法对 PyTorch 非常有效。以下是详细步骤:

二、命令行实现

1. 使用 CUDA_VISIBLE_DEVICES 环境变量

在运行 Python 脚本时,通过设置 CUDA_VISIBLE_DEVICES 环境变量来指定哪些 GPU 可见。例如:

只使用 GPU 0

bash 复制代码
CUDA_VISIBLE_DEVICES=0 python main.py

使用 GPU 0 和 GPU 1

bash 复制代码
CUDA_VISIBLE_DEVICES=0,1 python main.py

2. 在 Python 代码中自动检测可用 GPU

在 Python 代码中,可以自动检测可用的 GPU,并根据需要配置模型和数据。以下是示例代码:

python 复制代码
import torch

def print_available_gpus():
    if torch.cuda.is_available():
        num_gpus = torch.cuda.device_count()
        print(f"Available GPUs: {num_gpus}")
        for i in range(num_gpus):
            print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
    else:
        print("No GPUs available")

def main():
    # 打印可用的 GPU
    print_available_gpus()
    
    # 使用第一个可用的 GPU
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    print(f"Using device: {device}")

    # 示例模型和数据
    model = MyModel().to(device)
    data = torch.randn(10, 3, 224, 224).to(device)  # 示例数据

    # 示例训练循环
    for epoch in range(10):
        # 假设 dataloader 是你的数据加载器
        for batch in dataloader:
            inputs, labels = batch
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            # 其余训练步骤...
    
if __name__ == "__main__":
    main()

3. 结合 CUDA_VISIBLE_DEVICES 和 PyTorch 代码

通过在命令行中设置 CUDA_VISIBLE_DEVICES 环境变量,并在代码中使用 torch.cuda 相关的方法,可以确保你的脚本只使用指定的 GPU。

例如,在命令行中设置环境变量后运行脚本:

bash 复制代码
CUDA_VISIBLE_DEVICES=0,1 python main.py

然后在 Python 脚本中:

python 复制代码
import torch

def main():
    # 检查可用的 GPU
    if torch.cuda.is_available():
        num_gpus = torch.cuda.device_count()
        print(f"Using {num_gpus} GPUs")
        for i in range(num_gpus):
            print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
    else:
        print("No GPUs available, using CPU")
    
    # 使用第一个可用的 GPU
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    print(f"Using device: {device}")

    # 示例模型和数据
    model = MyModel().to(device)
    data = torch.randn(10, 3, 224, 224).to(device)  # 示例数据

    # 示例训练循环
    for epoch in range(10):
        # 假设 dataloader 是你的数据加载器
        for batch in dataloader:
            inputs, labels = batch
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            # 其余训练步骤...
    
if __name__ == "__main__":
    main()
相关推荐
王六岁3 分钟前
🐍 前端开发 0 基础学 Python 入门指南:f-strings 篇
前端·javascript·python
清空mega7 分钟前
从零开始搭建 flask 博客(1)实验
后端·python·flask
学术小白人10 分钟前
11月即将召开-IEEE-机械制造方向会议 |2025年智能制造、机器人与自动化国际学术会议 (IMRA 2025)
运维·人工智能·机器人·自动化·制造·rdlink研发家
碧海银沙音频科技研究院11 分钟前
i2s封装成自己定义8路音频数据发送方法
arm开发·人工智能·深度学习·算法·音视频
做科研的周师兄14 分钟前
【机器学习入门】9.2:感知机的工作原理 —— 从模型结构到实战分类
人工智能·算法·机器学习·分类·数据挖掘
微盛AI企微管家26 分钟前
企业微信的AI功能更新:智能总结、智能搜索、智能机器人、智能表格,更智能的一体化办公解决方案
大数据·人工智能·数据挖掘
maotou52627 分钟前
dvadmin开发文档(第一版)
python·django
金融Tech趋势派30 分钟前
企业微信私域运营代运营:微盛AI・企微管家以四级分层服务助力企业私域落地与增长
大数据·人工智能·企业微信
不去幼儿园42 分钟前
【启发式算法】狼群算法(Wolf Pack Algorithm, WPA)算法详细介绍(Python)
python·算法·启发式算法·任务分配·集群智能
AI企微观察1 小时前
企业微信如何正确营销获客?精准定位与场景触达的实践框架
大数据·人工智能