메모리 뷰어 도구

메모리 뷰어를 사용하면 프로그램 전체 기간 동안의 메모리 사용량을 시각화할 수 있습니다. 메모리 사용량이 최대인 지점에서 메모리 콘텐츠의 세부정보를 자세히 살펴볼 수 있습니다(예: 메모리 부족(OOM) 상황 디버깅). 메모리 뷰어를 사용하면 전역 메모리 사용량과 계산이 메모리 부족 상태에 얼마나 가까운지 확인할 수 있습니다.

메모리 뷰어에 표시되는 모든 정보는 XLA 컴파일러에서 가져온 순수한 정적 정보입니다. 동적 런타임 정보는 메모리 프로필 도구에 표시됩니다.

지원되는 플랫폼

TPU: 지원됨

GPU: 지원됨

메모리 뷰어 구성요소

메모리 뷰어는 다음과 같은 여러 주요 구성요소로 구성됩니다.

  1. 시각화하는 데이터를 맞춤설정할 수 있는 사용자 컨트롤 드롭다운:
    • 메모리 유형: 지원되는 메모리 유형은 가속기에 따라 다릅니다. GPU의 경우 고대역폭 메모리 (HBM)에 중점을 두는 반면 TPU의 경우 VMEM, SMEM, CMEM, 동기화 플래그 (SFlag), Sparsecore, 호스트 메모리를 비롯한 온칩 메모리의 사용량도 추가로 확인할 수 있습니다.
    • 모듈: 실행의 일부였던 XLA 프로그램입니다. 좋은 시작점은 'jit_train_step' 또는 'jit_generate'와 같이 라벨이 지정된 최상위 모듈입니다.
  2. 텍스트 개요 섹션은 프로그램에 필요한 최대 메모리 할당, 인수와 임시 변수 간의 분할 등 대략적인 정보를 제공합니다. 가속기에서 지원되는 텐서 모양에 대한 제한으로 인해 패딩으로 인한 오버헤드가 있습니다. 이 패딩이 총 할당량의 상당 부분을 차지하는 경우 최적화 기회가 있을 수 있습니다.
  3. '메모리 할당 크기 대 프로그램 순서' 선 차트는 컴파일러에 의해 예약된 프로그램 지점 (HLO 시퀀스)과 메모리 사용량을 비교하여 표시합니다.
    • x축은 시간이 아닙니다.
    • 이 차트는 특히 선택한 모듈의 최대 메모리 사용률이 있는 프로그램의 지점을 강조 표시합니다. 프로파일러와 도구는 특정 칩/메모리에 모듈이 공존하는 것을 인식하지 못합니다. 각 모듈이 컴파일되면 컴파일러는 프로필에 할당된 총 메모리의 '기준점' 시작점 (이 모듈 전에 컴파일된 모듈에 의해)을 주석으로 추가하고 추가 할당 및 할당 해제가 발생할 때마다 그 지점에서 위아래로 계산합니다. 그러나 실행 전에 컴파일된 다른 모듈의 향후 할당은 캡처되지 않습니다. OOM 상황을 디버그할 때 이 점에 유의하세요.
  4. 페이지 하단의 버퍼 차트는 최고 사용량 프로그램 지점 (메모리 사용량 선 차트의 세로선으로 표시)의 메모리 사용량을 분류합니다. 세 개의 차트가 있으며 모두 프로그램에서 할당된 전체 버퍼 세트를 보여주지만 세 가지 다른 방식으로 정렬됩니다.

    • 프로그램 순서별: 프로그램 실행 중에 생성된 순서로, 가장 오래된 항목이 왼쪽에 표시됩니다.
    • 크기별로: 최고 메모리 사용량 지점에 가장 큰 영향을 미치는 항목이 왼쪽에 있습니다.
    • 적용하는 패딩 오버헤드에 따라 하드웨어 관점에서 가장 '비효율적'인 것이 왼쪽에 표시됩니다.

      버퍼의 색상은 특별한 의미가 없습니다.

  5. 세 차트 중 하나의 버퍼 위로 마우스를 가져가면 다음 두 가지 디스플레이가 추가로 표시됩니다.

    • 메모리 사용량 선 차트의 오버레이로, 버퍼 카드와 일치하는 색상으로 버퍼의 전체 기간을 나타냅니다. 즉, 왼쪽과 오른쪽 가장자리가 프로그램 순서 내에서 할당 및 할당 해제 지점을 나타내는 가로 막대입니다. 가로 막대의 높이는 최고 할당량과 비교한 선택한 버퍼의 상대 크기를 나타냅니다.
    • 별도의 버퍼 세부정보 카드(일반적으로 왼쪽에 있음)에는 해당하는 경우 특정 작업에 관한 세부정보가 포함됩니다. 일반적인 카드에는 다음 정보가 포함됩니다.
      • 이름: 그래프 뷰어 또는 트레이스 뷰어에서 검색할 수 있는 XLA 작업 이름입니다.
      • 크기: 패딩 유무와 관계없는 버퍼 할당의 크기입니다.
      • 모양: N 차원 배열의 순위, 크기, 데이터 유형을 설명합니다.
      • 프레임워크 작업 이름: 이 할당과 연결된 프레임워크 작업 이름을 표시합니다.
      • 할당 유형: 버퍼 할당을 매개변수, 출력, 스레드 로컬, 임시(예: 퓨전 내의 버퍼 할당) 유형으로 분류합니다.