Công cụ Trình xem dấu vết
Bạn có thể sử dụng Trình xem dấu vết để trực quan hoá tiến trình của các sự kiện xảy ra trong phiên phân tích tài nguyên. Thẻ này hiển thị thời lượng của các thao tác do mô hình thực thi trên nhiều phần của hệ thống, chẳng hạn như máy chủ (CPU) và trình tăng tốc (GPU hoặc TPU). Điều này giúp bạn hiểu cách mô hình sử dụng tài nguyên phần cứng, xác định nút thắt cổ chai về hiệu suất và tối ưu hoá mô hình để thực thi nhanh hơn. Giao diện người dùng của Trình xem dấu vết dựa trên giao diện người dùng được sử dụng trong chrome://tracing
và do đó, bạn phải sử dụng trình duyệt Chrome.
Nền tảng được hỗ trợ
TPU: được hỗ trợ
GPU: được hỗ trợ
Trình xem dấu vết cho GPU nhóm các sự kiện trên tiến trình theo mỗi khối GPU và các luồng trong đó, trong khi đối với TPU, trình xem này sắp xếp các sự kiện trên tiến trình theo mỗi khối và lõi TPU. Trong cả hai trường hợp, Trình xem dấu vết cũng trình bày các sự kiện trên tiến trình theo luồng cho CPU lưu trữ mà trình tăng tốc được kết nối.
Tương tác với Dòng thời gian
Trình xem dấu vết cung cấp một số công cụ và phương thức để điều hướng và kiểm tra tiến trình:
- Điều hướng: Bạn có thể sử dụng các phím tắt sau:
- W: Phóng to.
- S: Thu nhỏ.
- Đáp: Kéo sang trái.
- D: Kéo sang phải.
- Bộ chọn công cụ: Bạn có thể nhấp vào một công cụ trong bộ chọn công cụ hoặc sử dụng phím tắt tương ứng:
- Công cụ lựa chọn (1 hoặc !): Nhấp vào một sự kiện để chọn sự kiện đó và xem thông tin chi tiết của sự kiện đó trong ngăn Chi tiết. Chọn nhiều sự kiện thông qua tổ hợp phím ctrl+nhấp để xem thông tin tóm tắt.
- Công cụ kéo (2 hoặc @): Kéo để di chuyển dòng thời gian theo chiều ngang hoặc chiều dọc.
- Công cụ thu phóng (3 hoặc #): Kéo để thu phóng vào một khu vực cụ thể trên dòng thời gian.
- Công cụ đo thời gian (4 hoặc $): Kéo để đánh dấu một khoảng thời gian. Thời lượng của khoảng thời gian được đánh dấu sẽ hiển thị. Bạn cũng có thể sử dụng phím "m" để đánh dấu một lựa chọn và xác định tổng thời lượng của lựa chọn đó.
- Thu phóng đến các sự kiện đã chọn (f): Chọn một hoặc nhiều sự kiện rồi nhấn phím "f" để nhanh chóng thu phóng vào phần đó của dòng thời gian. Điều này rất hữu ích khi bạn muốn tập trung vào một bước đào tạo cụ thể.
Khi xử lý một số lượng lớn sự kiện theo dõi, Trình xem dấu vết sẽ hoạt động ở chế độ truyền trực tuyến. Điều này có nghĩa là ứng dụng sẽ tải dữ liệu theo yêu cầu khi bạn kéo và thu phóng trên dòng thời gian, tương tự như cách hoạt động của các ứng dụng bản đồ. Nếu thu phóng nhanh hơn tốc độ tải dữ liệu, bạn có thể thấy dữ liệu được hiển thị ở độ phân giải thấp cho đến khi dữ liệu tải xong.
Thành phần giao diện của Trình xem dấu vết
Sau đây là các thành phần chính trên giao diện người dùng trong Trình xem dấu vết:
- Trục thời gian chạy theo chiều ngang ở trên cùng, cho biết thời gian tương ứng với thời điểm bắt đầu theo dõi.
- Tiến trình được sắp xếp theo các phần và kênh, với nhãn nằm trên trục dọc bên trái. Mỗi phần đại diện cho một phần tử xử lý (ví dụ: một nút thiết bị hoặc luồng máy chủ) và có thể được mở rộng hoặc thu gọn. Trong mỗi phần là các kênh, tức là tiến trình cho các hoạt động cụ thể.
- Sự kiện là các khối hình chữ nhật có màu trên các kênh dòng thời gian, đại diện cho thời lượng của một thao tác hoặc một sự kiện siêu dữ liệu như một bước đào tạo. Màu của các sự kiện không có ý nghĩa cụ thể.
- Ngăn chi tiết hiển thị thông tin bổ sung về các sự kiện đã chọn trong ngăn tiến trình, chẳng hạn như tên, thời gian bắt đầu và thời lượng của sự kiện.
Các phần và kênh thông thường
Trình xem dấu vết cung cấp các phần và kênh sau.
- Một phần cho mỗi nút TPU, với các kênh sau:
- Mô-đun XLA: chương trình XLA đang được thực thi.
- XLA Ops (Thao tác XLA): Cho biết các thao tác XLA HLO chạy trên lõi TPU. Mỗi thao tác khung cấp cao hơn (ví dụ: JAX, Tensorflow hoặc PyTorch) được dịch thành một hoặc nhiều thao tác XLA, sau đó được biên dịch để chạy trên TPU. Khi nhấp vào một toán tử XLA, bạn có thể thấy các đường liên kết đến toán tử đó trong Trình xem biểu đồ, cùng với thông tin bổ sung về toán tử đó, chẳng hạn như thời gian bắt đầu/dừng, thời lượng và dấu vết ngăn xếp nguồn (nếu khung và trình biên dịch cung cấp).
- XLA TraceMe: Chú giải do người dùng chỉ định trong mã mô tả các đơn vị công việc logic mà họ dự định theo dõi. Bạn vẫn có thể thấy dữ liệu tại đây ngay cả khi không thêm chú thích nào; các chú thích đó thường do XLA (ví dụ: lõi rào cản) hoặc chính XProf thêm vào (ví dụ: các mục nhập theo dõi bị bỏ).
- Bước: Cho biết thời lượng của các bước huấn luyện chạy trên lõi TPU đó, nếu được chú thích thích hợp trong chương trình hoặc khung người dùng.
- Framework Ops (Thao tác khung): Hiển thị các thao tác khung (ví dụ: JAX, Tensorflow hoặc PyTorch) được thực thi trên lõi TPU, nếu được chú thích thích hợp trong chương trình hoặc khung người dùng.
- Phạm vi tên khung: Đối với mỗi thao tác khung, một hình ảnh trực quan của dấu vết ngăn xếp. Để ngắn gọn, kênh này chỉ xuất hiện cho một thiết bị.
- Mã nguồn: Đường dẫn đến mã nguồn đang được thực thi, nếu có trong hồ sơ.
- Đơn vị vô hướng: Đối với TPU, các sự kiện thực thi trên đơn vị vô hướng, được mô tả nếu có trong hồ sơ.
- Cờ đồng bộ hoá TensorCore: Cơ chế đồng bộ hoá trên TPU, được mô tả nếu có trong hồ sơ.
- Tải máy chủ xuống: Các thao tác di chuyển dữ liệu không đồng bộ giữa bộ nhớ máy chủ và bộ nhớ tăng tốc. Thông thường, các thao tác bắt đầu và dừng tương ứng sẽ xuất hiện trên dòng XLA Ops, cho biết trình tăng tốc đang được chuẩn bị để chuyển dữ liệu (ví dụ: đánh dấu vùng bộ nhớ nguồn/đích là "đang sử dụng" trong thời gian chuyển). Có thể có nhiều hàng tải xuống máy chủ nếu có nhiều thao tác tải xuống đang thực thi song song, yêu cầu trình xem dấu vết hiển thị đồng thời nhiều sự kiện.
- Một phần cho mỗi nút Sparsecore: Một số thế hệ TPU (ví dụ: TPU v5p và TPU v6e được trang bị một hoặc nhiều đơn vị SparseCore ngoài các đơn vị MXU tính toán mật độ cao; các mô-đun, toán tử và TraceMes liên kết với các lõi này sẽ xuất hiện trong phần này.
- Một phần cho mỗi nút GPU, với các kênh sau:
- Mô-đun XLA, Framework Ops (Thao tác khung), Framework Name Scope (Phạm vi tên khung), Steps (Các bước), Source code (Mã nguồn). Tất cả các phần này đều tương tự như các phần TPU.
- Một kênh cho mỗi luồng, trong đó tên luồng cũng bao gồm thông tin về các loại thao tác được thực thi trên luồng (Memcpy, Compute, v.v.).
- XLA TraceMe không được hỗ trợ cho GPU.
- Các thao tác XLA xuất hiện trong các phần GPU, nhưng hiện không phải lúc nào cũng chính xác vì chúng được lấy từ dữ liệu luồng. Do đó, các mô hình này không thể tính đến đầy đủ mô hình thực thi của GPU, trong đó có thể có ánh xạ N:M của XLA Ops đến các hạt nhân thực tế được thực thi trên các luồng khác nhau và việc lập lịch biểu động của nhiều luồng trên các SM khác nhau trong phần cứng.
- Một phần cho mỗi thành phần (ví dụ: một nhóm luồng) chạy trên CPU của máy chủ, với một kênh cho mỗi luồng, trong trường hợp nhóm luồng. Đây cũng là nơi bạn sẽ thấy các dấu vết Python nếu các dấu vết này được bật trong quá trình thu thập hồ sơ.
Xin lưu ý rằng chỉ các thao tác XLA cho TPU và dữ liệu luồng cho GPU mới được căn cứ trực tiếp vào hồ sơ đã thu thập; tất cả các dòng khác đều là "dòng phái sinh", liên quan đến thông tin "băng thông bên" không bắt buộc do trình biên dịch cung cấp, chú thích không bắt buộc của người dùng và/hoặc phương pháp phỏng đoán do XProf áp dụng. Do đó, các dòng phái sinh này có thể xuất hiện hoặc không xuất hiện trong một số hồ sơ nhất định.
Các tính năng khác
- Bạn có thể tìm tên sự kiện cụ thể bằng cách sử dụng thanh tìm kiếm "Tìm sự kiện". Hiện tại, tính năng này chỉ tìm kiếm trong khoảng thời gian hiển thị trên màn hình, thay vì toàn bộ dấu vết.
- Sự kiện luồng: Bật tuỳ chọn này bằng cách nhấp vào nút "Sự kiện luồng" trong thanh trên cùng để thêm hình ảnh trực quan, liên kết các sự kiện trong một luồng hoặc dòng với các sự kiện trong một dòng luồng khác. Ví dụ: có thể có một mũi tên được vẽ từ thao tác trên máy chủ lưu trữ để đưa vào hàng đợi hoặc khởi chạy công việc cho một trình tăng tốc, đến thao tác trên trình tăng tốc thực thi công việc đó. XProf xác định các đường liên kết này thông qua việc kết hợp các chú thích của người dùng, các phương pháp phỏng đoán tích hợp sẵn và thông tin xử lý sau khi nhận được từ các thành phần khác nhau (ví dụ: Trình điều khiển CUPTI, mã khởi chạy hạt nhân, thông tin về thời gian chạy TPU, v.v.).
- Khi nhấp vào một toán tử XLA, bạn sẽ thấy thêm thông tin trong ngăn chi tiết. Ví dụ: nó liên kết đến toán tử trong công cụ Trình xem biểu đồ. Tệp này cũng có thể cung cấp con trỏ đến mã nguồn và/hoặc dấu vết ngăn xếp Python, thao tác khung đã tạo thao tác XLA này, v.v. (nếu có trong hồ sơ). Thẻ này cũng có thể hiển thị FLOPS (số phép tính dấu phẩy động do toán tử thực thi) và số byte mà toán tử truy cập; thông tin này được thu thập tĩnh từ XLA trong quá trình biên dịch, thay vì thông tin về thời gian chạy từ hồ sơ.