Siyuan Feng: Apache TVM과 머신 러닝 컴파일의 개발

본 글은 HyperAI 위챗 공식 계정에 처음 게재되었습니다~
안녕하세요. 오늘 2023년 TVM 미팅에 여러분을 환영합니다. Apache TVM PMC로서,TVM의 개발과 TVM의 미래 Unity 프레임워크에 대해 알려드리겠습니다.
Apache TVM 진화
우선, MLC(머신러닝 컴파일)가 존재하는 이유는 무엇일까요? AI 모델이 계속 확장됨에 따라 실제 생산 애플리케이션에 대한 수요도 더 많아질 것입니다. 그림에서 볼 수 있듯이 많은 애플리케이션의 1차 계층 AI 애플리케이션은 ResNet, BERT, Stable Diffusion 및 기타 모델을 포함하여 공유됩니다.

2차 시나리오는 다릅니다. 개발자는 GPU 가속이 필요한 클라우드 컴퓨팅과 고성능 컴퓨팅을 시작으로 다양한 시나리오에 이러한 모델을 배포해야 합니다. AI 분야가 급속도로 발전함에 따라 가장 중요한 과제는 이를 수천 가구, 즉 개인용 PC, 모바일폰, 엣지 디바이스에 접목하는 것입니다.
그러나 시나리오마다 비용 절감, 성능 개선 등 요구 사항이 다릅니다. Out of the Box는 사용자가 웹 페이지를 열거나 애플리케이션을 다운로드한 직후에 바로 사용할 수 있어야 합니다. 휴대전화는 전력을 절약해야 합니다. Edge는 OS가 없는 하드웨어에서 실행되어야 합니다. 때로는 이 기술이 저전력, 저컴퓨팅 칩에서 실행되어야 할 수도 있습니다. 이는 모든 사람이 다양한 응용 프로그램에서 겪는 어려움입니다. 이 문제를 어떻게 해결하나요?
MLC 분야에서는 멀티레벨 IR 설계라는 의견이 일치하고 있습니다.핵심에는 세 개의 층이 있습니다. 첫 번째 층은 그래프 수준 IR, 중간 층은 텐서 수준 IR, 다음 층은 하드웨어 수준 IR입니다. 이러한 계층은 모델이 그래프이고, 중간 계층이 텐서 수준 IR이며, MLC의 핵심은 텐서 컴퓨팅을 최적화하는 것이기 때문에 필요합니다. 그 아래의 두 계층인 하드웨어 수준 IR과 하드웨어는 서로 연결되어 있습니다. 즉, TVM은 어셈블리 명령어를 직접 생성하는 데 관여하지 않고, 중간에 좀 더 세부적인 최적화 기술이 들어가게 되는데, 이는 제조업체나 컴파일러가 해결하게 됩니다.

ML 컴파일러는 다음과 같은 목표를 염두에 두고 설계되었습니다.
- 종속성 최소화
첫째, 종속성 배포를 최소화합니다.AI 애플리케이션이 실질적으로 성공하지 못한 이유는 배포 임계값이 너무 높기 때문입니다. Stable Diffusion보다 ChatGPT를 사용하는 사람이 더 많은 것은 Stable Diffusion이 충분히 강력하지 않기 때문이 아니라, ChatGPT가 바로 사용할 수 있는 환경을 제공하기 때문입니다. 제 생각에 Stable Diffusion을 사용하려면 먼저 GitHub에서 모델을 다운로드한 다음 GPU 서버를 열어 배포해야 하지만 ChatGPT는 바로 사용할 수 있습니다. 즉시 사용의 핵심은 종속성을 최소화하여 모든 사람이 모든 환경에서 사용할 수 있도록 하는 것입니다.
- 다양한 하드웨어 지원
두 번째는 다양한 하드웨어를 지원할 수 있다는 것입니다.다양한 하드웨어 배치는 개발 초기 단계에서는 가장 중요한 문제는 아니지만, 국내외 AI 칩이 개발됨에 따라 점점 더 중요해질 것입니다. 특히 현재 국내 환경과 국내 칩 기업의 현황을 고려할 때 모든 유형의 하드웨어에 대한 양호한 지원이 필요합니다.
- 컴파일 최적화
세 번째는 일반적인 컴파일 최적화입니다.IR의 이전 계층을 컴파일하면 성능을 최적화할 수 있으며, 여기에는 운영 효율성이 향상되고 메모리 사용량이 줄어드는 것이 포함됩니다.
현재 대부분 사람들은 컴파일과 최적화를 가장 중요한 요소로 여기지만, 전체 커뮤니티를 위해서는 처음 두 가지 요소가 더욱 중요합니다. 이는 컴파일러의 관점에서 본 것이고, 이 두 가지 사항은 0에서 1로의 획기적인 발전이기 때문에 성능 최적화는 종종 장식에 불과합니다.
연설의 주제로 돌아가서,저는 TVM의 개발을 4단계로 나누었습니다.이것은 단지 저의 개인적인 의견입니다.

TensorIR 추상화
1단계:이 단계에서 TVM은 CPU와 GPU에서 추론을 최적화하고 가속화합니다. GPU는 구체적으로 SIMT의 하드웨어 부분을 말합니다. 이 단계에서 많은 클라우드 컴퓨팅 공급업체는 TVM을 사용하기 시작했습니다. TVM이 CPU와 GPU를 모두 가속화할 수 있다는 것을 알았기 때문입니다. 왜? 앞서 언급했듯이 CPU와 GPU는 텐서화 지원을 제공하지 않습니다. 첫 번째 세대의 TVM TE 일정은 Halide를 기반으로 했으며 텐서화 지원이 좋지 않았습니다. 따라서 이후 TVM 개발은 Tensorization 지원에 친화적이지 않은 Auto TVM 및 Ansor를 포함하여 Halide 개발의 기술적 경로를 따랐습니다.
먼저, 하드웨어 개발 과정을 살펴보겠습니다. CPU에서 GPU로의 전환은 2015년과 2016년경, GPU에서 TPU로의 전환은 2019년경이었습니다. Tensorization을 지원하기 위해TVM은 먼저 텐서화된 프로그램의 특성을 분석했습니다.

- 스레드 바인딩을 통한 최적화된 루프 중첩
먼저, 모든 텐서화된 프로그램에 필요한 루프 테스트가 필요합니다. 아래에 다차원 데이터가 로딩되어 있습니다. 이는 CMT 및 CPU와 다릅니다. 스칼라가 아닌 텐서로 저장하고 계산합니다.
- 다차원 데이터를 특수 메모리 버퍼에 로드/저장
둘째, 특수한 메모리 버퍼에 저장됩니다.
- 불투명 텐서화된 계산 본체 16×16 행렬 곱셈
셋째, 컴퓨팅을 위한 하드웨어 풀이 생길 것입니다. 다음 텐서 프리미티브는 16*16 행렬 곱셈을 계산하는 예로 사용됩니다. 이 계산은 더 이상 스칼라 조합을 이용한 계산 모드로 표현되지 않고, 하나의 지시를 이용한 계정 단위로 계산됩니다.

TVM은 위의 텐서화된 프로그램에 대한 세 가지 정성적 분석을 바탕으로 계산 블록을 도입했습니다. 블록은 컴퓨팅 단위로, 가장 바깥쪽 계층에 중첩되어 있고, 중간에 반복자 및 종속 관계가 있으며, 하단에 본문이 있습니다. 그 개념은 내부 및 외부 계층의 계산을 분리하는 것, 즉 내부 계산인 텐서화된 계산을 고립시키는 것입니다.
2단계:이 단계에서 TVM은 자동 텐서화를 수행합니다. 이를 자세히 구현하는 방법을 설명하는 예는 다음과 같습니다.

자동 텐서화

입력 프로그램과 텐서 인트린직이 입력입니다. 결과에 따르면 TensorIR과 TensorRT는 기본적으로 GPU와 동등 수준이지만 일부 표준 모델의 성능은 그다지 좋지 않습니다. 표준 모델은 ML Perf의 표준 지표이므로 NVIDIA 엔지니어는 이를 수행하는 데 많은 시간을 투자합니다. 표준 모델에서 TensorRT보다 우수한 성과를 내는 경우는 비교적 드물며, 이는 업계에서 가장 진보된 기술을 능가하는 것과 같습니다.

이는 ARM이 자체 개발한 CPU의 성능 비교입니다. TensorIR과 ArmComputeLib은 엔드투엔드 측면에서 Ansor와 PyTorch보다 약 2배 더 빠를 수 있습니다. 가장 중요한 것은 성능이 아니라 자동 텐서화 아이디어가 핵심입니다.

3단계:텐서화된 하드웨어를 위한 종단간 ML 컴파일러. 이 단계에서는 이를 GPU나 이미 지원되는 가속기 칩에 전달한 후 자동 튜닝과 모델 가져오기를 거쳐 자체적으로 일관된 시스템을 형성할 수 있습니다. 이 단계에서 TVM의 핵심은 End-to-End입니다. 직접 사용할 수 있는 모델을 개발할 수는 있지만, 사용자 정의는 매우 어렵습니다.
다음으로 Relax와 Unity의 개발 및 사고에 대해 조금 더 천천히 이야기하겠습니다.
- 개인적으로 저는 Relax와 Unity가 더 중요하다고 생각합니다.
- 아직 실험 단계이며, 많은 부분이 아이디어에 불과하고, 엔드투엔드 데모와 완전한 코드가 부족합니다.
Apache TVM 스택의 한계:
- Relay와 TIR 사이에 큰 차이가 있습니다. TVM의 가장 큰 문제는 릴레이에서 TIR로의 컴파일 패러다임이 너무 가파르다는 것입니다.
- 대부분의 하드웨어에 대한 고정 파이프라인. TVM의 표준 프로세스는 TIR로의 릴레이인가요? 컴파일 후, 많은 하드웨어가 BYOC만 지원하거나 BYOC+TIR을 사용하려고 하는 반면, Relay는 TIR이나 라이브러리 모두 이를 잘 지원하지 않는다는 것을 발견했습니다. GPU 가속을 예로 들면, Relay의 기본적인 사항은 고정되어 있습니다. 자동 튜닝을 위해 CUDA를 작성하거나, TensorRT를 위해 BYOC를 사용하거나, cuBLAS를 사용하여 타사 라이브러리를 튜닝할 수 있습니다. 많은 선택지가 있지만, 항상 하나를 선택하는 것이 문제입니다. 이 문제는 큰 영향을 미치며 Relay에서는 해결하기 어렵습니다.
솔루션: TVM Unity.
아파치 TVM 유니티
IR의 두 계층인 Relax와 TIR은 전체적으로 처리되어 Graph-TIR 프로그래밍 패러다임에 통합됩니다. 융합 형태: 가장 단순한 선형 모델을 예로 들면, 이 경우 전체 IR은 제어 및 프로그래밍이 가능합니다. Graph-TIR 언어는 하위 계층이 너무 가파른 문제를 해결합니다. 상위 수준 연산자는 단계별로 수정이 가능하며, BYOC나 함수 호출로 변경할 수도 있습니다.


1. 파이프라인 구축 문제에 대한 맞춤 솔루션을 지원합니다. 원래 TVM 파이프라인은 추가 TIR을 전달한 다음, TIR을 튜닝하고 튜닝 후 LLVM이나 CUDA로 전달하는 것이었습니다. 이것은 고정된 건물 파이프라인이었습니다. 이제 파이프라인이 바뀌었습니다.
2. 모든 경로 중에서 가장 좋은 성과를 선택합니다. 개발자는 라이브러리나 TIR 중에서 선택하고 무엇이든 호출할 수 있습니다. 이는 Unity가 해결한 가장 중요한 문제이며, 커뮤니티에서는 이를 통합 ML 컴파일 솔루션으로 간주합니다.
오해
- TVM과 MLIR은 경쟁 관계에 있습니다.
실제로 TVM과 MLIR은 명확하고 동일한 수준의 경쟁 관계가 없습니다. TVM은 MLC 머신 러닝 컴파일에 중점을 두는 반면, MLIR은 다중 레벨을 강조하며, 그 특징은 ML 컴파일에도 사용될 수 있습니다. 개발자들은 머신 러닝 컴파일에 MLIR을 사용합니다. 한편으로는 MLIR이 PyTorch와 같은 프레임워크와 기본적으로 통합되어 있고, 다른 한편으로는 Unity 이전에는 TVM의 사용자 정의 기능이 비교적 약했기 때문입니다.
- TVM = CPU/GPU용 추론 엔진
TVM은 결코 추론 엔진이 아니었습니다. 컴파일을 수행할 수 있으며, 개발자는 이를 사용하여 추론을 가속화할 수 있습니다. TVM은 컴파일러 인프라이지만 추론 엔진은 아닙니다. "TVM은 가속에만 사용될 수 있다"는 생각은 잘못된 것입니다. TVM을 가속에 사용할 수 있는 이유는 기본적으로 PyTorch와 같은 즉시 실행 모드 방법보다 컴파일러가 더 빠르기 때문입니다.
- TVM = 자동 튜닝
Relax가 등장하기 전에는 TVM에 대한 모든 사람의 첫 반응은 자동 튜닝을 통해 더 나은 성능을 얻을 수 있다는 것이었습니다. TVM의 다음 개발 방향은 이 개념을 희석시키는 것입니다. TVM은 더 나은 성능을 달성하고 전체 컴파일 프로세스를 사용자 정의할 수 있는 다양한 방법을 제공합니다. TVM Unity가 해야 할 일은 다양한 장점을 결합한 프레임워크를 제공하는 것입니다.
다음 단계
다음 단계에서 TVM은 크로스 레이어 머신 러닝 컴파일러 인프라로 발전하고 다양한 백엔드를 위한 사용자 정의 가능한 빌딩 파이프라인이 되어 다양한 하드웨어에서 사용자 정의를 지원하는 데 노력할 것입니다. 이를 위해서는 다양한 방법을 결합하고, 다양한 당사자의 강점을 통합하는 것이 필요합니다.
질문과 답변
질문 1: TVM은 대형 모델을 최적화할 계획이 있나요?
A 1: 대규모 모델과 관련하여 우리는 몇 가지 예비적인 아이디어를 가지고 있습니다. 현재 TVM은 분산 추론과 몇 가지 간단한 훈련을 시작했지만, 실제로 구현되기까지는 시간이 좀 걸릴 것입니다.
질문 2: 앞으로 Relax는 Dynamic Shape에서 어떤 지원과 발전을 이룰 것인가?
A 2: Relay vm은 동적 형태를 지원하지만, 상징적 추론을 생성하지 않습니다. 예를 들어, nmk의 행렬 곱셈의 출력은 n과 m이지만 Relay에서는 세 개의 nmk를 통칭하여 Any라고 부르는데, 이는 차원을 알 수 없음을 의미하며, 그 출력 역시 차원을 알 수 없음을 의미합니다. Relay VM은 이러한 작업을 실행할 수 있지만, 컴파일 단계에서 일부 정보가 손실되므로 Relax는 이러한 문제를 해결합니다. 이것은 Dynamic Shape의 Relay를 개선한 Relax의 버전입니다.
질문 3: TVM 최적화와 장치 최적화의 조합. Graph를 사용하여 직접 지침을 생성하는 경우 TE와 TIR은 장치 최적화에 많이 사용되지 않는 것으로 보입니다. BYOC를 사용하는 경우 TE와 TIR도 건너뛰는 것 같습니다. 공유된 내용에 따르면 Relax에는 어느 정도 사용자 정의 기능이 있어서 이 문제를 해결할 수 있을 것으로 보입니다.
A 3: 실제로 많은 하드웨어 제조업체는 이미 TIR 경로를 택했고, 일부 제조업체는 관련 기술에 주의를 기울이지 않고 여전히 BYOC 방식을 선택하고 있습니다. BYOC는 엄격한 의미에서 편집이 아니며, 건물 패턴에 제한이 있습니다. 일반적으로 기업이 커뮤니티 기술을 활용할 수 없는 것은 아니지만, 각자의 상황에 맞게 다른 선택을 할 수 있다는 것입니다.
Q4: TVM Unity의 등장으로 인해 마이그레이션 비용이 더 높아질까요? TVM PMC의 관점에서, 사용자가 TVM Unity로 원활하게 전환할 수 있도록 어떻게 도울 수 있을까요?
답변 4: TVM 커뮤니티는 Relay를 포기하지 않았지만, Relax 옵션만 추가했습니다. 따라서 이전 버전은 계속해서 발전할 것이지만, 일부 새로운 기능을 사용하려면 일부 코드와 버전 마이그레이션이 필요할 수 있습니다.
Relax가 완전히 출시된 후, 커뮤니티에서는 Relay 모델을 Relax로 직접 가져올 수 있도록 마이그레이션 튜토리얼과 특정 도구 지원을 제공할 예정입니다. 하지만 Relay 기반으로 개발된 맞춤형 버전을 Relax로 이전하려면 여전히 일정량의 작업이 필요한데, 회사 내에서 12명 이상으로 구성된 팀의 경우 약 한 달이 걸립니다.
질문 5: TensorIR은 이전에 비해 Tensor 측면에서 큰 진전을 이루었지만, TensorIR은 주로 SIMT, SIMD와 같이 성숙한 프로그래밍 방법인 프로그래밍 모델을 대상으로 한다는 점을 알아차렸습니다. 많은 새로운 AI 칩과 프로그래밍 모델에서 TensorIR에 대한 진전이 있었나요?
답변 5: 커뮤니티의 관점에서 볼 때 TensorIR이 SIMT 모델을 사용하는 이유는 현재는 SIMT 하드웨어만 사용할 수 있기 때문입니다. 많은 제조업체의 하드웨어와 명령어 세트는 오픈 소스가 아닙니다. 대형 제조업체에서 접근할 수 있는 하드웨어는 기본적으로 CPU, GPU, 그리고 일부 휴대폰 SoC뿐입니다. 다른 제조업체의 커뮤니티는 기본적으로 이에 접근할 수 없으므로 해당 제조업체의 프로그래밍 모델을 기반으로 할 수 없습니다. 게다가, 커뮤니티와 기업이 비슷한 수준의 TIR을 만들기 위해 협력하더라도 상업적인 고려 사항으로 인해 오픈 소스로 공개할 수 없습니다.
위 내용은 2023년 TVM 상하이 방송국 미팅에서 펑시위안이 한 연설을 요약한 것입니다.이어서, 이 행사에 참여한 다른 게스트들이 공유한 자세한 내용도 이 공식 계정을 통해 차례차례 공개될 예정입니다. 계속해서 주의 깊게 살펴보세요!
PPT 받기:위챗 공개 계정 "HyperAI Super Neural Network"을 팔로우하고 백그라운드에서 키워드로 답글을 남겨주세요. TVM 상하이,전체 PPT를 받아보세요.
TVM 중국어 문서:https://tvm.hyper.ai/
GitHub 주소:https://github.com/apache/tvm