https://youtu.be/4jQTb6sRGLg?si=H7WxrNQqPtetBVCd

이 강연은 cuda, triton, flash attention 학습 여정을 통해 새로운 기술을 배우는 효과적인 방법에 대한 깊이 있는 통찰을 제공합니다. 단순히 기술을 가르치는 것을 넘어, 강연자가 직접 겪은 시행착오와 학습 전략을 공유하며, 실용적인 문제 해결 능력을 기르는 데 초점을 맞춥니다. 특히, GPT와 같은 AI 도구를 활용하여 학습 속도를 10배 이상 가속화하는 구체적인 방법과, 목표 설정, 꾸준함, 그리고 불필요한 정보로부터 자신을 보호하는 **'듀얼 스트림 학습'**과 같은 독창적인 접근법을 배울 수 있습니다. 이 강연은 기술 습득의 본질을 이해하고, 스스로 학습 로드맵을 구축하여 어떤 분야든 깊이 있는 전문성을 확보하고자 하는 모든 이들에게 강력한 동기 부여와 실질적인 가이드를 제공할 것입니다.

1. 강연 소개 및 강연자의 학습 여정

  1. 강연의 목적: 학습 여정 공유
    1. 이 강연은 쿠다, 트라이튼, 플래시 어텐션 기술 자체를 가르치는 것이 아니라, 강연자 오마르의 학습 여정을 탐구하는 데 중점을 둔다.
    2. 이는 "쿠다를 어떻게 배우나요?", " 머신러닝을 어떻게 배우나요?"와 같은 질문에 답하기 위함이다.
  2. 강연자의 머신러닝 학습 시작점 (2022년 말)
    1. 오마르의 머신러닝여정은 2022년 11월 또는 12월에 첫 신경망(이미지 캡셔닝)을 코딩하면서 시작되었다.
    2. 같은 시기, 스테이블 디퓨전(Stable Diffusion)이 출시되었고, 텍스트 인버전(textual inversion) 기술을 사용하여 이를 미세 조정(fine-tuning)하기 시작했다.
    3. 스테이블 디퓨전에 매료되어 직장을 그만두고 1년 가까이 파이토치( PyTorch)나 신경망에 대한 지식 없이 스테이블 디퓨전을 처음부터 코딩할 수 있을 정도로 마스터하는 데 집중했다.
    4. 그는 인생의 큰 변화는 항상 직장을 그만두고 '수도승 모드(monk mode)'로 몰입하는 것에서 시작된다고 언급했다.
  3. 강연자의 유튜브 채널 운영 철학
    1. 오마르의 유튜브 채널은 성능 최적화보다는 머신러닝 전반에 대한 내용을 다루며, 자신이 학습한 내용을 시간의 흐름에 따라 가르친다.

2. 현대 학습의 지혜: '새로운 기술 학습'의 중요성

  1. 오래된 지혜에 대한 도전
    1. "물고기를 주면 하루를 먹여 살리고, 물고기 잡는 법을 가르치면 평생을 먹여 살린다"는 오래된 지혜는 수세기 동안 유효했다.
    2. 그러나 현대 교육 시스템(학교, 대학 등)은 물고기 잡는 법을 가르치지만, 졸업할 때쯤에는 바다가 아닌 정글에 놓이게 된다는 문제가 있다.
    3. 정글에서는 물고기를 잡을 수 없으므로, 사냥, 채집, 독성 식물 구별 등 새로운 기술을 배워야 생존할 수 있다.
  2. 현대판 지혜 제안
    1. 오마르는 현대판 지혜로 "물고기를 주면 하루를 먹여 살린다. 새로운 기술을 배우는 법을 가르치면 그는 어선을 만들어 온 마을을 먹여 살릴 것이다"라고 제안한다.
    2. 새로운 기술을 습득하는 방법을 배우면, 그 사람이 할 수 있는 일에는 한계가 없기 때문이다.
  3. 학습 방법론의 중요성 강조
    1. 새로운 기술과 도구가 넘쳐나는 시대에 무엇을 배우는지보다 어떻게 배우는지에 중점을 두는 것이 매우 중요하다.
    2. 이 강연은 강연자 자신과 GPU 모드 커뮤니티 구성원 모두에게 새로운 기술 학습에 대한 자기 성찰의 기회를 제공하고자 한다.

3. CUDA, Triton, FlashAttention 기술 개요

captureSource

  1. 플래시 어텐션(Flash Attention)
    1. 정의: 트랜스포머(Transformer) 모델에 사용되는 어텐션 메커니즘(Attention mechanism)의 최적화된 구현이다.
    2. 어텐션 메커니즘: 언어 모델에서 텍스트를 문맥화하여 각 토큰이 독립적인 정보뿐만 아니라 나타나는 문맥에 대한 정보도 포착하도록 돕는 알고리즘이다.
    3. 트랜스포머와 연산 그래프:
      1. 트랜스포머는 신경망이며, 신경망은 연산 그래프(computation graph)이다.
      2. 연산 그래프는 입력을 받아 출력으로 변환하는 일련의 연산이다.
      3. 모델 사용 시: 입력 텐서(다차원 행렬)를 출력 텐서로 변환한다.
      4. 모델 훈련 시: 입력 텐서를 일련의 연산을 통해 손실(loss)이라는 스칼라로 변환한다.
      5. 어텐션 메커니즘은 일련의 연산으로 구성된 연산 그래프이다.
    4. GPU 메모리 계층 구조와 문제점:
      1. 파이토치( PyTorch)에서 각 연산은 커널(kernel)로 변환되어 GPU와 같은 하드웨어에서 실행된다. 엔비디아(Nvidia) GPU의 경우 쿠다( CUDA) 커널이다.
      2. GPU는 연산 속도는 빠르지만, 데이터 이동 속도는 느리다.
      3. GPU는 DRAM( HBM)과 SRAM(공유 메모리)이라는 메모리 계층구조를 가진다. SRAM은 코어에 더 가깝고 크기가 작다.
      4. 문제: 각 연산(커널)이 실행될 때마다 텐서의 일부가 DRAM에서 SRAM으로 복사되고, 연산 후 결과가 다시 HBM으로 저장된다.
      5. 연산 그래프에 많은 연산이 있을 경우, 이전 연산의 결과를 다음 연산에서 재사용하기 위해 DRAM-SRAM 간의 반복적인 복사가 발생한다.
      6. 이러한 복사 과정은 GPU를 완전히 활용하지 못하게 하여 전체 프로세스를 느리게 만든다.
    5. 커널 퓨전(Kernel Fusion):
      1. 데이터에 대한 여러 연산을 한 번에 수행하여 중간 결과를 DRAM에 저장하고 다시 불러오는 과정을 최소화하는 기술이다.
      2. 플래시 어텐션은 커널 퓨전을 통해 I/O(입출력) 인지적으로 작동하여, 여러 어텐션 연산을 하나의 큰 알고리즘으로 융합하여 데이터 복사를 최소화한다.
  2. 쿠다(CUDA)
    1. 정의: 엔비디아(Nvidia)의 소프트웨어 스택으로, 엔비디아 GPU에서 실행되는 GPU 커널을 작성할 수 있게 해준다.
    2. 다른 GPU 스택: AMD는 ROCm, AWS는 뉴런(Neuron) GPU용 자체 스택, 구글은 TPU용 자체 스택을 가지고 있다.
  3. 트라이튼(Triton)
    1. 문제점: 쿠다( CUDA)와 같은 소프트웨어 스택은 특정 GPU에 특화된 커널을 C 또는 C++로 작성해야 하므로, 전문 지식이 필요하고 학습 곡선이 가파르다.
    2. 해결책: 트라이튼은 이러한 전문 인력 부족을 해결하고, GPU 하드웨어에 독립적인 표준화된 커널 작성 방법을 제공한다.
    3. 정의: 오픈AI( OpenAI)의 프로젝트로, 파이썬(Python)으로 GPU 커널을 작성할 수 있게 해준다.
    4. 작동 방식: 특정 문법과 블록으로 작성된 파이썬 코드는 컴파일되어 쿠다( CUDA)나 ROCm과 같은 하드웨어에서 실행되는 커널로 변환된다.

4. 새로운 기술 학습 방법론: 오마르의 학습 여정

captureSource

  1. 학습 시작 전: '왜' 배우는지 질문하기
    1. 새로운 것을 배우기 전에 항상 "왜 이것을 공부하고 싶은가?"라고 스스로에게 질문해야 한다.
    2. 단순히 유행이나 인기가 이유라면 시작하지 않는 것이 좋다.
  2. 오마르의 학습 동기: 실용적인 문제 해결
    1. 오마르는 항상 실용적인 문제를 따라 학습한다.
    2. 그의 문제는 딥러닝 아키텍처의 새로운 패턴(예: 새로운 어텐션 패턴, 비-트랜스포머 모델, 긴 컨텍스트 모델링)을 학습하고 실험하는 과정에서 발생했다.
    3. 최근에는 새로운 아키텍처들이 커널(kernel)과 함께 출시되는데, 기존 코드의 작동 오류, 속도 저하, 특정 GPU에 대한 최적화 부족 등의 문제로 인해 커널을 이해하고 디버깅하는 데 어려움을 겪었다.
    4. 이러한 문제로 인해 여러 번 포기한 후, 파이썬으로 코딩하고 트라이튼이 자동으로 GPU 커널로 변환해주는 트라이튼을 배우기로 결정했다.