PyTorch 2.4 소개
PyTorch 2.4가 출시되었습니다! PyTorch 2.4는 Python 3.12를 지원하며 torch.compile
의 성능 최적화를 제공합니다. AOTInductor freezing은 성능 기반 최적화를 위해 MKLDNN 가중치의 직렬화를 지원합니다. 이러한 AOTInductor freezing 기능은 기존 Inductor CPP 백엔드와 유사한 성능을 제공하며, 새로운 TCPStore 서버 백엔드는 libuv
를 사용하여 초기화 시간이 크게 단축되었으며, 더 나은 확장성을 제공합니다. 또한, Python 3.12 지원과 더불어 새로운 Python 커스텀 오퍼레이터 API는 사용자 정의 커널을 통합하는 과정을 더욱 간편하게 만들어줍니다.
이번 릴리스는 3,661개의 Commit과 475명의 기여자가 참여했습니다. PyTorch 커뮤니티의 헌신적인 기여에 감사드립니다. PyTorch 2 시리즈를 시작하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
PyTorch 2.4는 이러한 최적화와 새로운 기능을 통해 더 나은 성능과 사용자 경험을 제공합니다. 특히 대규모 모델 학습과 배포 과정에서 성능 향상이 두드러집니다. 새로운 기능들과 최적화는 PyTorch를 더욱 강력한 도구로 만들어, 개발자들이 더욱 효율적으로 작업할 수 있도록 도와줍니다. 이번 릴리스는 다양한 사용자의 피드백을 반영하여 더욱 사용자가 필요로 하는 기능들을 포함하고 있습니다.
PyTorch 2.4 주요 기능 소개
-
Python 3.12 지원:
torch.compile()
이 이제 Python 3.12를 지원합니다. -
AOTInductor 동결 기능: CPU에서 MKLDNN 가중치를 직렬화하여 성능 최적화를 제공합니다.
-
새로운 Python 커스텀 오퍼레이터 API: 사용자 정의 커널 통합이 더욱 쉬워졌습니다.
-
TCPStore 서버 백엔드 변경:
libuv
를 사용하여 초기화 시간 단축 및 확장성 향상.
(Beta 기능) torch.compile
의 Python 3.12 지원
torch.compile
에서 Python 3.12 지원은 PyTorch의 최신 Python 버전과의 호환성을 확장하는 중요한 단계입니다. 이전에는 torch.compile
이 Python 3.8부터 3.11까지 지원했지만, 이번 업데이트를 통해 사용자는 최신 Python 릴리스의 기능과 개선 사항을 활용할 수 있습니다. 이를 통해 개발자는 최신 언어 개선 사항을 활용하면서 PyTorch와 작업을 쉽게 유지하고 통합할 수 있습니다.
이 업데이트는 최신 Python 기능에 의존하는 머신 러닝 및 데이터 과학 프로젝트에 특히 중요합니다. Python 3.12 지원 포함으로 인해 사용자는 더 이상 사용 중인 Python 버전을 타협할 필요가 없으며, 코드베이스가 최신 Python 생태계와 동기화되도록 보장합니다. 또한, 최신 Python 버전으로 프로젝트를 시작할 수 있어 초기부터 미래에 대비한 개발이 가능합니다.
Python 3.12 지원 추가는 또한 PyTorch가 더 넓은 프로그래밍 생태계와 함께 최신 상태를 유지하려는 의지를 반영합니다. 최신 Python 릴리스와 보조를 맞춤으로써 PyTorch는 사용자에게 최신 성능, 보안 및 기능 개선 사항을 제공하여 전반적인 개발 경험을 향상시킵니다.
(Beta 기능) CPU용 AOTInductor freezing
AOTInductor freezing은 CPU에서 실행되는 PyTorch 모델의 성능을 향상시키는 새로운 기능입니다. 이 기능은 MKLDNN 가중치를 직렬화할 수 있게 하여, 일반적으로 Convolution, Linear, ConvTranspose 레이어와 같은 계산 집약적인 작업에서 사용됩니다. freezing 플래그(flag)를 활성화하면 AOTInductor가 Inductor CPP 백엔드와 동일한 작업 세트를 처리할 수 있으며, 유사한 성능 수준에 도달할 수 있습니다.
이 업데이트 전에는 MKLDNN 연산자가 포함된 모델이 프리징이 활성화된 상태에서 실행되지 않았습니다. AOTInductor가 MKLDNN 가중치 직렬화를 지원하지 않았기 때문입니다. 이번 업데이트로 이러한 제한이 해결되어 CPU 기반 모델의 성능을 더욱 향상시킬 수 있습니다. 이 기능을 사용하기 위해서는 TORCHINDUCTOR_FREEZING
환경 변수를 1
로 설정하면 됩니다.
AOTInductor freezing의 도입은 CPU에서 고성능 추론이 필요한 응용 프로그램에 특히 유리합니다. 이 기능은 GPU 리소스가 제한되거나 사용 불가능한 시나리오에서 PyTorch가 경쟁력을 유지하도록 하며, 다한 하드웨어 구성에서 모델을 배포할 수 있는 더 많은 유연성을 제공합니다. AOTInductor 프리징 사용에 대한 자세한 지침은 AOTInductor 튜토리얼에서 확인할 수 있습니다.
(Beta 기능) 새로운 고수준 Python 커스텀 오퍼레이터 API
새로운 고수준 Python 커스텀 오퍼레이터 API는 PyTorch에 커스텀 커널을 통합하는 과정을 크게 단순화합니다. 이전에는 저수준 API를 사용하여 커스텀 오퍼레이터를 생성해야 했으며, 이는 PyTorch 내부에 대한 깊은 이해를 요구하고 다양한 도전에 직면하게 했습니다. 새로운 API는 이러한 복잡성을 추상화하여 개발자가 PyTorch의 내장 오퍼레이터처럼 동작하는 커스텀 오퍼레이터를 더 쉽게 생성할 수 있도록 합니다.
이 새로운 API는 더 직관적이고 사용자 친화적으로 설계되어 더 넓은 범위의 개발자가 접근할 수 있게 합니다. torch.compile
및 기타 PyTorch 서브시스템과의 호환성을 보장하여 원활한 통합 경험을 제공합니다. 이는 커스텀 연산이 필요한 사용자에게 특히 유리하며, 저수준 API와 관련된 학습 곡선과 잠재적 위험을 줄입니다.
고수준 API 도입은 PyTorch의 확장성을 높이고 개발자 친화성을 강화하려는 지속적인 노력의 일환입니다. 커스텀 오퍼레이터 생성의 장벽을 낮춤으로써 PyTorch는 사용자가 혁신하고 프레임워크를 특정 요구에 맞출 수 있도록 지원합니다. 새로운 커스텀 오퍼레이터 API 사용 방법과 예제에 대한 자세한 내용은 튜토리얼에서 확인할 수 있습니다.
(Prototype 기능) libuv
를 사용하는 TCPStore의 기본 서버 백엔드 전환
TCPStore 백엔드가 고성능 이벤트 기반 네트워킹 라이브러리인 libuv
를 사용하도록 업데이트되었습니다. 이 변경은 초기화 시간을 크게 줄이고 특히 대규모 작업을 위한 확장성을 향상시킵니다. 이전 백엔드는 기능적으로 작동했지만, libuv
가 제공하는 성능과 효율성을 동일하게 제공하지 못했습니다. 따라서 이번 업데이트는 상당한 개선이라고 할 수 있습니다.
libuv
를 채택함으로써 PyTorch는 TCPStore 초기화 과정을 더 빠르고 효율적으로 만듭니다. 이는 분산 학습 시나리오에서 특히 유익하며, 빠른 설정 시간이 중요한 경우에 유리합니다. 초기화 시간이 단축되면 실제 계산에 더 많은 시간을 할애할 수 있어 전체 워크플로우가 최적화됩니다.
이 업데이트는 PyTorch의 분산 컴퓨팅 기능의 성능과 확장성을 향상시키기 위한 더 큰 전략의 일환입니다. libuv
를 활용함으로써 PyTorch는 대규모 머신 러닝 작업의 요구를 더 잘 처리할 수 있으며, 분산 학습 요구 사항에 대해 보다 견고하고 효율적인 프레임워크를 제공합니다. 이번 업데이트와 관련된 자세한 정보와 대체 지침은 튜토리얼에서 확인할 수 있습니다.
(Prototype 기능) FSDP2: DTensor 기반 매개변수 별 샤딩 FSDP
FSDP2는 dim-0 매개변수 별 샤딩을 사용하는 새로운 완전 샤딩 데이터 병렬(FSDP) 구현을 도입합니다. 이 접근 방식은 FSDP1의 플랫 매개변수 샤딩의 조합성 문제를 해결합니다. dim-0 매개변수 별 샤딩을 사용하여 FSDP2는 모델 매개변수를 여러 장치에 더 유연하고 효율적으로 분배할 수 있습니다.
FSDP2의 목적은 분산 학습의 확장성과 효율성을 향상시키는 것입니다. FSDP2의 설계는 매개변수 샤딩을 더 세밀하게 하여 부하 균형을 개선하고 통신 오버헤드를 줄입니다. 이는 대규모 모델 학습에 특히 중요하며, 효율적인 매개변수 분배가 학습 시간과 자원 활용에 큰 영향을 미칠 수 있습니다.
FSDP2의 개발은 분산 학습 기술을 발전시키기 위한 PyTorch의 의지를 반영합니다. 이전 FSDP 구현의 한계를 해결함으로써 FSDP2는 머신 러닝 모델의 확장을 위한 더 견고한 솔루션을 제공합니다. FSDP2의 설계 및 동기에 대한 자세한 개요는 GitHub의 RFC에서 확인할 수 있습니다.
(Prototype 기능) torch.distributed.pipelining
을 통한 간소화된 파이프라인 병렬처리
파이프라인 병렬처리는 모델의 실행을 여러 단계로 분할하여 모델의 다른 부분을 동시에 처리할 수 있게 하는 기술입니다. torch.distributed.pipelining
은 파이프라인 병렬처리를 구현하기 위한 도구를 제공하여 개발자가 이를 쉽게 구현할 수 있도록 합니다. 이 기능은 여러 마이크로 배치가 병렬로 처리되도록 지원하여 모델 학습의 효율성을 높입니다.
이 도구는 분산 데이터 병렬(DDP) 및 완전 샤딩 데이터 병렬(FSDP)과 같은 다른 PyTorch 분산 기능과의 조합성을 지원하도록 설계되었습니다. 이 조합성은 개발자가 코드베이스를 크게 변경하지 않고도 파이프라인 병렬처리를 기존 워크플로우에 쉽게 통합할 수 있도록 합니다. 파이프라인 병렬처리와 다른 분산 기능을 결합할 수 있는 능력은 더 큰 유연성과 최적화 기회를 제공합니다.
이 기능은 단일 장치의 메모리에 맞지 않는 대규모 모델 학습에 특히 유용합니다. 모델을 여러 장치에 분배하고 마이크로 배치를 병렬로 처리함으로써 더 높은 처리량과 빠른 학습 시간을 달성할 수 있습니다. 파이프라인 병렬처리 구현에 대한 자세한 정보와 가이드는 문서와 튜토리얼에서 확인할 수 있습니다.
(성능 개선) AWS Graviton 프로세서를 위한 torch.compile
최적화
torch.compile
기능은 AWS Graviton3 프로세서에 최적화되어 모델 추론 성능을 크게 향상시켰습니다. 이러한 최적화는 Hugging Face 모델 추론에서 최대 2배, TorchBench 모델 추론에서 최대 1.35배 더 나은 성능을 제공합니다. 이러한 최적화는 자연어 처리(NLP), 컴퓨터 비전(CV), 추천 모델을 포함한 다양한 모델에 적용되어 널리 사용될 수 있습니다.
이러한 개선은 하드웨어 및 소프트웨어 최적화의 조합으로 이루어졌습니다. AWS Graviton3 프로세서는 계산 집약적인 작업에 대해 높은 성능을 제공하도록 설계되었으며, PyTorch의 최적화는 이러한 기능을 활용하여 추론 속도를 향상시킵니다. 이는 AWS Graviton3 기반 EC2 인스턴스에서 모델을 배포하는 데 있어 PyTorch를 더 매력적인 옵션으로 만듭니다.
대규모 추론 워크로드를 AWS에서 실행하는 개발자와 조직에게 이러한 최적화는 성능을 크게 향상시킵니다. 자세한 기술 정보와 벤치마킹 결과는 블로그 게시물에서 확인할 수 있으며, 특정 개선 사항과 다양한 모델 유형에 대한 영향을 제공합니다.
(성능 개선) TorchInductor에서 BF16 심볼릭 쉐이프 최적화
TorchInductor의 BF16 심볼릭 쉐이프 최적화는 bfloat16(BF16) 데이터 유형을 사용하는 모델의 성능과 품질을 향상시킵니다. 심볼릭 쉐이프 최적화는 다양한 배치 크기와 시퀀스 길이를 가진 추론 서비스와 같은 동적 쉐이프 시나리오를 더 효율적으로 처리할 수 있게 합니다. 이 기능은 동적 데이터 입력과의 호환성을 유지하면서 성능을 개선합니다.
BF16 데이터 유형은 정밀도와 성능의 균형을 제공하여 높은 계산 효율성이 필요한 머신 러닝 작업에 적합합니다. 심볼릭 쉐이프 최적화는 BF16의 장점을 활용하여 정적 쉐이프 시나리오에 비해 상당한 성능 향상을 제공합니다. 이는 데이터 의존 출력 쉐이프를 가진 탐지 모델과 같이 입력 크기에 맞춰 조정이 필요한 모델에 특히 유리합니다.
TorchInductor에서 BF16 심볼릭 쉐이프 최적화의 통합은 PyTorch가 다양한 하드웨어 구성에서 성능을 향상시키려는 의지를 반영합니다. 심볼릭 쉐이프 지원을 BF16 하드웨어 가속과 결합함으로써 PyTorch 사용자는 상당한 성능 향상을 달성할 수 있습니다. 이 기능을 사용하기 위한 API는 간단하여 개발자가 이러한 최적화를 워크플로우에 쉽게 통합할 수 있습니다.
(성능 개선) CPU 장치를 활용한 GenAI 프로젝트 성능 최적화
PyTorch 2.4는 CPU 장치를 활용한 생성 AI(GenAI) 프로젝트의 성능 최적화를 도입했습니다. 이러한 최적화는 "Segment Anything Fast" 및 "Diffusion Fast"와 같은 프로젝트를 통해 시연되었으며, 이제 CPU 실행 지원을 포함합니다. 이러한 프로젝트가 CPU에서 실행될 수 있도록 하여 개발자에게 더 많은 유연성과 성능 옵션을 제공합니다.
최적화에는 자가 주목 밀도 레이어(SDPA)를 위한 블록 단위 주목 마스크 구현이 포함되어 있어 최대 메모리 사용량을 줄이고 성능을 향상시킵니다. 또한 Inductor CPU에서 레이아웃 전파 규칙의 일련의 최적화가 수행되어 전체 효율성을 높였습니다. 이러한 개선으로 인해 복잡한 모델을 CPU에서 더 나은 성능으로 실행할 수 있게 되어 GPU 의존도를 줄였습니다.
개발자는 CLI에서 --device cpu
를 지정하여 이러한 최적화를 활용할 수 있으며, 성능 개선을 직접 관찰할 수 있습니다. 이러한 프로젝트에 대한 자세한 지침과 API 사용 방법이 제공되어 사용자가 쉽게 구현하고 향상된 CPU 지원의 이점을 누릴 수 있습니다. 이러한 최적화는 다양한 하드웨어 환경에서 높은 성능을 제공하려는 PyTorch의 의지를 강조하며, 다양한 응용 프로그램에 적합한 다용도 프레임워크를 만듭니다.
결론
PyTorch 2.4는 프레임워크의 성능, 확장성 및 사용성을 향상시키는 다양한 새로운 기능과 최적화를 도입했습니다. Python 3.12 지원, CPU용 AOTInductor 프리징, 새로운 고수준 커스텀 오퍼레이터 API는 PyTorch를 더욱 강력하고 사용자 친화적으로 만듭니다. FSDP2와 간소화된 파이프라인 병렬처리와 같은 프로토타입 기능은 프레임워크의 기능을 확장하며, AWS Graviton 프로세서와 GenAI 프로젝트의 성능 최적화는 PyTorch가 머신 러닝 기술의 최전선에 머무르도록 보장합니다.
이번 릴리스는 PyTorch 커뮤니티의 협력적인 노력의 결과물로, 프레임워크를 발전시키는 데 기여한 수많은 기여자가 이끌어 나갑니다. 사용자는 새로운 기능을 탐색하고 문제를 보고하여 PyTorch를 더욱 정교하게 개선하는 데 도움을 주기를 권장합니다. 혁신과 우수성에 대한 지속적인 노력은 PyTorch가 머신 러닝 커뮤니티의 진화하는 요구를 계속해서 충족하도록 보장합니다.
PyTorch 2.4 출시 공지
PyTorch 2.4 릴리즈 노트
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~