딥러닝 엔지니어가 되기 위한 재료

손기훈·2024년 8월 29일

딥러닝 엔지니어가 되고 나서

2022년에 회사에 취업하여 딥러닝 엔지니어가 되고 나서 처음 느꼈던 것은 회사에서 요구하는 사항들은 기본적으로 내가 딥러닝 공부를 할 시에 전혀 예상할 수 없었던 요구사항들이 많았다는 점이었다.

데이터가 모델을 학습시키기에는 현격하게 모자랐다거나, 여러 대의 GPU를 사용하여 학습을 시켜달란다던가, 학습 시간이 너무 오래 걸리니 학습 시간을 줄여달라던가, 모델 사이즈가 너무 크다던가...

기존에 단순히 데이터를 정제하고 모델을 불러오고 학습을 시키고 결과를 확인하고 재학습을 시키고... 이런 수준으로만 겨우 준비가 되어 있던 나에게는 굉장히 혼란스러운 요구사항이었다.

단순히, 선형대수 찔끔 공부하고, 밑바닥부터 딥러닝 1,2를 읽어보고, 논문 몇 편 읽어보고 학습을 시켜본 것 가지고는 실제 업무를 헤쳐나가기에는 문제가 있었다.

위의 요구사항들을 헤쳐나가기 위한 기술에 대한 깊은 이해와 고민 없이 툴을 사용하기만 해왔다. 하지만 기술들에 대해 좀 더 깊은 이해를 가지고 사용하는 것이 중요하다 판단되어 해당 기술들에 대한 좀 더 깊은 이해를 위해 앞으로의 포스팅을 진행할 예정이다. FSDP를 제외하고서는 numpy와 순수 파이썬만을 사용하여 구현과 설명을 진행하였다.

DDP, FSDP

DDP는여러 대의 gpu를 활용하여 병행적으로 학습을 가능하게 하는 기법이다. FSDP 역시 DDP와 유사하지만 모델의 파라미터를 분산시켜 여러대의 gpu에 저장하는 기법이다. 이후의 포스트들에서는 각 기술의 원리와 해당 기술을 가능케하는 원리에 대해 자세하게 알아볼 예정이다. 실제 프레임워크를 불러와 사용하는 방안은 torchHuggingFace의 공식문서에 자세하게 설명되어 있기 때문에 원리를 자세하게 익히는 것이 더 중요하다고 생각한다.

Mixed Precision

Mixed-Precsion Training은 16bit의 실수형 데이터 타입으로 학습을 시키는 기법이다. 기존에 신경망을 학습시키는 데에는 대부분 32bit의 실수형 데이터들이 사용되었지만, 32bit의 가수 부분의 일정 정밀도 미만은 너무 작아서 실제로 큰 영향을 끼치지 않는 부분들이 있었다. 따라서 학습 시에 가중치들의 정밀도를 16bit로 바꿔 학습과 연산에 소모되는 자원을 줄이기 위한 방법론에 관한 기법이다.
왜 ‘mixed’냐면 학습 시에 실제 16bit만을 사용하여 연산을 진행하게 되면, 가중치가 없데이트 될 때, 16bit의 데이터가 표현 가능한 값 미만으로 가중치가 업데이트 되면서 underflow가 나게 되고 -inf, inf, nan의 값등으로 표현되기 때문이다. 따라서, 순전파 시에는 16bit를 사용하고, 가중치를 업데이트할 때는 32bit의 정밀도를 사용하여 가중치를 업데이트하는 16bit/32bit의 ‘섞인’ 정밀도를 사용하기 때문이다. 이 역시 이후의 포스트에 대해 자세하게 다룰 것이다.

quantization

모델 경량화 관련된 기술 중에 mixed-precision의 뒤를 이은 기법 중에 하나이다. 여기서 쓰이는 양자화란 기술은, 양자역학에서의 양자(quantam)의 뜻과도 일맥 상통한다. 양자 역학에서의 양자란 세상의 힘을 구성하는 더이상 쪼개는 것이 불가능한 입자란 뜻인 것처럼, float과는 달리 불연속적으로 더 적은 크기의 정수형 데이터 타입으로 가중치를 표현하는 것을 말한다.

profile
파이썬과 함께라면 두렵지 않아

0개의 댓글