>기술 주변기기 >일체 포함 >OpenAI 프로그래밍 언어는 Bert 추론을 12배 가속화하고 엔진이 주목을 받습니다.

OpenAI 프로그래밍 언어는 Bert 추론을 12배 가속화하고 엔진이 주목을 받습니다.

WBOY
WBOY앞으로
2023-04-23 15:19:071318검색

코드 한 줄이 얼마나 강력한가요? 오늘 소개할 Kernl 라이브러리를 사용하면 사용자는 단 한 줄의 코드만으로 GPU에서 Pytorch 변환기 모델을 몇 배 더 빠르게 실행할 수 있으므로 모델 추론 속도가 크게 향상됩니다. ​

특히 Kernl의 축복으로 Bert의 추론 속도는 Hugging Face 기준보다 12배 빠릅니다. 이 성과는 주로 Kernl이 새로운 OpenAI 프로그래밍 언어인 Triton 및 TorchDynamo에서 맞춤형 GPU 커널을 작성했기 때문입니다. 프로젝트 작성자는 Lefebvre Sarrut 출신입니다.

OpenAI 프로그래밍 언어는 Bert 추론을 12배 가속화하고 엔진이 주목을 받습니다.

GitHub 주소: https://github.com/ELS-RD/kernl/

다음은 Kernl과 다른 추론 엔진 간의 비교입니다. 가로축은 각각 배치 크기와 시퀀스 길이를 나타내며 세로축은 추론 가속도입니다.

OpenAI 프로그래밍 언어는 Bert 추론을 12배 가속화하고 엔진이 주목을 받습니다.

벤치마크는 3090 RTX GPU 및 12코어 Intel CPU에서 실행됩니다.

위 결과에서 볼 수 있듯이, 긴 시퀀스 입력에 있어서는 Kernl이 가장 빠른 추론 엔진(위 그림의 오른쪽 절반)이라고 할 수 있으며, NVIDIA의 TensorRT에 가깝습니다. 짧은 입력 시퀀스((위 그림의 왼쪽 절반). 그렇지 않으면 Kernl 커널 코드가 매우 짧고 이해하고 수정하기 쉽습니다. 이 프로젝트는 커널 교체를 단순화하기 위해 Triton 디버거와 도구(Fx 기반)도 추가하므로 PyTorch 모델 소스 코드를 수정할 필요가 없습니다. ​

프로젝트 작성자인 Michaël Benesty는 변환기 추론을 가속화하는 라이브러리인 Kernl을 발표했습니다. Kernl은 매우 빠르며 때로는 SOTA 성능에 도달하며 대부분의 변환기 아키텍처와 일치하도록 해독될 수 있습니다.

T5에서도 테스트했는데 6배 빨라졌다고 베네스티는 이것이 시작에 불과하다고 말했습니다.

Kernl은 왜 만들어졌나요? ​

Lefebvre Sarrut에서 프로젝트 작성자는 프로덕션에서 여러 변압기 모델을 실행하며 그 중 일부는 주로 검색 및 Recsys와 같이 대기 시간에 민감합니다. 그들은 또한 OnnxRuntime 및 TensorRT를 사용하고 있으며 커뮤니티와 지식을 공유하기 위해 변환기 배포 OSS 라이브러리도 만들었습니다. ​

최근 저자는 생성 언어를 테스트하고 속도를 높이기 위해 열심히 노력하고 있습니다. 그러나 기존 도구를 사용하여 이를 수행하는 것은 매우 어려운 것으로 입증되었습니다. Onnx는 또 다른 흥미로운 형식으로, 훈련된 모델을 저장하는 데 사용되며 광범위한 하드웨어 지원을 제공합니다.

그러나 Onnx 생태계(주로 추론 엔진)는 새로운 LLM 아키텍처를 처리할 때 다음과 같은 제한 사항이 있습니다.

  • 제어 흐름 없이 모델을 Onnx로 내보내는 것은 간단합니다. 추적. 그러나 동적 동작은 얻기가 더 어렵습니다.
  • PyTorch와 달리 ONNX Runtime/TensorRT는 아직 텐서 병렬 처리를 구현하는 다중 GPU 작업을 기본적으로 지원하지 않습니다.
  • TensorRT는 동일한 변환기 모델에 대해 2가지 동적을 관리할 수 없습니다. 구성 파일 축. 그러나 일반적으로 다양한 길이의 입력을 제공하기를 원하므로 배치 크기당 하나의 모델을 구축해야 합니다.
  • 매우 큰 모델이 일반적이지만 Onnx(protobuff 파일)에는 파일 측면에서 몇 가지 제한이 있습니다. 문제를 해결하기 위해 가중치는 모델 외부에 저장됩니다. ​

매우 짜증나는 사실은 새 모델이 결코 가속화되지 않는다는 것입니다. 이를 위해 다른 사람이 사용자 정의 CUDA 커널을 작성할 때까지 기다려야 합니다. 기존 솔루션이 나쁘다는 것은 아닙니다. OnnxRuntime의 가장 큰 장점 중 하나는 다중 하드웨어 지원이며 TensorRT는 매우 빠른 것으로 알려져 있습니다.

그래서 프로젝트 작성자는 Python/PyTorch에서 TensorRT만큼 빠른 최적화 프로그램을 원했고 이것이 바로 Kernl을 만든 이유입니다.

어떻게 하나요? ​

메모리 대역폭은 일반적으로 딥러닝의 병목 현상입니다. 추론 속도를 높이려면 메모리 액세스를 줄이는 것이 좋은 전략인 경우가 많습니다. 짧은 입력 시퀀스에서 병목 현상은 일반적으로 제거해야 하는 CPU 오버헤드와 관련이 있습니다. 프로젝트 작성자는 주로 다음 3가지 기술을 사용합니다.​

첫 번째는 CUDA와 같은 GPU 커널을 작성하기 위한 언어인 OpenAI Triton입니다. 더 효율적인 Nvidia Triton 추론 서버와 혼동하지 마십시오. . GPU 메모리에 중간 결과를 유지하지 않고 계산을 연결하도록 여러 작업을 융합하여 개선이 이루어졌습니다. 저자는 이를 사용하여 Attention(Flash Attention으로 대체), 선형 레이어 및 활성화, Layernorm/Rmsnorm을 다시 작성합니다. ​

두 번째는 CUDA 그래프입니다. 워밍업 단계에서는 실행된 각 코어와 해당 매개변수를 저장합니다. 그런 다음 프로젝트 작성자는 전체 추론 과정을 재구성했습니다. ​

마지막으로 프로젝트 작성자가 동적 동작을 처리하는 데 도움이 되도록 Meta가 제안한 프로토타입인 TorchDynamo가 있습니다. 워밍업 단계에서는 모델을 추적하고 Fx 그래프(정적 계산 그래프)를 제공합니다. 그들은 Fx 그래프의 일부 작업을 Python으로 다시 컴파일된 자체 커널로 대체했습니다.

향후 프로젝트 로드맵에는 더 빠른 워밍업, 비정형 추론(패딩에서 손실 계산 없음), 교육 지원(긴 시퀀스 지원), 다중 GPU 지원(다중 병렬화 모드), 양자화(PTQ)가 포함될 예정입니다. , 새로운 배치의 Cutlass 커널 테스트 및 향상된 하드웨어 지원 등

자세한 내용은 원본 프로젝트를 참고해주세요.

위 내용은 OpenAI 프로그래밍 언어는 Bert 추론을 12배 가속화하고 엔진이 주목을 받습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제