티스토리 뷰

코드를 공부하는데 다음과 같은 이해할 수 없는 코드가 있었다.

if self.eight:
    max_length = math.ceil(max_length / 8) * 8

이게뭐람? max length 를 8로 나누고 올림한 다음 다시 8을 곱해라? 뭐.. 뜬금없이 왜하는건지 모를 코드였는데 찾아보니 GPU연산 효율을 위해 8의 배수가 되도록 max_length를 맞추는 코드라고 한다.

GPU 연산에 사용되는 CUDA는 8, 16, 32처럼 2의 배수로 align된 데이터에 대해서 연산 효율이 훨씬 좋다고 한다.
특히 transform block이나 CNN에 대해서는 padding을 통해서 길이를 맞춰줄 경우 효율이 극대화 된다고 한다.

그런 이유로 지금까지 MLP등의 모델에서 128, 256, 512등의 2의 배수값을 맞춘거구나를 이제야 이해했다.

지금까지 대충 sequence length를 500이나 100처럼 8의 배수가 아닌 값으로도 사용해왔었는데 앞으로는 8의 배수값으로 맞추는 습관을 들여야겠다.

댓글