개발자 소식으로 돌아가기

Summer of open source: building more efficient AI with PyTorch

2022년 9월 20일제작:Suraj Subramanian

참고: 게시물을 검토하고 인사이트를 제공해 주신 Meta AI 파트너 엔지니어, Less Wright 씨에게 특별한 감사를 드립니다.

효율적인 인공 지능(AI) 개발을 주제로 한 이 게시물은 '오픈 소스의 여름' 시리즈 중 두 번째 글입니다. 이 시리즈에서는 오픈 소스 프로젝트가 Meta를 비롯한 다양한 플랫폼에서 영향력을 행사하는 부문과 관련하여 몇 가지 유용한 리소스 및 학습 콘텐츠를 제공합니다. Meta Open Source에서 혁신적이고 확장 가능한 도구를 공유하여 업계의 발전이 실현되고 있는 여러 부문에 대해 알아보세요.

PyTorch: 기초 기술에서 재단으로 이동

PyTorch는 2016년에 출시된 이후 딥 러닝 커뮤니티에서 널리 사용되어 왔으며 이제는 연구 수준을 넘어 프로덕션 시나리오로 그 용도가 확장되고 있습니다. AI 모델에 적용되는 새로운 방법과 사용 사례가 지속적으로 확장되고 있어 머신 러닝(ML)과 인공 지능(AI)에 대한 기대가 큰 시점에 PyTorch는 Linux Foundation 산하에 새롭게 설립된 독립적인 PyTorch Foundation으로 옮겨 가면서 새로운 전환점을 맞이했습니다. 이 재단은 AMD, Amazon Web Services, Google Cloud, Microsoft Azure, Nvidia의 대표를 포함하는 다양한 이사진으로 구성되어 있으며, 앞으로 더욱 확장될 것입니다. 이 재단은 공급업체 중립적인 프로젝트를 통해 AI 도구의 도입을 촉진하고 오픈 소스 도구, 라이브러리, 기타 구성 요소에 누구나 액세스할 수 있도록 하는 것을 목표로 합니다. 또한 이번에 PyTorch가 재단으로 옮겨 가게 되면서 PyTorch와 오픈 소스 커뮤니티가 AI 및 ML의 프로토타이핑에서 프로덕션으로 진행하는 속도가 지속적으로 빨라질 것입니다.

Meta 오픈 소스로 AI 프로세스 간소화

PyTorch는 오픈 소스의 힘을 보여주는 좋은 사례입니다. 초기 오픈 소스 딥 러닝 프레임워크 중 하나인 PyTorch 덕분에 다양한 분야의 사용자가 딥 러닝을 실험하고 자신의 연구 성과를 광범위한 분야에 활용할 수 있었습니다. 최근 PyTorch는 검색 앱 실험, 자율 주행 자동차 개발, 지표 투과 레이더 등을 지원하며 응용 분야를 넓히고 있습니다. AI 도구의 다목적 라이브러리와 오픈 소스 커뮤니티가 결합되면 기술을 다양한 용도로 신속하게 대규모로 반복 개선하고 수정할 수 있습니다.

AI가 더욱 광범위하게 구현되고 있기 때문에 더욱 복잡한 문제를 해결하기 위해 모델의 용량이 늘어나는 추세이며, 그에 따라 이러한 모델을 훈련하는 데 필요한 리소스도 크게 증가했습니다. 다행히도 개발자 커뮤니티의 많은 개발자가 현실적인 입장에서나 환경적인 입장에서 모두 모델의 리소스 사용을 줄여야 할 필요성을 인지하고 있습니다. 이 게시물에서는 양자화를 비롯한 기타 모델 압축 유형이 효율적인 AI로 나아가는 촉매가 되는 이유를 살펴봅니다.

PyTorch 사용에 대한 기준 설정

이 게시물에서는 주로 PyTorch의 중급 및 고급 기능들을 다룹니다. 이제 막 시작하려는 초심자이거나 현재 다른 라이브러리를 사용 중인 전문가일 경우에는 기초 정보부터 시작하는 것이 가장 쉽습니다. PyTorch 초심자 가이드를 참조하세요. 여기에는 Fashion MNIST 데이터 세트를 사용하는 전체 ML 워크플로 소개가 포함됩니다.

PyTorch를 처음 접하는 분들이 참고할 만한 다른 리소스는 다음과 같습니다.

  • PyTorch 커뮤니티 스토리: PyTorch가 농업, 교육, 여행 등의 다양한 산업에 어떤 영향을 미치는지 알아보세요.
  • PyTorch 초심자 시리즈: PyTorch에서 텐서 시작하기, 모델 빌드하기, 훈련 및 추론하기 등의 기본 기술을 소개하는 동영상 재생 목록을 살펴보세요.

양자화: 장기간에 걸쳐 효과가 입증된 기술을 AI에 적용

AI의 효율을 높이는 방법은 여러 가지가 있습니다. AI에 최적화되도록 하드웨어와 소프트웨어를 통합 설계하는 방법은 매우 효과적이지만 맞춤형 하드웨어-소프트웨어 솔루션은 개발하는 데 상당한 시간과 리소스가 소요됩니다. 더 빠르면서 규모는 작은 아키텍처를 구현하는 것도 AI의 효율을 높이는 방법이지만, 아직까지 이런 아키텍처의 상당수는 대규모 모델과 비교하여 정확도가 낮습니다. 더 간단한 방법은 기존 모델을 훈련하고 서비스하는 데 필요한 리소스를 줄이는 방안을 모색하는 것입니다. PyTorch에서 이를 수행하는 한 가지 방법은 양자화를 사용한 모델 압축입니다.

양자화는 손실이 있는 디지털 음악 파일을 만들고 아날로그 신호를 디지털 신호로 바꾸는 데 사용되어 온 수학적 기법입니다. 정밀도를 낮춰서 수학적 계산을 하는 양자화를 사용하면 여러 하드웨어 플랫폼에서 성능을 크게 높일 수 있습니다. 그러면 AI의 효율을 높이는 데 양자화를 사용하는 이유가 무엇일까요? 일부 사례의 경우, 이렇게 상대적으로 간단한 기술을 사용하면 모델 추론의 속도를 크게 높일 수 있습니다(2~4배).

딥 러닝 모델을 구성하는 매개변수는 일반적으로 부동 소수점(FP) 정밀도의 십진수이며, 각 매개변수에는 16비트 또는 32비트의 메모리가 필요합니다. 양자화를 사용하면 숫자가 INT4 또는 INT8로 변환되는 경우가 많은데, 이는 4비트 또는 8비트만 차지합니다. 그러면 모델이 필요로 하는 메모리양이 줄어듭니다. 또한 칩 제조사는 십진수를 사용하는 것보다 정수를 사용하는 연산을 더 빠르게 해주는 특별 산술을 포함합니다.

모델 훈련에 사용할 수 있는 양자화 방법에는 동적, 정적 및 양자화 인식 훈련(QAT), 이렇게 세 가지가 있습니다. 장점과 약점에 대한 간단한 설명이 아래의 표에 나와 있습니다. AI 워크플로에서 이들을 각각 구현하는 방법을 알아보려면 PyTorch의 실용적 양자화 블로그 게시물을 참조하세요.

양자화 방법

장점

약점

동적

  • API 호출 하나로만 손쉽게 사용
  • 분포 드리프트에 더 강하기 때문에 정확도가 조금 더 높음
  • 긴 단기 기억(LSTM) 및 트랜스포머 모델에 효과적

모든 전방 전달에서 추가적 오버헤드 발생

정적(PTQ라고도 함)

  • 오버헤드를 제거하여 동적 양자화보다 추론 속도가 빠름

분포 드리브트에 대해 정기적인 재측정이 필요할 수 있음

양자화 인식 훈련(QAT)

  • 정적 양자화보다 높은 정확도
  • 동적 양자화보다 빠른 추론

높은 연산 비용

AI 워크플로 속도 향상을 위한 추가적 기능

PyTorch 기반 AI의 효율을 높이는 방법은 양자화만 있는 것이 아닙니다. 기능은 정기적으로 업데이트되며, PyTorch에서 AI 워크플로를 개선할 수 있는 몇 가지 다른 방법이 아래에 나와 있습니다.

  • 추론 모드: 이 모드는 추론을 실행하는 데만 코드를 사용할 경우 PyTorch 코드 작성 시 사용할 수 있습니다. 추론 모드는 텐서로 작업할 때 몇 개의 가정을 변경하여 추론 속도를 높입니다. 나중에 특정 응용 분야에서 텐서를 사용하지 않도록 PyTorch에 지시하여(여기에서는 autograd), 해당 시나리오에서 코드를 더 빠르게 실행하도록 조정합니다.

  • 낮은 정밀도: 양자화가 추론 시점, 즉 모델을 훈련한 이후에만 적용됩니다. PyTorch는 훈련 프로세스 자체에는 AMP(자동 혼합 정밀도 훈련)를 사용하여 텐서 종류(FP16, FP32 또는 BF16)에 따라 최적의 형식을 찾아냅니다. PyTorch의 낮은 정밀도 딥 러닝에는 여러 가지 장점이 있습니다. 모델 용량을 낮추고, 모델 훈련에 필요한 메모리를 줄이고, 모델 실행에 필요한 전력을 줄일 수 있습니다. 자세한 내용은 CUDA 지원 GPU로 AMP 사용하기 튜토리얼을 참조하세요.

  • Channels last: 비전 모델과 관련하여 channels-last로도 알려진 NHWC는 PyTorch의 더 빠른 텐서 메모리 형식입니다. channels-last 형식으로 데이터를 저장하면 PyTorch에서 연산이 빨라집니다. 입력 텐서를 channels-last 형식으로 지정하면 다른 형식 유형으로 전환하는 데 필요한 오버헤드가 줄어들어 추론 속도가 더 빨라집니다.

  • 추론에 최적화: 이 TorchScript 프로토타입은 모든 환경에서 모델의 속도를 높여주는 몇 가지 일반적인 최적화를 구현하고 빌드별 설정으로 추론 모델을 준비하기도 합니다. 현재 주요 사용 사례로는 CPU(및 GPU) 기반 비전 모델이 포함됩니다. 이는 프로토타입이므로 이슈가 발생할 수 있습니다. 발생하는 이슈는 PyTorch GitHub 리포지토리에 신고해 주세요.

PyTorch의 새로운 잠재력 활용

AI 워크플로를 가속화하기 위한 새로운 방법이 PyTorch 블로그에서 정기적으로 연구되고 있습니다. 여기에서 최근에 소개된 BetterTransformer(일반적인 실행 시나리오에서 트랜스포머 모델의 속도와 처리량을 최대 2배까지 높여주는 기술)와 같은 기술에 대한 최신 소식을 접할 수도 있습니다. PyTorch에서 특정 기능을 구현하는 방법을 알아보고 싶다면 레시피 페이지에서 모델 최적화, 분산 훈련, 상호운용성 등의 카테고리별로 검색하여 확인할 수 있습니다. 본 게시물에서는 PyTorch와 같은 도구가 오픈 소스와 AI를 어떻게 발전시키고 있는가에 대해 간략하게 살펴보았습니다.

인공 지능 및 머신 러닝을 위한 Meta Open Source의 최신 소식을 알아보고 싶다면 오픈 소스 사이트를 방문하거나, YouTube 채널을 구독하거나, Facebook, Twitter LinkedIn에서 팔로우하세요.