Để 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 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à dựa trên API bắt đầu/dừng dấu vết 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 thấy có 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 khối lượng công việc 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-3 sẽ là session1 và lần ghi lại thứ hai từ bước 8-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.
Ảnh chụp nhanh liên tục về việc lập hồ sơ
Ảnh chụp nhanh phân tích tài nguyên liên tục được dùng để ghi lại một hồ sơ kết thúc tại một thời điểm cụ thể bất kỳ, không giống như phân tích tài nguyên theo yêu cầu, nơi bạn ghi lại hồ sơ trong một khoảng thời gian sau đó. Điều này hữu ích cho các tác vụ chạy trong thời gian dài mà bạn muốn ghi lại một hồ sơ ngay khi vấn đề được chẩn đoán.
Để bật các ảnh chụp nhanh liên tục về việc lập hồ sơ, bạ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 khối lượng công việc ML của bạn. Máy chủ này sẽ theo dõi trình kích hoạt lập hồ sơ nhanh để bắt đầu ghi lại hồ sơ.
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, có thể 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ư 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 của máy chủ lưu trữ, hãy kiểm tra nhật ký và/hoặc đầu ra của chương trình để 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ử nhấn vào locate libcupti.so để tìm đường đi.) 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 (xin 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, tensorboard và tb-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 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 những 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'