본문 바로가기
카테고리 없음

인공지능 딥러닝과 하드웨어

by 타로101 2024. 5. 2.

딥러닝은 연결주의 철학을 기반으로 하며, 개별 뉴런이나 특징은 지능적이지 많은 수가 함께 작동할 때 지능적인 행동이 나타난다는 접근을 취합니다. 이는 뉴런 수가 많아야 지능적인 행동이 가능하다는 사실에 근거합니다. 지난 30년간 신경망의 크기는 지수적으로 증가해 왔지만, 현재 인공 신경망의 크기는 곤충의 신경계 수준에 불과합니다.

 

인공지능
인공지능

 

고성능 하드웨어와 소프트웨어

딥러닝의 성공을 위해서는 큰 신경망을 다룰 수 있는 고성능 하드웨어와 소프트웨어 기반구조가 필수적입니다.

 

CPU와 GPU의 활용

과거에는 신경망을 단일 CPU를 사용하여 훈련했지만, 현재에는 이러한 방식이 비효율적으로 여겨집니다. 대부분의 경우 GPU 컴퓨팅 또는 여러 대의 CPU를 네트워크로 연결하여 활용합니다. 이러한 고성능 시스템이 일반화되기 전에, 연구자들은 CPU가 신경망의 높은 계산 부담을 처리할 수 없음을 입증하기 위해 노력했습니다.

 

CPU와 GPU 성능 최적화

CPU 성능을 향상하게 하는 효율적인 방법의 하나는 특정 CPU 제품군에 맞춰 세심하게 계산을 구현하는 것입니다. 예를 들어, 고정소수점 산술을 사용하면 부동소수점 산술보다 신경망 작업을 더 빨리 실행할 수 있습니다. 이를 통해 속도를 세 배나 향상하게 한 사례도 있습니다. CPU 모델 간 성능 특성이 다르기 때문에 때로는 부동소수점 구현이 더 빠를 수도 있습니다. 그러나 수치 계산 코드를 특수화하면 성능을 크게 개선할 수 있습니다. 이를 위해 자료구조 최적화와 CPU 벡터 연산 명령어 활용 등의 전략을 사용할 수 있습니다. 이러한 세부 사항은 모형의 크기와 정확도에 큰 영향을 미치므로 무시해서는 안 됩니다.

 

GPU의 다양한 활용

현대의 신경망 구성은 주로 GPU에 의존합니다. GPU는 원래 그래픽 응용 프로그램을 위해 설계된 그래픽 처리 전용 하드웨어입니다. GPU를 장착한 그래픽 카드 시장은 주로 비디오 게임을 즐기는 소비자들의 수요에 의해 성장해 왔습니다. 그러나 좋은 비디오 게임 시스템에 필요한 성능 특성은 신경망에도 유용하게 활용될 수 있습니다.
비디오 게임은 게임 속 장면을 효율적으로 렌더링하기 위해 많은 연산을 병렬로 빠르게 처리해야 합니다. 3D 그래프 모형은 일련의 3차원 정점들로 정의되며, 그래픽 카드는 이러한 정점들에 대해 행렬 곱셈과 나눗셈 연산을 수행하고 동시에 3차원 좌표를 2차원 화면 좌표로 변환하는 작업도 병렬로 처리합니다. 또한 각 픽셀에 대해 여러 연산을 수행하여 픽셀의 값을 결정하고, 개별 계산이 단순하고 조건 분기가 거의 없는 특징을 가집니다. 또한 각 물체의 텍스처를 처리하는 데 필요한 메모리 버퍼를 다루는 계산도 병렬로 이루어집니다. 따라서 그래픽 카드 제조사들은 클럭 속도와 분기 능력을 낮추고 대신 병렬성과 메모리 대역폭을 높이는 방향으로 GPU를 설계합니다.

신경망 알고리즘들도 실시간 그래픽 알고리즘과 유사한 성능 특성을 요구합니다. 신경망은 일반적으로 매우 큰 버퍼를 사용하여 매개변수 값, 활성화 값, 기울기 값을 저장합니다. 각 훈련 단계에서 이러한 버퍼들을 완전히 갱신해야 합니다. 이러한 대용량 버퍼는 전통적인 컴퓨터의 캐시 용량을 초과할 수 있으므로 메모리 대역폭이 성능 제한 요소가 될 수 있습니다. GPU는 CPU에 비해 높은 메모리 대역폭을 가지고 있어 매우 유리합니다. 또한 신경망 훈련 알고리즘은 복잡한 실행 흐름 제어가 적으므로 GPU 하드웨어에서 실행하기에 적합합니다. 뉴런 각각을 독립적으로 처리할 수 있기 때문에 GPU의 병렬성을 쉽게 활용할 수 있습니다.
GPU 하드웨어는 초기에는 주로 그래픽 작업에 특화되어 있었지만, 시간이 흐름에 따라 그 유연성이 향상했습니다. 이제는 사용자가 개별 정점의 좌표 변환이나 픽셀에 색상을 부여하는 작업을 임의로 지정할 수 있습니다. GPU는 원칙적으로 픽셀값에 대한 그래픽 렌더링 작업에 국한되지 않습니다. 따라서 그래픽과 관련 없는 다른 값들도 픽셀에 부여할 수 있으며, 이를 통해 GPU를 그래픽 이외의 용도, 특히 과학 계산 등에 사용할 수 있습니다.

 

GPGPU 기술과 딥러닝

GPGPU 기술의 등장은 신경망 훈련을 위한 그래픽 카드의 인기를 폭발적으로 높였습니다. GPGPU는 렌더링 서브루틴에 국한되지 않고 GPU에서 임의의 코드를 실행하는 기술입니다. NVIDIA는 GPGPU 코드를 작성하기 위한 CUDA라는 프로그래밍 언어를 제공했습니다. CUDA는 C언어와 비슷한 모습을 갖추고 있어 프로그래밍이 비교적 편하며, 병렬성과 메모리 대역폭이 뛰어난 특징을 가지고 있습니다. 이러한 특성으로 인해 GPGPU는 신경망 프로그래밍에 이상적인 플랫폼으로 여겨집니다. 이 플랫폼이 출시되자마자 많은 딥러닝 연구자가 빠르게 이를 받아들였습니다.

 

GPU 코드 작성의 어려움

GPGPU를 위한 효율적인 코드 작성은 여전히 어려운 작업이기 때문에 전문가에게 맡기는 것이 바람직합니다. GPU에서 좋은 성능을 얻기 위해서는 CPU에 대한 기존의 기술과는 많이 다른 기법들이 필요합니다. CPU 기반 코드의 경우 캐시에서 최대한 많은 정보를 읽어드리도록 설계하는 것이 일반적이지만, GPU에서는 대부분의 쓰기 가능 메모리가 캐시에 저장되지 않기 때문에 동일한 값을 반복해서 계산하는 것이 더 효율적일 수 있습니다. GPU 코드는 또한 다중 스레드 방식으로 작동하며 서로 다른 스레드의 실행을 세심하게 조정해야 합니다. 메모리 연산은 합쳐져서 수행될 때 더욱 효율적이며, 이를 위해 각 스레드가 여러 스레드와 함께 하나의 메모리 트랜잭션을 수행할 수 있도록 하는 것이 중요합니다. 또한 GPU의 분기 처리 능력이 제한적이므로 한 그룹의 각 스레드가 동시에 동일한 명령을 수행하도록 하는 것이 중요합니다. 이러한 특성들을 고려하여 GPU용 코드를 작성할 때 주의해야 합니다.

 

결론

딥러닝의 성공을 위해서는 고성능 하드웨어와 소프트웨어 기반구조가 필수적입니다. 특히 GPU의 활용은 신경망 훈련과 실행에 있어 매우 중요하며, GPGPU 기술은 딥러닝 연구에 혁명적인 발전을 가져왔습니다. 하지만 GPU 코드 작성은 여전히 어려운 작업이므로 전문가의 지원이 필요합니다.