PyTorch 1.13 공식 출시: CUDA 업그레이드, 여러 라이브러리 통합, M1 칩 지원

콘텐츠 소개: 최근 PyTorch 팀은 공식 블로그에서 Pytorch 1.13 출시를 발표했습니다. 이 글에서는 새로운 버전의 네 가지 주요 내용을 자세히 소개합니다.
이 기사는 WeChat: PyTorch 개발자 커뮤니티에 처음 게시되었습니다.
공식 소개에 따르면 PyTorch 1.13에는 BetterTransformer의 안정된 버전이 포함되어 있으며, CUDA 10.2 및 11.3을 더 이상 지원하지 않으며, CUDA 11.6 및 11.7로의 마이그레이션이 완료되었습니다. 또한 베타 버전에서는 Apple M1 칩과 functorch에 대한 지원도 추가되었습니다.
PyTorch 1.13의 주요 내용 요약:
-
BetterTransformer 기능 세트는 모델을 수정하지 않고도 추론 중에 일반 Transformer 모델의 빠른 경로 실행을 지원합니다. 개선 사항에는 일반적으로 Transformer 모델에서 사용되는 크기에 대한 add+matmul 선형 대수 커널의 가속화가 포함되었으며, 중첩된 텐서는 이제 기본적으로 활성화됩니다.
-
이전 CUDA 버전은 더 이상 지원되지 않으며, Nvidia에서 출시한 최신 CUDA 버전이 도입되었습니다. 이를 통해 PyTorch와 새로운 NVIDIA Open GPU 커널 모듈에 대한 C++17 지원이 가능해졌습니다.
-
functorch가 별도의 패키지에서 직접 패키지로 변경되었습니다.
import functorch
별도로 설치하지 않고도 PyTorch를 가져와서 사용할 수 있습니다. -
테스트는 M1 칩 Mac에 대한 기본 빌드와 더 나은 PyTorch API 지원을 제공합니다.
안정적인 기능
1. BetterTransformer API
BetterTransformer 기능 세트는 모델을 수정하지 않고도 추론 중에 일반 Transformer 모델의 빠른 경로 실행을 지원합니다.
보완적으로, PyTorch 1.13은 또한 Transformer 모델에서 일반적으로 사용되는 크기에 대한 add+matmul 선형 대수 커널을 가속화합니다.
NLP 모델의 성능을 향상시키기 위해,PyTorch 1.13의 BetterTransformer는 기본적으로 중첩된 텐서를 활성화합니다. 호환성 측면에서는 연속적인 마스크가 제공될 수 있는지 확인하기 위해 마스크 검사를 수행합니다.
Transformer Encoder에서 src_key_padding_mask의 마스크 검사는 mask_check=False를 설정하여 비활성화할 수 있습니다. 이 설정은 정렬된 마스크를 제공하는 것보다 처리 속도를 높일 수 있습니다.
마지막으로, 잘못된 입력에 대한 진단을 단순화하고 빠른 경로 실행 오류에 대한 더 나은 진단 방법을 제공하기 위해 더 나은 오류 메시지가 제공됩니다.
Better Transformer는 PyTorch TorchText 라이브러리에 직접 통합되어 있습니다. 이를 통해 TorchText 사용자는 BetterTransformer의 속도와 효율성을 더 쉽게 활용할 수 있습니다.
2. CUDA 10.2 및 11.3을 더 이상 지원하지 않는 CUDA 11.6 및 11.7을 소개합니다.
CUDA 11은 C++17을 지원하는 최초의 CUDA 버전입니다. CUDA 10.2에 대한 지원을 중단하는 것은 C++17에 대한 PyTorch 지원을 확대하고 기존 CUDA 10.2 전용 명령어를 제거하여 PyTorch 코드를 개선하는 데 중요한 단계입니다.
CUDA 11.3의 철수와 11.7의 도입으로 PyTorch는 NVIDIA Open GPU 커널 모듈과 더욱 호환됩니다. 또 다른 중요한 하이라이트는 지연 로딩 지원입니다.
CUDA 11.7에는 cuDNN 8.5.0이 포함되어 있으며, 여기에는 Transformer 기반 모델을 가속화하고 라이브러리 크기를 30%까지 줄이고 런타임 퓨전 엔진에 다양한 개선 사항을 적용하는 여러 가지 최적화가 포함되어 있습니다.
베타 기능
1. 펑토치
Google JAX와 비슷하게 functorch는 구성 가능한 vmap(벡터화) 및 autodiff 변환을 제공하는 PyTorch의 라이브러리입니다. PyTorch에서 표현하기 어려운 고급 autodiff 사용 사례를 지원합니다. 여기에는 다음이 포함됩니다.
-
모델 앙상블링
-
야코비안과 헤시안의 효율적인 계산
-
샘플당 기울기 또는 기타 샘플당 수량 계산
PyTorch 1.13에는 functorch 라이브러리가 내장되어 있어 별도로 설치할 필요가 없습니다. conda 또는 pip를 통해 PyTorch를 설치한 후 프로그램에서 사용할 수 있습니다. import functorch
.
2. 통합 Intel VTune™ Profiler 및 ITT
PyTorch 사용자가 기본 성능 측정 항목을 사용하여 Intel 플랫폼에서 각 연산자의 성능을 분석하려는 경우PyTorch 스크립트 실행의 연산자 수준 타임라인은 Intel VTune™ Profiler에서 시각화할 수 있습니다.
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
3. NNC: BF16 및 채널에 대한 지원이 추가되었습니다.
NNC에서 Channels last와 BF16에 대한 지원을 추가함으로써 x86 CPU에서 TorchScript의 그래프 모드 추론 성능이 크게 향상되었습니다.
Intel Cooper Lake 프로세서에서는 이 두 가지 최적화를 통해 시각적 모델의 성능을 두 배 이상 향상시킬 수 있습니다.
기존 TorchScript를 통해 채널 마지막 및 BF16 자동 캐스트 API를 통해 성능이 향상될 수 있습니다. 아래에 표시된 것처럼 NNC의 최적화는 새로운 PyTorch DL 컴파일러 TorchInductor로 마이그레이션됩니다.
import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
4. M1 칩이 탑재된 Apple 기기에 대한 지원 추가
PyTorch는 1.12 버전부터 Apple의 M1 칩에 대한 네이티브 빌드를 제공하기 위해 노력해 왔습니다. PyTorch 1.13에서는 관련 API가 더욱 개선되었습니다.
PyTorch 1.13은 torch.distribution을 제외한 모든 하위 모듈을 사용하여 M1 macOS 12.6 인스턴스에서 테스트되었습니다. 이러한 개선된 테스트는 특정 입력에 대한 cpp 확장 및 합성곱 정확성과 같은 문제를 해결합니다.
참고: 이 기능을 사용하려면 M1 칩의 경우 macOS 12 이상이 필요하며 기본 Python(arm64)을 사용합니다.
프로토타입 기능
1. AWS Graviton에 대한 ACL 백엔드 지원
PyTorch 1.13은 Arm Compute Library(ACL)를 통해 aarch64 CPU에서 CV 및 NLP 추론 기능을 상당히 개선했습니다. 이를 통해 ACL 백엔드는 PyTorch 및 torch-xla 모듈을 지원할 수 있습니다. 주요 내용은 다음과 같습니다.
-
aarch64 torch wheel의 기본 백엔드로 mkldnn+acl 활성화
-
arch64 BF16 장치에 mkldnn matmul 연산자를 활성화합니다.
-
TensorFlow xla+acl 기능을 torch-xla로 가져옵니다.
2. 쿠다 살균제
Sanitizer가 활성화되면 사용자의 PyTorch 코드에서 호출되는 기본 CUDA 작업을 분석하여 데이터 경쟁 오류를 감지하기 시작합니다.
참고: 이러한 오류는 서로 다른 CUDA 스트림에서 동기화되지 않은 데이터 액세스로 인해 발생합니다.
Thread Sanitizer와 비슷하게, 발견된 오류는 잘못된 액세스의 스택 추적과 함께 인쇄됩니다.
머신 러닝 애플리케이션에서 손상된 데이터는 쉽게 간과될 수 있으며, 오류는 때로는 명백히 드러나지 않기 때문에 오류를 감지하고 찾는 데 사용되는 CUDA Sanitizer가 특히 중요합니다.
3. Python 3.11에 대한 부분적 지원
사용자는 pip를 통해 Python 3.11을 지원하는 Linux 바이너리를 다운로드할 수 있습니다. 하지만 이 기능은 미리보기 버전일 뿐이며 Distributed, Profiler, FX, JIT 등의 기능은 완벽하게 지원되지 않습니다.
0부터 1까지, PyTorch 공식 튜토리얼을 배워보세요
OpenBayes.com에서는 NLP, CV, DL 및 기타 예제를 포함하되 이에 국한되지 않는 여러 가지 공식 PyTorch 튜토리얼을 중국어로 출시했습니다.콘솔을 방문하여 공개 리소스를 검색하세요.
PyTorch 중국어 튜토리얼을 실행하고, 기사 끝을 클릭하여 원본 텍스트를 읽거나, 다음 링크를 방문하세요.
https://openbayes.com/console/public/tutorials