Đang thu thập hồ sơ

Để sử dụng Xprof, trước tiên, bạn cần bật tính năng ghi lại hồ sơ trong mã tải mô hình. Có hai cách để ghi lại hồ sơ, được trình bày chi tiết bên dưới.

Chụp ảnh có lập trình

Với tính năng chụp có lập trình, bạn cần chú thích mã mô hình để chỉ định vị trí trong mã mà bạn muốn chụp hồ sơ. Thông thường, người dùng sẽ thu thập hồ sơ cho một vài bước trong vòng lặp huấn luyện hoặc lập hồ sơ cho một khối cụ thể trong mô hình của họ. Có nhiều cách để ghi lại dấu vết trong các khung JAX, Pytorch XLA và Tensorflow – có thể là bắt đầu/dừng dấu vết dựa trên API hoặc dựa trên trình quản lý bối cảnh.

Chụp theo yêu cầu (còn gọi là chụp thủ công)

Tính năng chụp hồ sơ theo yêu cầu được dùng khi bạn muốn chụp hồ sơ đặc biệt trong quá trình chạy, trong khoảng thời gian mà bạn không bật tính năng chụp hồ sơ có lập trình. Thao tác này thường được dùng khi bạn gặp phải một số vấn đề với các chỉ số mô hình trong quá trình chạy và muốn ghi lại hồ sơ tại thời điểm đó trong một khoảng thời gian để chẩn đoán vấn đề.

Để bật tính năng chụp hồ sơ theo yêu cầu, bạn vẫn cần khởi động máy chủ xprof trong mã của mình. Ví dụ: trong JAX, việc bật jax.profiler.start_server sẽ khởi động một máy chủ xprof trên tải ML của bạn. Máy chủ này sẽ lắng nghe trình kích hoạt chụp theo yêu cầu để bắt đầu chụp hồ sơ.

Nhiều phiên cho mỗi lần chạy

Khi ghi lại các hồ sơ, bạn có thể ghi lại hồ sơ cho một lần chạy duy nhất dưới dạng nhiều phiên. Giả sử bạn chụp ảnh hồ sơ trong một lần chạy huấn luyện từ bước 1 đến 3 và sau đó chụp ảnh hồ sơ từ bước 8 đến 10. Vì vậy, đây là các hồ sơ cho cùng một lần chạy, nhưng lần ghi lại đầu tiên từ bước 1 đến 3 sẽ là session1 và lần ghi lại thứ hai từ bước 8 đến 10 sẽ là session2. Các phiên khác nhau sẽ được biểu thị bằng dấu ngày khác nhau trong mỗi lần chạy. Bạn có thể ghi lại các hồ sơ trong nhiều phiên theo cách lập trình hoặc theo yêu cầu hoặc kết hợp cả hai.

XProf và Tensorboard trên Google Cloud

Trên Google Cloud, bạn nên dùng thư viện cloud-diagnostics-xprof để dễ dàng lưu trữ Tensorboard và XProf. Sau đây là một số lợi ích chính của việc sử dụng thư viện này trên GCP:

  • Dễ dàng thiết lập và đóng gói các phần phụ thuộc XProf và TensorBoard;
  • Lưu trữ hồ sơ của bạn trong GCS. Việc này có thể hữu ích cho việc lưu giữ lâu dài và phân tích sau khi chạy (hồ sơ cục bộ được ghi lại sẽ bị xoá sau khi nhà nghiên cứu hoàn tất quá trình chạy);
  • Tải nhanh các hồ sơ lớn và nhiều hồ sơ bằng cách cung cấp Tensorboard trên VM GCE hoặc pod GKE, với lựa chọn thay đổi loại máy dựa trên nhu cầu của người dùng về tốc độ tải và chi phí;
  • Tạo đường liên kết để dễ dàng chia sẻ hồ sơ và cộng tác với các thành viên trong nhóm cũng như kỹ sư của Google;
  • Dễ dàng lập hồ sơ theo yêu cầu về tải công việc trên GKE và GCE để chọn bất kỳ máy chủ nào đang chạy tải công việc của bạn để ghi lại hồ sơ.

Hướng dẫn cụ thể theo khung

Hãy xem cách bật tính năng lập hồ sơ có lập trình và lập hồ sơ theo yêu cầu trong các khung hình khác nhau:

Khắc phục sự cố

Lập hồ sơ GPU

Các chương trình chạy trên GPU sẽ tạo ra các dấu vết cho luồng GPU ở gần đầu trình xem dấu vết. Nếu bạn chỉ thấy các dấu vết máy chủ lưu trữ, hãy kiểm tra nhật ký chương trình và/hoặc đầu ra để tìm các thông báo lỗi sau.

Nếu bạn gặp lỗi như: Could not load dynamic library 'libcupti.so.10.1'
Lỗi đầy đủ:

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.

Thêm đường dẫn đến libcupti.so vào biến môi trường LD_LIBRARY_PATH. (Thử dùng locate libcupti.so để tìm đường.) Ví dụ:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH

Nếu bạn vẫn nhận được thông báo Could not load dynamic library sau khi thực hiện việc này, hãy kiểm tra xem dấu vết GPU có xuất hiện trong trình xem dấu vết hay không. Đôi khi, thông báo này xuất hiện ngay cả khi mọi thứ đều hoạt động, vì thông báo này tìm kiếm thư viện libcupti ở nhiều nơi.

Nếu bạn gặp lỗi như: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Lỗi đầy đủ:

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

Chạy các lệnh sau (lưu ý rằng bạn cần phải khởi động lại):

echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now

Hãy xem tài liệu của NVIDIA về lỗi này để biết thêm thông tin.

Phân tích hiệu suất trên máy từ xa

Nếu chương trình bạn muốn lập hồ sơ đang chạy trên một máy từ xa, thì một lựa chọn là chạy tất cả các hướng dẫn ở trên trên máy từ xa (cụ thể là khởi động máy chủ XProf trên máy từ xa), sau đó sử dụng tính năng chuyển tiếp cổng cục bộ SSH để truy cập vào giao diện người dùng web XProf từ máy cục bộ. Sử dụng lệnh SSH sau để chuyển tiếp cổng XProf mặc định 8791 từ máy cục bộ sang máy từ xa:

ssh -L 8791:localhost:8791 <remote server address>

hoặc nếu bạn đang sử dụng Google Cloud:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

Nhiều lượt cài đặt TensorBoard

Nếu bạn không khởi động được TensorBoard và gặp lỗi như: ValueError: Duplicate plugins for name projector

Nguyên nhân thường là do có hai phiên bản TensorBoard và/hoặc TensorFlow được cài đặt (ví dụ: các gói pip tensorflow, tf-nightly, tensorboardtb-nightly đều bao gồm TensorBoard). Việc gỡ cài đặt một gói pip có thể dẫn đến việc xoá tệp thực thi tensorboard. Sau đó, bạn sẽ khó thay thế tệp này. Vì vậy, bạn có thể cần gỡ cài đặt mọi thứ rồi cài đặt lại một phiên bản duy nhất:

pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof

Giải quyết các vấn đề về đặc quyền

Khi chạy hoạt động lập hồ sơ bằng CUDA® Toolkit trong môi trường Docker hoặc trên Linux, bạn có thể gặp phải các vấn đề liên quan đến đặc quyền CUPTI không đủ (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Hãy truy cập vào NVIDIA Developer Docs (Tài liệu dành cho nhà phát triển của NVIDIA) để tìm hiểu thêm về cách giải quyết các vấn đề này trên Linux.

Để giải quyết các vấn đề về đặc quyền CUPTI trong môi trường Docker, hãy chạy

docker run option '--privileged=true'