强化学习模型不是在 GPU Pytorch 上训练

问题描述 投票:0回答:1

我正在设置 RL Agent 在 GPU 上训练,而不是在 CPU 上进行正常训练...... 但当我运行 4 个 Agent 实例时,我的 GeForce RTX 3060 的使用率为 1%。这是一款带有地图的游戏,玩家必须收集点数并躲避敌人。我看到只是 CPU 有所增加,但 GPU 保持不变。我还没有在互联网上找到有关如何设置它的好信息。 这是我的模型: (在 Agent 类中,我添加了 .to(device) ,其中 device 是我的 GPU) 所以我的问题是,我做错了什么,因为如果我禁用 pygame 中的帧速率(我猜将其设置为无限制?)我的网络应该训练得更快,但它并没有...... 我很感谢任何有用的建议!

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import os



class Linear_QNet(nn.Module):
    def __init__(self, input_size, hidden_size, hidden_size2, output_size):
        super().__init__()
        self.linear1 = nn.Linear(input_size, hidden_size)
        self.linear2 = nn.Linear(hidden_size, hidden_size2)
        self.linear3 = nn.Linear(hidden_size2, hidden_size)
        self.linear4 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = F.relu(self.linear1(x))
        x = F.relu(self.linear2(x))
        x = F.relu(self.linear3(x))
        x = self.linear4(x)
        return x

    def save(self, file_name='model.pth'):
        model_folder_path = './model'
        if not os.path.exists(model_folder_path):
            os.makedirs(model_folder_path)

        file_name = os.path.join(model_folder_path, file_name)
        torch.save(self.state_dict(), file_name)


class QTrainer:
    def __init__(self, model, lr, gamma):
        self.lr = lr
        self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        self.gamma = gamma
        self.model = model.to(self.device)  # Verschiebe das Modell auf die GPU
        print("wo wird trainiert?: ")
        print("self.device = ",self.device)
        self.optimizer = optim.Adam(model.parameters(), lr=self.lr)
        self.criterion = nn.MSELoss()
        

    def train_step(self, state, action, reward, next_state, done):
        state = torch.tensor(state, dtype=torch.float32).to(self.device)
        next_state = torch.tensor(next_state, dtype=torch.float).to(self.device)
        action = torch.tensor(action, dtype=torch.long).to(self.device)
        reward = torch.tensor(reward, dtype=torch.float).to(self.device)

        if len(state.shape) == 1:
            state = torch.unsqueeze(state, 0)
            next_state = torch.unsqueeze(next_state, 0)
            action = torch.unsqueeze(action, 0)
            reward = torch.unsqueeze(reward, 0)
            done = (done,)  # tupel with just one value

        # 1: predicted Q values with the current state
        pred = self.model(state)

        target = pred.clone()
        for idx in range(len(done)):
            Q_new = reward[idx]
            if not done[idx]:
                Q_new = reward[idx] + self.gamma * torch.max(self.model(next_state[idx]))
            target[idx][torch.argmax(action).item()] = Q_new

        self.optimizer.zero_grad()  # empty gradients
        loss = self.criterion(target, pred)  # calc the loss
        loss.backward()

        self.optimizer.step()

    def loadModel(self):
        model_folder_path = './model'
        model_name = 'model.pth'
        file_path = os.path.join(model_folder_path, model_name)
        if os.path.exists(file_path):
            state_dict = torch.load(file_path, map_location=self.device)
            self.model.load_state_dict(state_dict)
            self.model.eval()
            print(f"Model {model_name} gefunden und geladen.")
        else:
            print(f"Kein Modell namens {model_name} gefunden.")

谷歌搜索、Youtube 和常见的东西......

python pytorch reinforcement-learning torch
1个回答
0
投票

您确定安装了支持 CUDA 的 PyTorch 吗?

要检查 CUDA 是否可用,您可以尝试运行

torch.cuda.is_available()
,就像您在代码中所做的那样。虽然这没有明确检查 PyTorch 是否安装了 CUDA 支持,但它仍然可以作为一个提示。

您可以查看官方PyTorch安装页面来生成安装PyTorch(包括CUDA支持)的命令。只需确保调整设置以适合您的系统即可!

© www.soinside.com 2019 - 2024. All rights reserved.