콘텐츠로 이동

RBLN 프로파일러 시작하기

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

사전 준비

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

Note

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

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

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

이 예제에서는 질의 응답을 위해 훈련된 BERT-base 모델을 컴파일하고 프로파일링 데이터를 추출합니다. 해당 모델은 RBLN Model Zoo에서 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_profiler=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 에서 rbln_activate_profiler=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이 발생할 시, client_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를 통해 시각화 할 수 있습니다.