Xprof를 사용하려면 먼저 모델 워크로드 코드 내에서 프로필 캡처를 사용 설정해야 합니다. 아래에 자세히 설명된 대로 프로필을 캡처하는 방법에는 두 가지가 있습니다.
프로그래매틱 캡처
프로그래매틱 캡처를 사용하면 코드에서 프로필을 캡처할 위치를 지정하기 위해 모델 코드에 주석을 달아야 합니다. 일반적으로 사용자는 학습 루프 중에 몇 단계의 프로필을 수집하거나 모델 내에서 특정 블록을 프로파일링합니다. 다양한 프레임워크 JAX, Pytorch XLA, Tensorflow에서 트레이스를 캡처하는 방법은 API 기반 트레이스 시작/중지 또는 컨텍스트 관리자 기반 등 다양합니다.
온디맨드 캡처 (수동 캡처)
온디맨드 프로필 캡처는 실행 중에 애드혹 방식으로 프로필을 캡처하려는 경우이거나 프로그래매틱 프로필 캡처를 사용 설정하지 않은 기간에 사용됩니다. 이는 실행 중에 모델 측정항목에 문제가 표시되었을 때 해당 문제를 진단하기 위해 특정 기간 동안 해당 시점의 프로필을 캡처하려는 경우에 사용됩니다.
온디맨드 프로필 캡처를 사용 설정하려면 코드 내에서 xprof 서버를 시작해야 합니다. 예를 들어 JAX에서 jax.profiler.start_server를 사용 설정하면 프로필 캡처를 시작하기 위한 주문형 캡처 트리거를 수신 대기하는 xprof 서버가 ML 워크로드에서 시작됩니다.
실행당 여러 세션
프로필을 캡처할 때 단일 실행의 프로필을 여러 세션으로 캡처할 수 있습니다. 1~3단계의 학습 실행에서 프로필을 캡처한 후 8~10단계에서 프로필을 캡처한다고 가정해 보겠습니다. 따라서 이는 동일한 실행의 프로필이지만 1~3단계의 첫 번째 캡처는 session1이고 8~10단계의 두 번째 캡처는 session2입니다. 각 실행 아래에 다른 날짜 스탬프가 표시되어 세션이 구분됩니다. 프로그래매틱 방식, 온디맨드 방식 또는 이 두 가지를 혼합하여 여러 세션에서 프로필을 캡처할 수 있습니다.
Google Cloud의 XProf 및 Tensorboard
Google Cloud에서는 cloud-diagnostics-xprof 라이브러리를 사용하여 Tensorboard와 XProf를 더 쉽게 호스팅하는 것이 좋습니다. GCP에서 이 라이브러리를 사용할 때의 주요 이점은 다음과 같습니다.
- XProf 및 TensorBoard 종속 항목의 간편한 설정 및 패키징
- 장기 보관 및 실행 후 분석에 유용할 수 있는 GCS에 프로필을 저장합니다 (연구자가 실행을 완료하면 캡처된 로컬 프로필이 삭제됨).
- GCE VM 또는 GKE 포드에 Tensorboard를 프로비저닝하여 대규모 프로필과 여러 프로필을 빠르게 로드하고, 로드 속도 및 비용에 대한 사용자 요구사항에 따라 머신 유형을 변경하는 옵션 제공
- 프로필을 쉽게 공유하고 팀원 및 Google 엔지니어와 공동작업할 수 있는 링크를 만듭니다.
- GKE 및 GCE에서 워크로드의 온디맨드 프로파일링을 더 쉽게 실행하여 프로필을 캡처할 워크로드를 실행하는 호스트를 선택할 수 있습니다.
프레임워크별 안내
다양한 프레임워크에서 프로그래매틱 프로파일링과 온디맨드 프로파일링을 사용 설정하는 방법을 확인하세요.
문제 해결
GPU 프로파일링
GPU에서 실행되는 프로그램은 트레이스 뷰어 상단 근처에 GPU 스트림의 트레이스를 생성해야 합니다. 호스트 트레이스만 표시되는 경우 프로그램 로그 또는 출력에서 다음 오류 메시지를 확인하세요.
다음과 같은 오류가 표시되는 경우: Could not load dynamic library 'libcupti.so.10.1'
전체 오류:
W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
libcupti.so 경로를 환경 변수 LD_LIBRARY_PATH에 추가합니다.
(locate libcupti.so를 사용하여 경로를 찾아보세요.) 예를 들면 다음과 같습니다.
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
이 작업을 수행한 후에도 Could not load dynamic library 메시지가 표시되면 트레이스 뷰어에 GPU 트레이스가 표시되는지 확인하세요. 이 메시지는 모든 것이 작동하는 경우에도 여러 위치에서 libcupti 라이브러리를 찾기 때문에 표시될 수 있습니다.
다음과 같은 오류가 표시되는 경우: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
전체 오류:
E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED
다음 명령어를 실행합니다 (다시 시작해야 함).
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
자세한 내용은 이 오류에 관한 NVIDIA 문서를 참고하세요.
원격 컴퓨터에서 프로파일링
프로파일링하려는 프로그램이 원격 머신에서 실행 중인 경우 한 가지 방법은 원격 머신에서 위의 모든 안내를 실행한 다음 (특히 원격 머신에서 XProf 서버 시작) SSH 로컬 포트 전달을 사용하여 로컬 머신에서 XProf 웹 UI에 액세스하는 것입니다. 다음 SSH 명령어를 사용하여 기본 XProf 포트 8791을 로컬에서 원격 머신으로 전달합니다.
ssh -L 8791:localhost:8791 <remote server address>
또는 Google Cloud를 사용하는 경우:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
여러 텐서보드 설치
텐서보드를 시작할 때 다음과 같은 오류가 발생하면 ValueError: Duplicate
plugins for name projector
TensorBoard 또는 TensorFlow 버전이 두 개 설치되어 있는 경우가 많습니다 (예: tensorflow, tf-nightly, tensorboard, tb-nightly pip 패키지 모두에 TensorBoard가 포함됨). 단일 pip 패키지를 제거하면 tensorboard 실행 파일이 삭제되어 교체하기 어려워질 수 있으므로 모든 항목을 제거하고 단일 버전을 다시 설치해야 할 수 있습니다.
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
권한 문제 해결
Docker 환경이나 Linux에서 CUDA® Toolkit으로 프로파일링을 실행할 때 CUPTI 권한 부족(CUPTI_ERROR_INSUFFICIENT_PRIVILEGES)과 관련된 문제가 발생할 수 있습니다. NVIDIA 개발자 문서에서 Linux에서 이러한 문제를 해결하는 방법을 자세히 알아보세요.
Docker 환경에서 CUPTI 권한 문제를 해결하려면 다음을 실행하세요.
docker run option '--privileged=true'