콘텐츠로 이동

RBLN 프로파일러 시작하기

이 페이지에서는 RBLN 프로파일러를 사용하는 기본적인 방법에 대해 간략하게 서술합니다. RBLN 모델주의 파이토치 BERT 모델을 예시로 프로파일링 데이터를 추출하는 방법을 알아봅니다.

사전 준비

시작하기에 앞서 아래의 파이썬 패키지들이 설치되어 있는지 확인합니다:

Note

RBLN 프로파일러는 rebel-compiler에서 제공하는 기능 중 하나입니다. 따라서, rebel-compiler를 설치할 때 함께 설치되며 따로 설치할 필요가 없습니다.

프로파일링 데이터 추출하기

RBLN 프로파일러를 사용하여 rebel-compileroptimum-rbln 모두에서 프로파일링 데이터를 추출할 수 있습니다.

이 예제에서는 질의 응답을 위해 훈련된 BERT-base 모델을 컴파일하고 프로파일링 데이터를 추출합니다. 해당 모델은 RBLN 모델주에서 rebel-compiler를 사용하는 경우(옵션 1)optimum-rbln을 사용하는 경우(옵션 2) 모두를 지원하므로, 두 경우에서 프로파일링 데이터를 추출하는 방법에 대해서 각각 알아보겠습니다.

옵션 1: rebel-compiler 를 사용하는 경우

rebel-compiler을 사용하는 경우 아래와 같은 방법으로 프로파일링 데이터를 추출할 수 있습니다.

모델 컴파일

아래 명령어를 통해 rebel-compiler을 사용하여 BERT-base 모델은 컴파일할 수 있습니다. 모델 컴파일이 끝나면 디렉토리에 bert-base.rbln 파일이 생성된 것을 확인할 수 있습니다.

1
2
3
$ cd rbln-model-zoo/pytorch/nlp/bert/qa
$ pip3 install -r requirements.txt
$ python3 compile.py --model_name base

RBLN 프로파일러 활성화

추론을 수행할 때 환경변수 RBLN_PROFILER=1를 설정하거나, 코드 내부에서 런타임 모듈을 생성할 때 rebel.Runtime 에서 activate_profile=True 인자를 사용하면 대상 모델을 프로파일링할 수 있습니다.

  • 환경 변수를 사용: 환경변수 RBLN_PROFILER=1를 설정하여 RBLN 프로파일러를 활성화합니다.

    $ RBLN_PROFILER=1 python3 inference.py --model_name base
    

  • RBLN Runtime API 사용: activate_profiler=True를 설정하여 프로파일러를 활성화합니다.

    1
    2
    3
    4
    5
    # `inference.py` 파일을 아래와 같이 수정합니다.
    ...
    # RBLN runtime module을 이용하여 컴파일한 모델을 불러옵니다.
    module = rebel.Runtime(f"bert-{args.model_name}.rbln", tensor_type="pt", activate_profiler=True)
    ...
    

추론을 통한 프로파일링 데이터 추출

  • 일반적으로, 아래와 같이 아무런 설정을 지정하지 않아도 프로파일링 데이터를 얻을 수 있습니다:
    1
    2
    3
    4
    5
    # RBLN 런타임 모듈을 이용하여 추론을 실행합니다.
    ...
    # 프로파일링 데이터를 기본 경로("./")에 저장합니다.
    out = module.run(**inputs)
    ...
    
  • 다양한 워크로드에 대한 프로파일링을 구성하기 위해, 아래와 같이 구역이 지정된 프로파일링 메서드를 지원합니다:
    1
    2
    3
    4
    5
    6
    7
    ...
    # 프로파일링 구역을 설정하고, 프로파일링 데이터의 저장 경로를 "./temp"로 지정합니다.
    from rebel.profiler import profile
    
    with profile(output_dir="./temp"):
        out = module.run(**inputs)
    ...
    

옵션 2: optimum-rbln 를 사용하는 경우

optimum-rbln을 사용하는 경우 아래와 같은 방법으로 프로파일링 데이터를 추출할 수 있습니다.

모델 컴파일

아래 명령어를 통해 optimum-rbln을 이용하여 모델을 컴파일할 수 있습니다. 모델 컴파일이 끝나면 bert-base-cased-squad2 디렉토리가 생성된 것을 확인할 수 있습니다.

1
2
3
$ cd rbln-model-zoo/huggingface/transformers/question-answering/bert/compile.py
$ pip3 install -r requirements.txt
$ python3 compile.py --model_name base

RBLN 프로파일러 활성화

추론을 수행할 때 환경변수 RBLN_PROFILER=1를 설정하거나, 코드 내부에서 런타임 모듈을 생성할 때 optimum-rbln API 에서 activate_profile=True 인자를 사용하면 대상 모델을 프로파일링할 수 있습니다.

  • 환경 변수 사용: 환경변수 RBLN_PROFILER=1를 설정하여 RBLN 프로파일러를 활성화합니다.
    $ RBLN_PROFILER=1 python3 inference.py --model_name base
    
  • optimum-rbln API 사용: rbln_activate_profiler=True를 설정하여 프로파일러를 활성화합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # `inference.py` 파일을 아래와 같이 수정합니다.
    ...
    # 컴파일한 모델을 불러옵니다.
    model = RBLNBertForQuestionAnswering.from_pretrained(
        model_id=os.path.basename(model_id),
        export=False,
        rbln_activate_profiler=True,
    )
    ...
    

추론을 통한 프로파일링 데이터 추출

  • Runtime API 사용 예제와 마찬가지로, 어떠한 설정을 지정하지 않아도 프로파일링 데이터를 얻을 수 있습니다:

    1
    2
    3
    4
    # optimum-rbln API를 이용하여 추론을 실행합니다.
    ...
    # 프로파일링 데이터를 기본 경로("./")에 저장합니다.
    answer = pipe(question=args.question, context=args.context)
    

  • 또한, optimum-rbln API을 사용하는 경우에도 아래와 같이 구역이 지정된 프로파일링 메서드를 사용할 수 있습니다:

    1
    2
    3
    4
    5
    6
    7
    ...
    # 프로파일링 구역을 설정하고, 프로파일링 데이터의 저장 경로를 "./temp"로 지정합니다.
    from rebel.profiler import profile
    
    with profile(output_dir="./temp"):
        answer = pipe(question=args.question, context=args.context)
    ...
    

프로파일링 결과 확인하기

위에서 설명한 방법대로 RBLN 프로파일러를 사용하면 아래와 같은 프로파일링 결과를 확인할 수 있습니다.

RBLN Profiler Generation Status Report는 프로파일러가 트레이싱 과정과 Protocol Buffer 파일을 생성하는 과정에서 발생하는 모든 상태 정보를 아래의 세 가지 카테고리로 보여줍니다.

  • System Passes: 일반적인 시스템 이상을 모니터링하고, 메모리 할당 상태를 확인하며, 명령 프로세서에서 생성된 프로파일 데이터를 검증합니다.

  • Compilation Passes: RBLN 컴파일러에 의해 생성된 프로파일 정보를 검증하고 명령어 의존성 위반 여부를 탐지합니다.

  • Tracing Passes: Command Processor로부터 프로파일링 데이터를 수집하고 검증하며, 이에 대한 분석을 수행하고, 데이터 분석을 통해 시각화 전처리를 수행합니다. 또, Protocol Buffer 파일 생성 및 직렬화(serialize)를 위해 레이아웃을 재구성하고 구조를 변환합니다.

Note

프로파일링 결과에서 지속적으로 Failed이 발생할 시, support@rebellions.ai로 연락바랍니다.

  • 생성된 파일명
    • Multi Stream (전체 로그): rbln_{date}_{time}.pb
      • 위 파일은 단일 프로파일러 인스턴스 상에서 발생한 모든 추론 과정의 tracing 정보들을 하나의 plot에 표현하며, 단일 *.pb 파일에 기록됩니다.
    • Single Stream (sequence 별 로그): rbln_{date}_{time}_{sequence_index}.pb
      • 위 파일들은 단일 프로파일러 인스턴스 상에서 실행된 모듈의 단일 추론에 대한 tracing 정보를 하나의 plot에 표현합니다. 즉, 단일 스트림의 경우, 모듈 갯수와 모듈마다의 추론 횟수만큼의 *.pb 파일들이 생성됩니다.

생성된 *.pb 파일들은 Perfetto를 통해 시각화 할 수 있습니다.