다이어트 코드: 동적 텐서 프로그램을 위한 자동 최적화
자동 코드 생성을 위한 다이어트 코드: 동적 암 진행에 대한 자동 코드 생성
목차
- 소개
- 현재의 자동 스케줄 설계
- 동적 Shift 워크로드를 위한 도전 과제
- 다이어트 코드 개요
- 주요 아이디어: Shape Generic Search Space
- 주요 아이디어: Micro Kernel 기반의 비용 모델
- 동적 칩 워크로드를 지원하기 위한 새로운 인터페이스
- 다이어트 코드의 효과적인 성능 평가
- 다이어트 코드와 기존 자동 스케줄러의 비교 결과
- 다이어트 코드의 현재 상태와 앞으로의 계획
소개
안녕하세요! 저는 이 발표를 맡은 14입니다. 이번에는 동적 암 진행을 위한 자동 코드 생성에 대한 저희의 연구인 다이어트 코드를 소개하려고 합니다. 이전부터 사용되고 있는 자동 스케줄 설계에 대한 간단한 리뷰부터 시작하여 다이어트 코드의 핵심 아이디어와 성능 평가 결과를 알려드리겠습니다.
현재의 자동 스케줄 설계
자동 스케줄 설계의 핵심은 사용자가 연산자 사양과 표준 시트 설명을 제공함으로써 시작됩니다. 이 정보를 바탕으로 자동 스케줄러는 고려해야 할 모든 스케줄을 포함하는 탐색 단계를 자동으로 구성합니다. 그러나 가장 큰 도전은 이론적으로 연산자마다 무한히 많은 스케줄이 가능하다는 점입니다. 이 간단한 변환 예시를 들어보겠습니다. 루프 구조에 루프 테일링 변환을 적용한다고 가정해봅시다. 이 간단한 변환에도 불구하고 스케줄 후보는 무한히 많을 수 있습니다. 따라서 탐색 공간을 제한하기 위해 현재 채택되는 해결책 중 하나는 완벽한 요인에 국한된 테일링 후보들로 제한하는 것입니다. 완벽한 요인은 루프 범위에 의존하기 때문에 이 접근 방식은 완벽한 요소에 의존하는 탐색 공간 구성이라고 부릅니다. 이 방식의 추가적인 이점은 루프 본문에 다른 경계 확인을 도입할 필요가 없다는 점입니다. 자동 스케줄러는 각 스케줄의 성능을 정확하게 예측할 수 있는 완전한 프로그램 비용 모델을 도입하여 탐색을 안내하고, 고성능 프로그램을 생성합니다. 그러나 현재 자동 스케줄 설계에는 몇 가지 도전 과제가 있습니다.
도전 과제 1: 동일 연산자의 다른 모양 간 스케줄 공유의 어려움
같은 연산자의 다른 모양 간에 스케줄 공유하기 어렵습니다. 이전에 소개한 루프 테일링 예시를 다시 생각해봅시다. 외부 루프 범위가 50에서 49로 변경되었다고 가정해봅시다. 이 한 가지 변경으로 테일링 후보는 7로 줄어들게 됩니다. 7은 50의 모든 요소와 교집합이 없는 요소 세트인데, 이러한 이유로 테일링 후보를 공유하기 어렵습니다. 또한, 모양에 종속적인 탐색 공간 구성은 동적 Shift 워크로드도 스케줄하는 것이 매우 어렵다는 점을 의미합니다. 컴파일 시간에 모양이 동적인 워크플로우를 가정한 경우, 해당 워크플로우의 각 모양 인스턴스를 개별적으로 탐색해야 하는데, 이는 효율적이지 않습니다.
도전 과제 2: 비완벽한 후보 고려하지 않고 최적 성능 제공의 어려움
현재의 스케줄러는 완벽하지 않은 후보를 고려하지 않고 최적 성능을 제공할 수 있습니다. 하지만 앞서 언급한 테일링 예시를 보면 현재 set 7과 같이 하나의 후보로 제한된 스케줄은 매우 제한적입니다. 후보 2, 3 등도 마찬가지로 유효하며, 7보다 더 나은 성능을 제공할 수 있습니다. 당연히 루프 본문에 추가적인 경계 확인이 필요하지만, 이러한 추가적인 이항 검사의 성능 오버헤드는 로컬 패딩 코드 생성 최적화 기술을 사용하여 무시할 수 있을 정도로 미미합니다. 이러한 도전 과제들을 해결하기 위해 저희는 다이어트 코드라는 새로운 자동 스케줄 프레임워크를 제안합니다.
다이어트 코드 개요
다이어트 코드는 동적 칩 워크로드를 효율적으로 지원하기 위한 자동 스케줄 프레임워크입니다. 이번 섹션에서는 다이어트 코드의 핵심 아이디어인 Shape Generic Search Space와 Micro Kernel 기반의 비용 모델에 대해 간략히 설명하겠습니다.
주요 아이디어: Shape Generic Search Space
Shape Generic Search Space는 마이크로 커널로 구성된 탐색 공간을 구축합니다. 각 마이크로 커널은 전체 연산을 수행하며, 동일한 연산자의 모든 모양에서 사용할 수 있습니다. 오른쪽 슬라이드에 나와있는 예시를 통해 잘 이해해보겠습니다. 마이크로 커널 dense 128x128은 자신을 공간 차원을 따라 8번, 시간 차원을 따라 18번 복제하여 compute 1024x2048을 구현할 수 있습니다. 마이크로 커널은 형태 요인 대신 하드웨어 제약 조건을 기반으로 샘플링되므로, 형태에 독립적인 탐색 공간을 형성합니다.
주요 아이디어: Micro Kernel 기반의 비용 모델
현재 비용 모델은 한 모양에서 훈련된 상태로 다른 모양에서는 부정확할 수 있습니다. 슬라이드 오른쪽에서 확인할 수 있듯이 워크로드 모양이 변화함에 따라 기존 비용 모델은 컴퓨터 지원의 변화를 포착하지 못합니다. 또한, 컴퓨터 지원은 시프트 차원에 대해 빠르고 예측 가능한 선형 추세를 보입니다. 이를 통해 기존 비용 모델을 xg 규칙을 사용하여 훈련 가능한 마이크로 커널 비용과 선형 함수를 사용하여 공간 일반화 비용으로 분해할 수 있습니다. 이러한 두 가지 주요 아이디어로부터 다이어트 코드의 새로운 인터페이스를 고안하여 동적 칩 워크로드를 더욱 효과적으로 지원할 수 있게 되었습니다.
동적 칩 워크로드를 지원하기 위한 새로운 인터페이스
다이어트 코드는 동적 칩 워크로드를 지원하기 위해 새로운 인터페이스를 제공합니다. 사용자는 동적인 모양 변수와 해당 인스턴스를 정의하고, 이를 워크로드 함수에 전달하고, 각 모양 인스턴스에 가중치를 할당할 수 있습니다. 이를 통해 한 번의 자동 스케줄링으로 모든 모양 인스턴스를 처리할 수 있으며, 스케줄링 시간을 크게 줄일 수 있습니다.
다이어트 코드의 효과적인 성능 평가
다이어트 코드의 성능을 평가하기 위해 더 많은 Telsa T4 GPU와 11.3과 2DN 8.0을 장착한 하드웨어 플랫폼에서 실험을 진행했습니다. 우리는 다이어트 코드를 사용하여 최신 언어 모델 애플리케이션인 Bird 모델에서 추출한 dense layer를 자동 스케줄링했습니다. 사용한 시퀀스 길이는 1에서 1.8까지 균등하게 샘플링되었습니다. 실험 결과, 다이어트 코드가 현재 자동 스케줄러 디엠에 비해 평균적으로 30% 더 나은 성능을 제공하며, 쿨 플러스 완더 라이브러리보다 5% 더 우수한 성능을 보입니다. 또한, 다이어트 코드는 한 번의 자동 스케줄링으로 모든 모양 인스턴스를 처리할 수 있어, 스케줄링 시간이 약 5.6배 줄어듭니다. 이러한 결과는 다이어트 코드가 동적 Shift 워크로드를 위한 실용적인 자동 스케줄러라는 것을 보여줍니다.
다이어트 코드와 기존 자동 스케줄러의 비교 결과
다이어트 코드와 기존 자동 스케줄러를 비교한 결과를 살펴보도록 하겠습니다. Bird 모델에서 추출한 dense layer를 사용한 배치 행렬 곱 연산을 스케줄링했을 때, 다이어트 코드는 모든 시퀀스 길이에서 기준인 DMM보다 평균적으로 24% 성능 향상을 제공하며, 쿨 플러스 완더 라이브러리보다 15% 더 나은 성능을 보였습니다. 이 결과는 다이어트 코드가 동적 칩 워크로드를 위한 실용적인 자동 스케줄러라는 것을 더욱 확신시켜 줍니다.
다이어트 코드의 현재 상태와 앞으로의 계획
이번 발표를 통해 저희는 다이어트 코드를 소개하였으며, 동적 칩 워크로드를 위한 자동 스케줄러로서의 가능성을 보여드렸습니다. Shape Generic Search Space와 Micro Kernel 기반의 비용 모델을 포함한 핵심 아이디어를 제시하였고, 실제 성능 평가 결과도 함께 소개하였습니다. 저희는 현재 다이어트 코드를 QBM 메인 브랜치의 일부로 통합하기 위해 노력하고 있습니다. 끝으로 참석해주신 여러분께 다시 한 번 감사의 말씀 드리며, 궁금한 점이 있으시면 언제든지 질문해주시기 바랍니다.
하이라이트
- 자동 코드 생성을 위한 다이어트 코드 소개
- 현재의 자동 스케줄 설계 동향 및 과제
- Shape Generic Search Space: 마이크로 커널로 구성된 탐색 공간 생성
- Micro Kernel 기반의 비용 모델: 훈련 가능한 마이크로 커널 비용과 공간 일반화 비용
- 동적 칩 워크로드를 지원하기 위한 새로운 인터페이스
- 다이어트 코드의 효과적인 성능 평가 결과
- 다이어트 코드와 기존 자동 스케줄러의 비교 결과
- 다이어트 코드의 현재 상태와 앞으로의 계획
자주 묻는 질문
Q: 다이어트 코드는 기존 자동 스케줄러와 어떻게 다른가요?
A: 다이어트 코드는 동적 칩 워크로드를 효율적으로 처리할 수 있도록 새로운 아이디어와 인터페이스를 제공합니다. 기존의 자동 스케줄러보다 더 높은 성능을 제공하며, 한 번의 자동 스케줄링으로 모든 모양 인스턴스를 처리할 수 있어 스케줄링 시간을 크게 단축시킬 수 있습니다.
Q: 다이어트 코드의 성능 평가는 어떻게 이루어졌나요?
A: 저희는 Tesla T4 GPU를 장착한 하드웨어 플랫폼에서 다이어트 코드를 사용하여 Bird 모델에서 추출한 dense layer를 스케줄링하고 성능을 측정했습니다. 이를 통해 다이어트 코드가 기존 자동 스케줄러에 비해 더 나은 성능을 제공한다는 것을 확인했습니다.
Q: 다이어트 코드의 현재 상태와 앞으로의 계획은 무엇인가요?
A: 현재 저희는 다이어트 코드를 QBM 메인 브랜치의 일부로 통합하기 위해 노력하고 있습니다. 앞으로도 다이어트 코드의 성능 향상과 동적 칩 워크로드를 위한 더욱 효율적인 자동 스케줄링을 위해 연구를 계속 진행할 예정입니다.