Python/Pytorch

[Pytorch] RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling

언킴 2022. 12. 5. 15:49
반응형

CUBLAS_STATUS_NOT_INITIALIZED 에러는 nn.Embedding에 원래 값보다 큰 값이 들어갔을 때 발생하는 에러다. 예를 들어, 사용자의 수는 100명이고, 제품의 수는 50개라고 하자. 그렇다면 아래와 같은 코드로 nn.Embedding을 생성할 수 있을 것이다.

class Model(nn.Mudule):
	def __init__(self, num_users, num_items, latent_dim):
    	self.num_users = num_users
        self.num_items = num_items
        self.latent_dim = latent_dim
        
        self.user_embedding = nn.Embedding(self.num_users, self.latent_dim)
        self.item_embedding = nn.Embedding(self.num_items, self.latent_dim)
        
        self.fc_layer = nn.Linear(self.latent_dim, 1)
        self.sigmoid = nn.Sigmoid()
    
    def forward(self, uid, iid):
    	self.user_emb = self.user_embedding(uid)
        self.item_emb = self.item_embedding(iid)
        
        multiply = torch.mul(self.user_emb, self.item_emb)
        output = self.fc_layer(multiply)
        output = self.sigmoid(output)
        return output

 

사용자의 ID는 0부터 99까지 총 100개의 ID 값을 가지게 될 것이고, 제품의 ID는 0부터 49까지 총 50개의 ID 값을 가지게 될 것이다. 이때 forward 부분에 입력으로 사용자의 ID와 제품의 ID가 들어오는데, 100 이상의 ID 값이 들어올 경우 위와 같은 에러를 출력한다. 이 문제를 해결하기 위해서는 사용자 ID와 제품 ID의 max값을 설정하는 등의 처리를 하면 된다.