PowerInfer: Fast Large Language Model Serving with a Consumer-grade GPU

논문 링크

Q : 이 논문을 아주 자세하게 읽고 논문의 강점과 독창적인 지점을 설명해주고 핵심 알고리즘을 예시 입력을 들어서 전체적인 과정을 설명해줘 추가적으로 논문의 한계점에 대해서도 알려줘

논문의 요약

PowerInfer는 소비자용 GPU로 대형 언어 모델(LLM)을 빠르게 추론할 수 있도록 설계된 시스템입니다. LLM 추론에서 고도 국소성을 활용하여 GPU와 CPU의 협력을 통해 효율성을 극대화합니다.

주요 기여

  1. Hot & Cold Neuron 분리: 자주 활성화되는 “hot neuron”은 GPU에, 드물게 활성화되는 “cold neuron”은 CPU에서 처리되도록 분리하여 GPU 메모리 요구 사항을 줄였습니다.
  2. 적응형 예측기: 활성화될 뉴런을 예측하는 경량 모델을 설계하여 GPU 메모리를 절약하고 계산량을 줄였습니다.
  3. 뉴런 인식 희소 연산자: 전통적인 희소 연산자보다 효율적으로 뉴런 단위로 연산을 수행하여 계산 자원을 최적화했습니다.
  4. 성능 평가: NVIDIA RTX 4090에서 최대 29.08 tokens/s의 속도를 기록하며 서버급 A100 GPU 대비 18% 낮은 성능을 구현했습니다.

강점

  1. 실용성: 고성능 서버 GPU가 아닌 소비자용 GPU로도 대규모 모델 추론이 가능하게 만듦.
  2. 효율적인 메모리 사용: GPU와 CPU 메모리를 병렬적으로 활용해 비용과 메모리 제약을 극복.
  3. 확장 가능성: 다양한 LLM 아키텍처와 모델 크기에서 작동 가능.
  4. 성능 개선: 기존의 오프로드 기반 시스템(예: llama.cpp)에 비해 최대 11.69배 빠른 속도 제공.

독창적인 지점

  1. 뉴런 활성화 패턴 활용: 뉴런 활성화의 파워-로 분포를 탐구하여 성능 최적화를 시도.
  2. GPU-CPU 하이브리드 모델: GPU와 CPU의 장단점을 결합한 비대칭적 추론 설계.
  3. 희소 연산 최적화: 기존 라이브러리의 제약을 극복한 뉴런 단위의 희소 연산자 설계.

핵심 알고리즘 설명

예시 입력: “The weather today is sunny.”

  1. 뉴런 분류:
    • “hot neuron”은 GPU에, “cold neuron”은 CPU로 분류.
  2. 예측기 작동:
    • 입력 텍스트를 바탕으로 활성화될 뉴런을 예측.
    • 예: 뉴런 3, 7, 10이 활성화될 것으로 예측.
  3. GPU와 CPU에서 분리 계산:
    • GPU는 뉴런 3과 7의 결과를 계산.
    • CPU는 뉴런 10의 결과를 계산 후 GPU로 전달.
  4. 결과 병합:
    • GPU가 모든 계산 결과를 종합하여 최종 토큰(“sunny”) 생성.

한계점

  1. CPU 의존성:
    • CPU 성능에 따라 성능 병목이 발생 가능.
  2. 모델 프로파일링 필요:
    • 모델별로 사전 프로파일링이 필요하여 초기 설정 비용이 증가.
  3. 대규모 모델 한계:
    • 매우 큰 모델(예: 1TB 이상)의 경우, GPU-CPU 메모리 병렬 처리만으로 충분하지 않을 수 있음.
  4. 희소성 기반:
    • 뉴런 활성화 희소성이 낮은 입력에 대해 성능 이점이 제한적.

추가적인 질문이 있거나 특정 부분에 대해 더 알고 싶으시면 말씀해주세요!

Q : 논문의 핵심알고리즘을 예시를 들어 아주 자세하게 설명해주고 정리해 줘

논문 PowerInfer의 핵심 알고리즘은 뉴런의 활성화 패턴과 GPU-CPU 협력 기반으로 대규모 언어 모델(LLM)의 추론 성능을 최적화하는 데 중점을 둡니다. 이를 다음과 같이 단계별로 설명하겠습니다.


예시: 입력 텍스트 - “The weather today is sunny.”

1. 뉴런 활성화 분포 분석

  • 뉴런 활성화는 파워-로우 분포를 따릅니다.
  • “hot neuron” (자주 활성화되는 뉴런): 입력에 상관없이 빈번히 활성화되는 뉴런. 모델에서 전체 활성화의 약 80%를 차지하며, GPU에서 처리.
  • “cold neuron” (입력 의존적 활성화): 입력에 따라 조건부로 활성화되는 뉴런. CPU에서 처리.
  • 목적: “hot neuron”은 GPU 메모리에 미리 저장하고, “cold neuron”은 CPU에서 필요시 계산하여 메모리 사용량을 최적화.

2. 뉴런 활성화 예측

  • 적응형 예측기: 입력을 기반으로 활성화될 뉴런을 예측.
  • 예시 입력: “The weather today is sunny.”
    • 예측 결과: 뉴런 3, 7, 10이 활성화될 것으로 판단.
    • 여기서 3, 7은 “hot neuron”, 10은 “cold neuron”.

3. GPU와 CPU에서 뉴런 처리

  1. GPU 처리:
    • GPU는 미리 로드된 “hot neuron” 3과 7을 빠르게 계산.
    • 이를 통해 GPU 메모리를 효율적으로 사용하고 PCIe 데이터 전송을 최소화.
  2. CPU 처리:
    • “cold neuron”인 뉴런 10은 CPU에서 계산.
    • 계산 결과는 GPU로 전송되어 최종 출력에 병합.

4. 결과 병합

  • GPU는 뉴런 3, 7, 그리고 CPU에서 처리된 뉴런 10의 결과를 통합.
  • 최종적으로 “sunny”라는 토큰이 생성됨.

PowerInfer의 뉴런 관리 알고리즘 워크플로우

아래는 알고리즘의 주요 과정을 단계별로 요약한 내용입니다.


오프라인 단계

  1. 프로파일링:
    • 모델의 뉴런 활성화 데이터를 수집(대규모 입력 데이터셋 사용).
    • “hot neuron”과 “cold neuron”을 구분.
  2. 정책 생성:
    • 활성화 빈도와 GPU-CPU 자원을 고려하여 뉴런 배치 정책을 생성.
    • 이 정책은 뉴런이 GPU 또는 CPU에 할당될지 결정.

온라인 추론 단계

  1. 뉴런 분류 로드:
    • GPU 메모리에 “hot neuron” 로드.
    • CPU 메모리에는 “cold neuron” 저장.
  2. 추론 실행:
    • 입력 데이터를 기반으로 예측기를 통해 활성화될 뉴런 식별.
    • GPU는 “hot neuron”을 처리하고, CPU는 “cold neuron”을 처리.
  3. 결과 병합:
    • GPU가 CPU 계산 결과를 병합하여 최종 결과 생성.

정리: 핵심 아이디어와 이점

  • 핵심 아이디어: 뉴런 활성화 패턴의 파워-로우 분포를 활용해 GPU의 고속 처리 능력과 CPU의 대용량 메모리 활용을 극대화.
  • 이점:
    • GPU 메모리 요구량 감소.
    • PCIe 데이터 전송 최소화로 지연 감소.
    • 소비자용 GPU에서도 서버급 성능 구현.

이 과정을 통해 PowerInfer는 기존 LLM 추론 시스템에 비해 최대 11.69배 빠른 속도를 기록하며 효율성과 실용성을 입증했습니다.

추가적인 세부 내용이나 보완이 필요하다면 말씀해주세요!

Q : 이 논문에서 사용하는 방법을 학습하기 위하여 어떤 데이터셋이 필요할까? 그리고 어떻게 학습을 진행하면 될지 예시를 들어서 아주 자세하게 설명해줘

PowerInfer의 학습과 활용을 위해 필요한 데이터셋 및 학습 과정은 다음과 같은 단계를 포함합니다. 이 과정은 모델의 뉴런 활성화 패턴을 분석하고 이를 기반으로 최적의 GPU-CPU 뉴런 배치를 학습하는 것을 목표로 합니다.


필요한 데이터셋

PowerInfer는 뉴런 활성화 패턴을 학습하기 위해 다양하고 일반적인 데이터셋이 필요합니다. 주요 요구사항과 예시는 다음과 같습니다:

1. 일반 언어 모델 학습용 데이터셋

  • 필요 이유: 뉴런 활성화 패턴은 입력 데이터의 다양성과 모델 크기에 따라 달라지기 때문에, 다양한 텍스트를 포함하는 데이터셋이 필요합니다.
  • 추천 데이터셋:
    • C4 데이터셋: Common Crawl 기반의 대규모 텍스트 데이터로 다양한 도메인을 포함.
    • 위키피디아 데이터셋: 정제된 백과사전 텍스트.
    • OpenWebText: Reddit 기반 링크로 생성된 텍스트 데이터.
    • ChatGPT Prompts 및 Alpaca: 실제 사용자와의 대화 데이터 및 지침 기반 데이터.

2. 테스트 및 평가용 데이터셋

  • 목적: 뉴런 배치 전략 및 추론 성능을 검증.
  • 추천 데이터셋:
    • PIQA, Winogrande: 논리적 사고 및 상식 평가.
    • RTE, COPA: 텍스트 간 관계 이해 및 인과 추론 평가.

학습 과정

PowerInfer는 오프라인 프로파일링 단계에서 뉴런 활성화 패턴을 학습하고 이를 기반으로 GPU-CPU 뉴런 배치 정책을 설계합니다. 학습 프로세스를 단계적으로 설명합니다:


1. 데이터 준비

  • 데이터 전처리:
    • 텍스트 데이터를 정규화 (특수문자 제거, 대소문자 통일).
    • 정제된 텍스트를 토큰화하여 모델 입력으로 변환.
  • 데이터 분할:
    • 학습 데이터 (70%): 뉴런 활성화 프로파일링.
    • 검증 데이터 (20%): 예측기의 정확도 및 성능 평가.
    • 테스트 데이터 (10%): 최종 뉴런 배치 전략 검증.

2. 오프라인 프로파일링

  1. 모델 로드:
    • LLM을 선택하여 초기화 (예: OPT-30B, LLaMA-13B).
  2. 활성화 데이터 수집:
    • 각 입력 데이터에 대해 뉴런 활성화 패턴을 수집.
    • 예: 각 뉴런이 특정 입력에서 활성화되는 빈도를 기록.
  3. 뉴런 배치 기준 생성:
    • Hot 뉴런 분류:
      • 활성화 빈도가 상위 20~30%에 해당하는 뉴런을 “hot neuron”으로 분류.
    • Cold 뉴런 분류:
      • 나머지 뉴런을 “cold neuron”으로 분류.

3. 뉴런 배치 정책 설계

  • 목표:
    • GPU 메모리 제약 내에서 최대한 많은 “hot neuron” 배치.
    • PCIe 전송 비용을 최소화하도록 “cold neuron” 배치.
  • 방법:
    • 뉴런 활성화 빈도와 GPU 메모리 크기, CPU 대역폭 등을 고려한 정수 선형 계획(Integer Linear Programming, ILP) 모델 설계.
    • 최적화 문제 정의:
      • 목적 함수: GPU에 배치된 뉴런의 활성화 빈도를 최대화.
      • 제약 조건:
        • GPU 메모리 크기 제한.
        • GPU-CPU 동기화 비용 제한.

4. 예측기 학습

  • 학습 데이터:
    • 프로파일링 단계에서 수집된 뉴런 활성화 데이터를 입력으로 사용.
  • 모델 설계:
    • 간단한 다층 퍼셉트론(MLP) 기반 활성화 예측기 설계.
    • 입력: 현재 레이어의 활성화 상태.
    • 출력: 다음 레이어에서 활성화될 뉴런.
  • 학습 과정:
    • 손실 함수: 활성화 뉴런 예측 정확도 기반으로 설계.
    • GPU에서 빠른 학습을 위해 미니배치 방식 활용.
  • 출력:
    • 각 뉴런의 활성화 여부를 예측하는 가벼운 모델.

5. 배치 정책 검증

  • 검증 데이터를 사용하여 정책의 효과성 평가:
    • GPU-CPU 메모리 활용도.
    • 추론 속도 및 정확도 비교.

6. 실시간 추론 적용

  • GPU와 CPU 메모리에 뉴런 배치를 로드.
  • 실시간으로 입력 데이터를 처리하며 예측기와 배치 정책 적용.
  • 최적화된 뉴런 관리로 빠르고 효율적인 추론 수행.

정리

  • 필요 데이터셋:
    • 다양한 언어와 문장을 포함한 학습용 데이터셋 (C4, Wikipedia).
    • 성능 검증용 논리/추론 데이터셋 (PIQA, RTE 등).
  • 학습 과정:
    1. 프로파일링으로 뉴런 활성화 패턴 분석.
    2. GPU-CPU 배치 정책 생성 및 최적화.
    3. 뉴런 활성화 예측기 학습.
    4. 검증 후 실시간 추론에 적용.

이러한 과정을 통해 PowerInfer는 제한된 GPU 자원으로도 대규모 모델을 효과적으로 처리할 수 있습니다. 추가적인 질문이나 특정 부분에 대한 설명이 필요하다면 알려주세요!

Q : 이 논문에서 제시한 결과를 자세하게 보고 다른 방법론에 비하여 특출난 점과 논문에서 제기하는 어떠한 방법이 이러한 결과를 도출하게 되었는지 논문에서 제시하는 이유와 너의 생각을 알려줘

PowerInfer의 학습과 활용을 위해 필요한 데이터셋 및 학습 과정은 다음과 같은 단계를 포함합니다. 이 과정은 모델의 뉴런 활성화 패턴을 분석하고 이를 기반으로 최적의 GPU-CPU 뉴런 배치를 학습하는 것을 목표로 합니다.


필요한 데이터셋

PowerInfer는 뉴런 활성화 패턴을 학습하기 위해 다양하고 일반적인 데이터셋이 필요합니다. 주요 요구사항과 예시는 다음과 같습니다:

1. 일반 언어 모델 학습용 데이터셋

  • 필요 이유: 뉴런 활성화 패턴은 입력 데이터의 다양성과 모델 크기에 따라 달라지기 때문에, 다양한 텍스트를 포함하는 데이터셋이 필요합니다.
  • 추천 데이터셋:
    • C4 데이터셋: Common Crawl 기반의 대규모 텍스트 데이터로 다양한 도메인을 포함.
    • 위키피디아 데이터셋: 정제된 백과사전 텍스트.
    • OpenWebText: Reddit 기반 링크로 생성된 텍스트 데이터.
    • ChatGPT Prompts 및 Alpaca: 실제 사용자와의 대화 데이터 및 지침 기반 데이터.

2. 테스트 및 평가용 데이터셋

  • 목적: 뉴런 배치 전략 및 추론 성능을 검증.
  • 추천 데이터셋:
    • PIQA, Winogrande: 논리적 사고 및 상식 평가.
    • RTE, COPA: 텍스트 간 관계 이해 및 인과 추론 평가.

학습 과정

PowerInfer는 오프라인 프로파일링 단계에서 뉴런 활성화 패턴을 학습하고 이를 기반으로 GPU-CPU 뉴런 배치 정책을 설계합니다. 학습 프로세스를 단계적으로 설명합니다:


1. 데이터 준비

  • 데이터 전처리:
    • 텍스트 데이터를 정규화 (특수문자 제거, 대소문자 통일).
    • 정제된 텍스트를 토큰화하여 모델 입력으로 변환.
  • 데이터 분할:
    • 학습 데이터 (70%): 뉴런 활성화 프로파일링.
    • 검증 데이터 (20%): 예측기의 정확도 및 성능 평가.
    • 테스트 데이터 (10%): 최종 뉴런 배치 전략 검증.

2. 오프라인 프로파일링

  1. 모델 로드:
    • LLM을 선택하여 초기화 (예: OPT-30B, LLaMA-13B).
  2. 활성화 데이터 수집:
    • 각 입력 데이터에 대해 뉴런 활성화 패턴을 수집.
    • 예: 각 뉴런이 특정 입력에서 활성화되는 빈도를 기록.
  3. 뉴런 배치 기준 생성:
    • Hot 뉴런 분류:
      • 활성화 빈도가 상위 20~30%에 해당하는 뉴런을 “hot neuron”으로 분류.
    • Cold 뉴런 분류:
      • 나머지 뉴런을 “cold neuron”으로 분류.

3. 뉴런 배치 정책 설계

  • 목표:
    • GPU 메모리 제약 내에서 최대한 많은 “hot neuron” 배치.
    • PCIe 전송 비용을 최소화하도록 “cold neuron” 배치.
  • 방법:
    • 뉴런 활성화 빈도와 GPU 메모리 크기, CPU 대역폭 등을 고려한 정수 선형 계획(Integer Linear Programming, ILP) 모델 설계.
    • 최적화 문제 정의:
      • 목적 함수: GPU에 배치된 뉴런의 활성화 빈도를 최대화.
      • 제약 조건:
        • GPU 메모리 크기 제한.
        • GPU-CPU 동기화 비용 제한.

4. 예측기 학습

  • 학습 데이터:
    • 프로파일링 단계에서 수집된 뉴런 활성화 데이터를 입력으로 사용.
  • 모델 설계:
    • 간단한 다층 퍼셉트론(MLP) 기반 활성화 예측기 설계.
    • 입력: 현재 레이어의 활성화 상태.
    • 출력: 다음 레이어에서 활성화될 뉴런.
  • 학습 과정:
    • 손실 함수: 활성화 뉴런 예측 정확도 기반으로 설계.
    • GPU에서 빠른 학습을 위해 미니배치 방식 활용.
  • 출력:
    • 각 뉴런의 활성화 여부를 예측하는 가벼운 모델.

5. 배치 정책 검증

  • 검증 데이터를 사용하여 정책의 효과성 평가:
    • GPU-CPU 메모리 활용도.
    • 추론 속도 및 정확도 비교.

6. 실시간 추론 적용

  • GPU와 CPU 메모리에 뉴런 배치를 로드.
  • 실시간으로 입력 데이터를 처리하며 예측기와 배치 정책 적용.
  • 최적화된 뉴런 관리로 빠르고 효율적인 추론 수행.

정리

  • 필요 데이터셋:
    • 다양한 언어와 문장을 포함한 학습용 데이터셋 (C4, Wikipedia).
    • 성능 검증용 논리/추론 데이터셋 (PIQA, RTE 등).
  • 학습 과정:
    1. 프로파일링으로 뉴런 활성화 패턴 분석.
    2. GPU-CPU 배치 정책 생성 및 최적화.
    3. 뉴런 활성화 예측기 학습.
    4. 검증 후 실시간 추론에 적용.

이러한 과정을 통해 PowerInfer는 제한된 GPU 자원으로도 대규모 모델을 효과적으로 처리할 수 있습니다. 추가적인 질문이나 특정 부분에 대한 설명이 필요하다면 알려주세요!

Q : 이 논문의 입력데이터와 추론 과정에 대해서 예시를 들어 아주 자세하게 설명해 주겠니? 추가적으로 모델아키텍처의 구성 및 모델을 구성하는 연산과 메모리 요구량 컴퓨팅 요구량 대해서도 설명해줘

논문의 입력 데이터와 추론 과정 예시


입력 데이터

입력 예시: "The weather today is sunny."

  • 이 입력은 토큰화되어 모델이 처리할 수 있는 형식으로 변환됩니다. 예를 들어:
    • 토큰화 결과: [The, weather, today, is, sunny]
    • 각 토큰은 임베딩 벡터로 변환됩니다. 임베딩 벡터 크기가 (d_{emb} = 1024)이라고 가정하면, 각 토큰은 (1024)-차원의 벡터로 표현됩니다.

추론 과정

  1. 프롬프트 처리
    • 첫 번째 단계에서 모델은 입력 문장을 기반으로 초기 임베딩 벡터를 생성합니다.
    • 입력 벡터는 Transformer의 첫 번째 레이어로 전달됩니다.
  2. Transformer 레이어 처리
    • 각 Transformer 레이어는 다음과 같은 연산으로 구성됩니다:
      1. Self-Attention:
        • 입력 벡터 간 관계를 분석하여 컨텍스트를 계산.
        • (Q), (K), (V) 행렬을 생성하고, Attention 연산을 통해 새로운 표현 생성.
      2. 피드포워드 네트워크 (FFN):
        • 뉴런 활성화 함수 (예: ReLU)를 통해 비선형 변환 수행.
        • 예: 입력 (x)에 대해 (FFN(x) = \text{ReLU}(W_2 \times (\text{ReLU}(W_1 \times x + b_1)) + b_2)).
    • Transformer 레이어의 각 연산은 뉴런 단위로 이루어지며, 뉴런 활성화는 파워-로우 분포를 따릅니다.
      • Hot Neurons: 입력에 상관없이 자주 활성화.
      • Cold Neurons: 입력에 따라 조건부로 활성화.
  3. 뉴런 활성화 처리:
    • PowerInfer는 뉴런을 hot neuroncold neuron으로 분리.
      • GPU: hot neuron의 가중치를 메모리에 미리 로드하고 빠르게 처리.
      • CPU: cold neuron은 필요할 때 처리.
    • 예:
      • hot neuron: 3, 5, 7
      • cold neuron: 2, 8
    • 활성화된 뉴런만 처리하여 계산을 최적화.
  4. 결과 통합 및 토큰 생성:
    • 모든 레이어를 통과한 후 최종 결과는 다음 토큰 "sunny"를 생성.
    • 이 과정은 반복적으로 수행되며, 이전 출력이 다음 입력으로 사용됩니다.

모델 아키텍처의 구성

PowerInfer는 LLM 추론을 위해 Transformer 구조를 활용합니다. 주요 구성 요소는 다음과 같습니다:


1. 모델 구성 요소

  1. 입력 임베딩:
    • 입력 토큰을 고차원 벡터로 변환.
    • 크기: (d_{emb}) (예: 1024).
  2. Transformer 레이어:
    • (L)개의 레이어로 구성 (예: 30B 모델은 70~80개 레이어).
    • 각 레이어의 구성:
      1. Self-Attention:
        • 입력 벡터 간 상호작용 계산.
        • 연산량: (O(n^2 \times d_{emb})) (여기서 (n)은 토큰 수).
      2. FFN:
        • 비선형 변환 수행.
        • 연산량: (O(d_{emb}^2)).
  3. 출력 레이어 (Softmax):
    • 최종 벡터를 확률 분포로 변환하여 다음 토큰 생성.

2. 메모리 요구량

  1. 모델 매개변수 (Weights):
    • 크기: (L \times d_{emb}^2).
    • 예: OPT-30B 모델 ((d_{emb} = 2048, L = 80))의 가중치 메모리 요구량: [ \text{Weights} = 80 \times 2048^2 \approx 336 \, \text{GB}. ]
  2. 활성화 값 (Activations):
    • 각 레이어의 출력 크기: (n \times d_{emb}).
    • 예: 입력 토큰이 100개이고 (d_{emb} = 2048)일 경우: [ \text{Activation Memory} = 100 \times 2048 \times 4 \, \text{(FP32)} \approx 800 \, \text{KB}. ]
  3. KV 캐시:
    • Self-Attention에서 각 토큰의 Key, Value 저장.
    • 메모리 크기: (n \times d_{emb} \times L).

3. 연산 요구량

  1. Self-Attention 연산량:
    • Attention 행렬 계산: (O(n^2 \times d_{emb})).
    • 예: 100개 토큰, (d_{emb} = 2048): [ \text{Self-Attention FLOPs} = 100^2 \times 2048 \approx 20.5 \, \text{MFLOPs}. ]
  2. FFN 연산량:
    • Fully Connected 레이어: (O(d_{emb}^2)).
    • 예: (d_{emb} = 2048): [ \text{FFN FLOPs} = 2048^2 \approx 4.2 \, \text{MFLOPs}. ]

PowerInfer에서 최적화된 처리

  1. GPU-CPU 하이브리드:
    • Hot neuron만 GPU에서 계산:
      • GPU 연산량 감소.
      • PCIe 데이터 전송 최소화.
    • Cold neuron은 CPU에서 계산:
      • GPU 메모리 초과 방지.
  2. 희소성 기반 계산:
    • 활성화되지 않은 뉴런 무시하여 연산량 대폭 감소.

정리

PowerInfer는 입력 데이터를 바탕으로 뉴런 활성화 패턴을 분석하여 GPU와 CPU의 작업을 효율적으로 분배합니다. 이를 통해 대규모 언어 모델의 높은 메모리 및 연산 요구량을 극복하며, 소비자용 GPU에서도 서버급 성능을 제공합니다.

추가적인 질문이나 구체적인 시뮬레이션이 필요하다면 말씀해주세요!

Q : 이 논문의 한계를 극복하기 위한 방법으로 어떤 연구흐름이 있는지 정리해서 자세하게 설명해 줘