데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AI 학습을 위한 LLM 스터디 - 배치 전략 및 어텐션 개선 방안

      woops101 25.02.05
      2,257 5 1
      DEVOTEE 요약
      본 블로그는 LLM(대규모 언어 모델) 관련 다양한 배치 전략과 트랜스포머 연산 기술, 그리고 효율적인 디코딩 방법들을 설명합니다. 일반배치와 동적배치, 인-플라이트 배칭 등의 접근 방식을 비교하고, 플래시어텐션과 페이지 어텐션과 같은 혁신적인 방법들이 각자의 강점을 발휘하는 방법을 소개합니다. 또한, 드래프트 모델과 타깃 모델을 활용한 추측 디코딩 방식이 어떻게 디코딩 속도를 개선하는지를 설명합니다.
      DEVOTEE 추천 블로그

      안녕하세요, T멤버십서비스팀 유희현입니다.


      LLM에 대해 아무것도 모른채로 공부하고 싶은 마음에 LLM 스터디 (딥그라운드)에서 좋은 기회로 이렇게 제가 공부한 부분에 대해 정리 하게 되었습니다.

      사실 AI라는 분야가 워낙 방대해서 처음에는 어디서부터 시작해야 할지 막막했어요.

      하지만 조금씩 공부하다 보니 재미있는 부분들이 많이 보이더라구요.

      부족한 점이 많겠지만, 저와 비슷한 초보자 분들에게 조금이나마 도움이 되었으면 좋겠어요.


      배치 전략

      • 입력 데이터 추론 시, 한번에 많은 데이터를 받으면 좋겠지만, 한번의 하나씩 토큰을 생성하고 입력에 따라 몇의 토큰을 추가할 지 예상하기 어려워 데이터 처리에 전략이 필요하다.

      • 일반배치, 또는 정적배치는 전통적인 배치 처리 방식입니다. 이 방법은 고정된 크기의 입력 배치를 한 번에 처리합니다

        하지만 이 방식에는 몇 가지 단점이 있습니다:

        • 배치 내 각 요청이 서로 다른 수의 완료 토큰을 생성할 수 있어 실행 시간이 달라집니다.

        • 모든 요청은 가장 긴 요청이 완료될 때까지 기다려야 합니다.

        • 생성 길이의 큰 차이로 인해 성능이 저하될 수 있습니다.

      • 동적배치

        동적배치는 정적배치의 단점을 보완하기 위한 방법입니다. 이 방식은 입력의 길이와 복잡성에 따라 배치 크기를 동적으로 조정합니다. 이를 통해:

        • 다양한 길이의 입력을 효율적으로 처리할 수 있습니다.

        • GPU 사용률을 최적화할 수 있습니다.

          전체적인 처리 시간을 단축할 수 있습니다.

      • 연속배치, 또는 인-플라이트 배칭은 정적배치의 문제를 해결하기 위한 또 다른 접근 방식입니다. 이 방법의 특징은:

        • 요청이 도착하는 대로 처리를 시작합니다.

        • 진행 중인 요청과 새로운 요청을 동적으로 결합합니다.

        • 각 요청의 완료 시간을 개별적으로 관리합니다.

          이 방식을 통해 대기 시간을 줄이고 전체적인 처리량을 향상시킬 수 있습니다.


      트랜스포머 연산

      플래시어텐션

      플래시 어텐션(FlashAttention)은 트랜스포머 모델의 핵심 요소인 어텐션 메커니즘을 크게 개선한 혁신적인 알고리즘입니다.

      이 기술은 대규모 언어 모델(LLM)과 긴 컨텍스트를 다루는 애플리케이션에서 성능 병목 현상을 해결하는 데 중요한 역할을 합니다.

      셀프 어텐션의 연산 과정

      • 입력 준비: 입력 시퀀스를 세 개의 벡터로 변환합니다 - 쿼리(Q), 키(K), 값(V).

      • 유사도 계산: 쿼리와 키 사이의 유사도를 계산합니다. 이는 두 벡터의 내적(dot product)으로 이루어집니다.

        image.png

      • 스케일링: 유사도 점수를 키의 차원의 제곱근으로 나눕니다. 이는 값이 너무 커지는 것을 방지합니다.

      image.png

      플래시 어텐션의 핵심 원리

      플래시 어텐션은 다음과 같은 핵심 원리를 바탕으로 작동합니다:

      • 메모리 최적화: 어텐션 연산을 재배치하고 타일링 기법을 사용하여 메모리 사용량을 시퀀스 길이에 따라 제곱에서 선형으로 줄입니다.

      • 타일링 기법: GPU의 주 메모리(HBM)에서 빠른 캐시(SRAM)로 입력 데이터 블록을 로드하여 처리합니다.

        중간 결과 최소화: 큰 중간 어텐션 행렬을 HBM에 저장하지 않아 메모리 읽기/쓰기를 줄입니다.

      • 재계산 활용: 필요한 경우 중간 결과를 재계산하여 메모리 사용을 줄입니다.

      • 병렬 처리 최적화: 플래시어텐션은 GPU의 여러 부분을 동시에 활용하여 계산을 수행합니다

      image.png

      행렬 곱셈이 아닌 연산 줄이기

      • 알고리즘 최적화: 비행렬 곱셈 부동 소수점 연산(FLOP)을 줄여 전체적인 효율성을 높였습니다.

      • 효율성 향상: 현대 GPU의 텐서 코어는 행렬 곱셈에 최적화되어 있어, 비행렬 연산을 줄이면 전체적인 계산 효율성이 크게 향상됩니다

      • 속도 개선: 플래시어텐션-2는 이전 버전보다 2배 빠르며, A100 GPU에서 최대 230 TFLOPs/s의 성능을 제공합니다.

      시퀀스 길이 방향의 병렬화 추가

      시퀀스의 시간 축을 따라 추가적인 병렬 처리 계층을 사용하여 긴 시퀀스와 작은 배치 크기에서의 성능을 향상시켰습니다

      • 시퀀스 분할: 긴 시퀀스를 여러 thread block에 나누어 할당합니다

      • GPU 자원 활용 개선: 배치 크기가 작거나 어텐션 헤드 수가 적은 경우에도 GPU의 스트리밍 멀티프로세서(SM)를 효율적으로 사용할 수 있게 됩니다

      • 확장성 향상: 특히 시퀀스 길이가 긴 경우 GPU 자원을 최대로 활용할 수 있어 성능이 크게 개선됩니다

      • 병렬 처리 증가: 기존의 배치 크기와 어텐션 헤드 수 기반 병렬화에 더해, 시퀀스 길이 차원에서도 병렬 처리가 가능해집니다


      모델링에서 위치에 중요성

      위치 정보의 중요성

      자연어 처리에서 단어의 순서는 매우 중요합니다.

      "고양이가 쥐를 잡았다"와 "쥐가 고양이를 잡았다"는 단어는 같지만 의미가 완전히 다릅니다.

      트랜스포머 모델은 이러한 순서 정보를 어떻게 처리할까요?

      초기 트랜스포머 모델은 절대적 위치 인코딩을 사용했습니다. 이는 각 단어에 그 위치에 해당하는 고유한 벡터를 더하는 방식입니다.

      하지만 이 방법은 긴 시퀀스나 학습 시 보지 못한 길이의 입력을 처리할 때 한계가 있었습니다.

      상대적 위치 인코딩

      1. 작동 원리

      • 각 단어쌍에 대해 그들 사이의 거리를 계산합니다.

      • 이 거리에 따라 특정 임베딩 값을 할당합니다.

      • 이 값을 어텐션 계산 과정에 통합합니다.

      2. 장점

      • 긴 시퀀스 처리 능력 향상

      • 학습 시 보지 못한 길이의 입력도 효과적으로 처리

      • 단어 간의 관계를 더 정확하게 모델

      RoPE의 작동 원리

      RoPE는 복소수 평면에서의 회전을 이용하여 위치 정보를 인코딩합니다. 각 토큰의 임베딩을 복소수로 표현하고, 위치에 따라 이를 회전시킵니다.

      이 방식의 핵심 아이디어는 다음과 같습니다:

      • 절대 위치 인코딩: 각 토큰의 절대 위치를 회전 각도로 변환합니다.

      • 상대 위치 보존: 두 토큰 간의 상대적 위치는 그들의 회전 각도 차이로 표현됩니다.

      • 내적 불변성: 회전 후에도 두 벡터 간의 내적이 보존되어, 상대적 위치 정보만 반영됩니다.

      RoPE의 장점

      성능 향상: 다양한 NLP 태스크에서 기존 위치 인코딩 방식보다 우수한 성능을 보입니다.

      계산 효율성: 효율적인 구현이 가능하여 계산 비용을 줄일 수 있습니다.

      모델 확장성: 긴 시퀀스 처리에 특히 효과적이며, 모델의 확장성을 높입니다.

      image.png


      커널 퓨전

      커널 퓨전은 여러 개의 개별 GPU 커널을 하나의 큰 커널로 결합하는 기술입니다. 이는 주로 연속적으로 실행되는 커널들을 대상으로 합니다

      image.png

      커널 퓨전의 주요 이점

      • 메모리 접근 최소화: 글로벌 메모리에 대한 읽기와 쓰기 횟수를 줄여 메모리 대역폭 사용을 최적화합니다

      • 데이터 재사용: 중간 결과를 글로벌 메모리에 저장하고 다시 로드하는 과정을 없애 데이터 재사용성을 높입니다

      • 커널 실행 오버헤드 감소: 여러 커널을 하나로 합침으로써 커널 실행에 따른 오버헤드를 줄일 수 있습니다

      • GPU 리소스 활용도 향상: 융합된 커널은 GPU의 컴퓨팅 리소스를 더 효율적으로 사용할 수 있습니다

      페이지 어텐션

      KV (key-value)캐시는 너무 무거운게 단점. 사용하지 않는 메모리까지도 미리 잡아둔다.

      페이지 어텐션은 블록 테이블을 이용해서 물리적으로 연속된 메모리를 사용하지 않고 논리적 메모리로 연속적으로 사용되게 하는 개념

      image.png

      페이지 어텐션의 경우 블록테이블을 관리해서 실제로는 물리적으로 연속된 메모리를 사용하지 않으면서 논리적 메모리에서는 서로 연속적이도록 만들었다.

      블록 크기가 4인경우 배정 후에 생성이 종료되어 사용하지 않더라도 블록 크기 -1개의 메모리만 낭비된다.

      image.png

      입력 프롬프트에 대한 메모리를 공유함으로써 메모리를 절약한다.

      만약 "밥을 먹다 큰"을 입력프롬프트 2개의 텍스트를 생성하고 싶다고 하면 같은 토큰은 참조카운트라는 개념으로 공유한다.

      페이지 어텐션의 핵심 아이디어

      • 시퀀스 분할: 입력 시퀀스를 여러 '페이지'로 나눕니다.

      • 로컬 어텐션: 각 페이지 내에서 로컬 어텐션을 수행합니다.

      • 글로벌 어텐션: 페이지 간의 관계를 캡처하기 위해 글로벌 어텐션을 적용합니다.

      페이지 어텐션의 장점

      • 메모리 효율성: 전체 시퀀스에 대한 어텐션을 계산하는 대신 페이지 단위로 처리하여 메모리 사용량을 줄입니다.

      • 계산 효율성: 로컬 및 글로벌 어텐션을 분리함으로써 계산 복잡도를 줄입니다.

      • 긴 시퀀스 처리: 기존 어텐션 메커니즘보다 더 긴 시퀀스를 효과적으로 처리할 수 있습니다.

      작동 방식

      • 시퀀스 분할: 입력 시퀀스를 고정된 크기의 페이지로 나눕니다.

      • 로컬 어텐션: 각 페이지 내에서 일반적인 셀프 어텐션을 수행합니다.

      • 페이지 요약: 각 페이지의 정보를 요약하여 페이지 임베딩을 생성합니다.

      • 글로벌 어텐션: 페이지 임베딩 간의 어텐션을 계산하여 전체 문맥을 캡처합니다.

      • 정보 통합: 로컬 어텐션과 글로벌 어텐션의 결과를 결합하여 최종 출력을 생성합니다.

      추측 디코딩

      • 다음 단어를 예측 할 때, 쉬운 단어는 작은 모델, 어려운 단어는 성능 좋은 모델이 예측하는 방식


      드래프트 모델

      더 작고 빠른 드래프트 모델을 사용하여 여러 개의 후보 토큰을 미리 생성합니다.

      드래프트 모델은 현재 시퀀스를 바탕으로 다음에 올 가능성이 높은 토큰들을 예측합니다.

      이 과정에서 드래프트 모델은 이전 토큰과 특징(feature)을 결합하여 다음 토큰을 예측합니다.

      트리 구조 생성

      드래프트 모델은 여러 후보 토큰을 생성하며, 이를 트리 구조로 구성합니다.

      각 노드는 예측된 토큰을 나타내며, 이 구조를 통해 여러 가능한 시퀀스를 동시에 고려할 수 있습니다.

      타깃 모델(원래 LLM) 검증

      원래의 대규모 언어 모델인 타깃 모델을 사용하여 드래프트 모델이 생성한 토큰들을 동시에 검증합니다.

      타깃 모델은 트리 어텐션을 활용하여 단일 전방 통과(forward pass)로 트리 구조의 모든 노드에 대한 확률을 계산합니다.

      토큰 선택 및 추가

      타깃 모델의 검증을 통과한 토큰들만 최종 출력에 추가됩니다.

      이 과정에서 여러 토큰을 한 번에 추가할 수 있어 디코딩 속도가 크게 향상됩니다.

      반복

      검증되지 않은 첫 번째 토큰부터 과정을 다시 시작합니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      woops101 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기