Pytorch中实现CPU和GPU之间的切换

如何在pytorch中指定CPU和GPU进行训练,以及cpu和gpu之间切换

由CPU切换到GPU,要修改的几个地方:

网络模型、损失函数、数据(输入,标注)

# 创建网络模型
tudui = Tudui()
if torch.cuda.is_available():
   tudui = tudui.cuda()

# 损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():
    loss_fn = loss_fn.cuda()

# 数据输入   包括训练和测试的代码,二者都需要添加此代码
if torch.cuda.is_available():
   imgs = imgs.cuda()
   targets = targets.cuda()

方法一:.to(device)

1.不知道电脑GPU可不可用时:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu' )
a.to(device)

第一行代码的意思是判断电脑GPU可不可用,如果可用的话device就采用cuda()即调用GPU,不可用的话就采用cpu()即调用CPU。

第二行代码的意思就是把变量放到对应的device上(当然如果你用的是CPU的话就不用这一步了,因为变量默认是存在CPU上的,调用GPU的话要先把变量放到GPU上跑,跑完之后再调回CPU上)

2.指定GPU

# 定义训练的设备
device = torch.device("cuda:0")

# 网络模型创建
tudui = Tudui()
tudui = tudui.to(device)

# 损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.to(device)

# 训练步骤开始
    tudui.train()
    for data in train_dataloader:
        imgs, targets=data
        imgs = imgs.to(device)
        targets = targets.to(device)
        outputs = tudui(imgs)
        loss = loss_fn(outputs, targets)

# 测试步骤开始
    tudui.eval()
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataloader:
            imgs, targets=data
            imgs = imgs.to(device)
            targets = targets.to(device)
            outputs = tudui(imgs)
            loss = loss_fn(outputs, targets)
            total_test_loss = total_test_loss + loss.item()
            accuracy = (outputs.argmax(1)==targets).sum()
            total_accuracy = total_accuracy + accuracy

3.指定cpu时:

device = torch.device('cpu')

方法二:

1、需要修改的

# 三种常见的写法
device = torch.device('cuda')
device = torch.device('cuda: 0')
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

2、代码

# 创建模型
tudui = Tudui()
if torch.cuda.is_available():
   tudui = tudui.cuda()

# 损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():
    loss_fn = loss_fn.cuda()

# 训练步骤开始
    tudui.train()
    for data in train_dataloader:
        imgs, targets=data
        if torch.cuda.is_available():
            imgs = imgs.cuda()
            targets = targets.cuda()
        outputs = tudui(imgs)
        loss = loss_fn(outputs, targets)

 # 测试步骤开始
    tudui.eval()
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataloader:
            imgs, targets=data
            if torch.cuda.is_available():
                imgs = imgs.cuda()
                targets = targets.cuda()
            outputs = tudui(imgs)
            loss = loss_fn(outputs, targets)
            total_test_loss = total_test_loss + loss.item()
            accuracy = (outputs.argmax(1)==targets).sum()
            total_accuracy = total_accuracy + accuracy

总结:

推荐方法一,如果自己电脑是只有CPU,可以推荐使用云端服务器,比如PaddlePaddle,Google colab,这些服务器由每周免费八个小时的使用时间,可供我们基本的需求。

<think>好的,用户想知道PyTorch在Mac上默认使用CPU还是GPU。首先,我需要回忆一下PyTorch在Mac上的支持情况。记得在早期的版本中,Mac并不支持GPU加速,因为苹果的GPU传统的NVIDIA CUDA不同。不过后来苹果推出了M1芯片,可能带来了变化。 根据引用[1],用户提到在M2的MacBook Pro上使用GPU安装PyTorch,这说明M系列芯片可能支持GPU加速。但引用[3]提到,如果安装的是CPU版本的PyTorchtorch.cuda.is_available()会返回false。而Mac上的GPU可能不是通过CUDA来支持的,所以需要确认PyTorch是否有针对苹果芯片的GPU支持。 另外,苹果从macOS 12.3开始引入了Metal Performance Shaders(MPS)作为GPU加速的后端。PyTorch从1.12版本开始支持MPS,因此用户需要安装正确版本的PyTorch才能启用GPU。默认情况下,如果用户没有安装GPU版本,PyTorch会使用CPU。因此,用户需要检查安装的PyTorch版本是否为支持MPS的版本,并正确配置。 总结来说,PyTorch在Mac上默认使用CPU,但通过安装支持MPS的版本并配置,可以使用M1/M2芯片的GPU。需要指导用户如何检查当前设备,并说明如何启用GPU支持。</think>### PyTorch在Mac上默认使用的硬件设备 PyTorch在Mac上的默认硬件设备取决于安装版本硬件配置: 1. **默认行为** - 如果通过`pip install torch`或`conda install pytorch`直接安装,**默认使用CPU**。此时即使Mac配备M1/M2系列芯片,PyTorch也不会自动启用GPU加速[^1][^3]。 - 可通过以下代码验证当前设备: ```python import torch print(torch.__version__) # 若显示"1.x.x+cpu"则为CPU版本 print(torch.device("cuda" if torch.cuda.is_available() else "cpu")) # 输出默认设备 ``` 2. **启用GPU的条件** - 需满足以下条件: - **硬件要求**:配备M1/M2系列芯片的Mac(集成Apple GPU)。 - **系统要求**:macOS 12.3或更高版本。 - **PyTorch版本**:安装支持Metal Performance Shaders(MPS)的版本(如PyTorch 1.12+)[^3]。 - 安装命令示例(支持MPS的GPU版本): ```bash pip install torch --extra-index-url https://download.pytorch.org/whl/cpu ``` 3. **手动切换设备** 即使安装了GPU版本,仍需通过代码显式指定设备: ```python device = torch.device("mps") # Apple GPU设备标识 model = model.to(device) # 将模型/数据转移到GPU ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值