오류 코드: E1200

카테고리: 컴파일 시간: 호스트 오프로드 출력 불일치

이 오류는 호스트 메모리로 명시적으로 오프로드된 텐서가 프로그램 출력으로 반환되지만 프로그램의 출력 서명이 호스트 메모리를 예상하도록 구성되지 않은 경우에 발생합니다.

샘플 오류 메시지:

INVALID_ARGUMENT: Tensor which is moved to host (starting from tuple.64) is returned from the entry computation but the layout for this output is not set to host memory.

XLA 백엔드: TPU, GPU

개요

컴파일러가 텐서를 호스트(CPU)로 오프로드하는 주석을 발견하면 세 가지 이벤트 중 하나가 발생할 때까지 연산 그래프를 통해 해당 텐서의 위치를 추적합니다.

  1. 기기로 이동: 일치하는 주석이 텐서를 가속기로 다시 이동합니다.
  2. 호스트 연산: 텐서가 호스트 측 작업에 의해 사용됩니다.
  3. 프로그램 종료: 텐서가 프로그램 끝에 도달하여 출력이 됩니다.

이 오류는 시나리오 #3 에서 트리거됩니다. 텐서는 실행이 끝날 때 호스트 메모리에 물리적으로 위치하지만 XLA 프로그램의 항목 연산 서명은 해당 특정 출력이 기기 메모리 에 있다고 정의합니다. 컴파일러는 항목 연산의 인터페이스를 암시적으로 변경할 수 없으므로 오류가 발생합니다.

디버깅

이 오류를 해결하려면 이 텐서가 호스트의 출력으로 사용되도록 의도했는지 아니면 반환되기 전에 기기로 다시 이동해야 했는지 확인하세요.

  • 호스트에서 반환하도록 의도: 이 텐서가 호스트 메모리에서 반환되도록 명시적으로 하려면 (기기로 다시 전송하지 않음) 이 특정 출력에 대해 항목 연산의 출력 메모리 공간을 호스트 메모리 로 명시적으로 설정해야 합니다.

  • 기기에서 반환하도록 의도: 텐서가 기기에 유지되거나 프로그램이 종료되기 전에 기기로 반환되도록 의도한 경우 주석을 누락했을 수 있습니다. 일치하는 주석을 삽입하여 텐서를 기기로 다시 이동합니다.

오프로드된 텐서의 소스가 명확하지 않거나 '기기로 이동' 주석이 누락된 위치를 찾을 수 없는 경우 XLA 로깅을 사용하여 명령어를 추적합니다.

  • 로깅 사용 설정: Google Cloud TPU를 사용하는 경우 다음 플래그를 사용하여 프로그램을 다시 실행합니다. --vmodule=host_offloader=1.
  • 로그 분석: 로그에서 'trace' 출력을 찾습니다. 그러면 오프로드 명령어부터 시작되는 텐서의 경로가 표시됩니다. 이를 사용하여 텐서가 기기로 다시 이동되지 않고 프로그램 경계에 도달하는 위치를 정확히 파악합니다.