Gỡ lỗi sự cố X10

Phần phụ trợ của bộ tăng tốc X10 có thể cung cấp thông lượng cao hơn đáng kể cho tính toán song song dựa trên biểu đồ, nhưng việc theo dõi bị trì hoãn và biên dịch đúng lúc đôi khi có thể dẫn đến hành vi không rõ ràng. Điều này có thể bao gồm việc thường xuyên biên dịch lại các dấu vết do thay đổi hình dạng biểu đồ hoặc tensor hoặc các biểu đồ lớn dẫn đến các vấn đề về bộ nhớ trong quá trình biên dịch.

Một cách để chẩn đoán sự cố là sử dụng số liệu thực thi và bộ đếm do X10 cung cấp. Điều đầu tiên cần kiểm tra khi mô hình chạy chậm là tạo báo cáo số liệu.

Số liệu

Để in báo cáo số liệu, hãy thêm lệnh gọi PrintX10Metrics() vào chương trình của bạn:

import TensorFlow

...
PrintX10Metrics()
...

Điều này sẽ ghi lại các số liệu và bộ đếm khác nhau ở cấp độ INFO .

Hiểu báo cáo số liệu

Báo cáo bao gồm những nội dung như:

  • Số lần chúng tôi kích hoạt quá trình biên dịch XLA và tổng thời gian dành cho việc biên dịch.
  • Chúng tôi khởi chạy tính toán XLA bao nhiêu lần và tổng thời gian thực hiện.
  • Chúng tôi tạo/hủy bao nhiêu dữ liệu thiết bị xử lý, v.v.

Thông tin này được báo cáo dưới dạng phần trăm của các mẫu. Một ví dụ là:

Metric: CompileTime
  TotalSamples: 202
  Counter: 06m09s401ms746.001us
  ValueRate: 778ms572.062us / second
  Rate: 0.425201 / second
  Percentiles: 1%=001ms32.778us; 5%=001ms61.283us; 10%=001ms79.236us; 20%=001ms110.973us; 50%=001ms228.773us; 80%=001ms339.183us; 90%=001ms434.305us; 95%=002ms921.063us; 99%=21s102ms853.173us

Chúng tôi cũng cung cấp bộ đếm, là các biến số nguyên được đặt tên để theo dõi trạng thái phần mềm nội bộ. Ví dụ:

Counter: CachedSyncTensors
  Value: 395

Những cảnh báo đã biết

Tensor được hỗ trợ bởi X10 hoạt động về mặt ngữ nghĩa giống như chế độ háo hức mặc định của Tensor . Tuy nhiên, có một số cảnh báo về hiệu suất và tính đầy đủ:

  1. Hiệu suất bị suy giảm do biên dịch lại quá nhiều.

    Việc biên dịch XLA rất tốn kém. X10 tự động biên dịch lại biểu đồ mỗi khi gặp hình dạng mới mà không cần sự can thiệp của người dùng. Các mô hình cần nhìn thấy các hình dạng ổn định trong một vài bước huấn luyện và từ thời điểm đó không cần biên dịch lại. Ngoài ra, các đường dẫn thực thi phải ổn định nhanh chóng vì lý do tương tự: X10 biên dịch lại khi gặp một đường dẫn thực thi mới. Tóm lại, để tránh biên dịch lại:

    • Tránh các hình dạng năng động có tính thay đổi cao. Tuy nhiên, số lượng ít các hình dạng khác nhau có thể ổn. Pad tensor đến kích thước cố định khi có thể.
    • Tránh các vòng lặp có số lần lặp khác nhau giữa các bước huấn luyện. X10 hiện hủy cuộn vòng, do đó số lần lặp vòng lặp khác nhau sẽ chuyển thành các đường dẫn thực thi (không được kiểm soát) khác nhau.
  2. Một số ít thao tác chưa được X10 hỗ trợ.

    Hiện tại, chúng tôi có một số thao tác không được hỗ trợ, vì không có cách nào tốt để biểu diễn chúng thông qua XLA và các hình dạng tĩnh (hiện chỉ là nonZeroIndices ) hoặc thiếu các trường hợp sử dụng đã biết (một số phép toán đại số tuyến tính và khởi tạo đa thức) . Mặc dù danh mục thứ hai dễ dàng giải quyết khi cần, nhưng danh mục đầu tiên chỉ có thể được giải quyết thông qua khả năng tương tác với CPU, việc triển khai không phải XLA. Việc sử dụng khả năng tương tác quá thường xuyên có tác động đáng kể đến hiệu suất do các chuyến đi khứ hồi của máy chủ và phân mảnh một mô hình hợp nhất hoàn toàn thành nhiều dấu vết. Do đó, người dùng nên tránh sử dụng các thao tác như vậy trong mô hình của mình.

    Trên Linux, sử dụng XLA_SAVE_TENSORS_FILE (được nêu trong phần tiếp theo) để lấy dấu vết ngăn xếp Swift được gọi là thao tác không được hỗ trợ. Tên hàm có thể được giải mã thủ công bằng cách sử dụng swift-demangle .

Thu thập và vẽ đồ thị dấu vết

Nếu bạn nghi ngờ có vấn đề với cách theo dõi biểu đồ hoặc muốn hiểu quá trình theo dõi, các công cụ được cung cấp để đăng xuất và trực quan hóa dấu vết. Bạn có thể yêu cầu X10 đăng xuất các dấu vết mà nó tìm thấy bằng cách đặt biến môi trường XLA_SAVE_TENSORS_FILE :

export XLA_SAVE_TENSORS_FILE=/home/person/TraceLog.txt

Các nhật ký theo dõi này có ba định dạng: text , hlodot , với định dạng có thể cài đặt thông qua biến môi trường XLA_SAVE_TENSORS_FMT:

export XLA_SAVE_TENSORS_FMT=text

Khi bạn chạy ứng dụng của mình, phần trình bày text được đăng xuất sẽ hiển thị từng dấu vết riêng lẻ trong ký hiệu văn bản cấp cao được X10 sử dụng. Biểu diễn hlo hiển thị biểu diễn trung gian được chuyển tới trình biên dịch XLA. Bạn có thể muốn hạn chế số lần lặp trong vòng huấn luyện hoặc vòng tính toán của mình để ngăn những nhật ký này trở nên quá lớn. Ngoài ra, mỗi lần chạy ứng dụng của bạn sẽ gắn vào tệp này, vì vậy bạn có thể muốn xóa nó giữa các lần chạy.

Đặt biến XLA_LOG_GRAPH_CHANGES thành 1 cũng sẽ cho biết trong nhật ký theo dõi nơi đã xảy ra các thay đổi trong biểu đồ. Điều này cực kỳ hữu ích trong việc tìm kiếm những nơi có thể biên dịch lại.

Để thể hiện trực quan một dấu vết, tùy chọn dot sẽ đăng xuất các biểu đồ tương thích với Graphviz. Nếu bạn trích xuất phần dấu vết trông giống như

digraph G {
    ...
}

vào tệp riêng của nó, Graphviz (giả sử nó đã được cài đặt) có thể tạo sơ đồ trực quan thông qua

dot -Tpng trace.dot -o trace.png

Lưu ý rằng việc đặt biến môi trường XLA_SAVE_TENSORS_FILE , đặc biệt khi được sử dụng kết hợp với XLA_LOG_GRAPH_CHANGES sẽ có tác động tiêu cực đáng kể đến hiệu suất. Chỉ sử dụng những thứ này khi gỡ lỗi và không sử dụng cho hoạt động thường xuyên.

Các biến môi trường bổ sung

Các biến môi trường bổ sung để gỡ lỗi bao gồm:

  • XLA_USE_BF16 : Nếu được đặt thành 1, sẽ chuyển đổi tất cả các giá trị Float thành BF16. Chỉ nên sử dụng để gỡ lỗi vì chúng tôi cung cấp độ chính xác hỗn hợp tự động.

  • XLA_USE_32BIT_LONG : Nếu được đặt thành 1, ánh xạ loại S4TF Long thành loại số nguyên XLA 32 bit. Trên TPU, tính toán số nguyên 64 bit rất tốn kém, vì vậy việc đặt cờ này có thể hữu ích. Tất nhiên, người dùng cần chắc chắn rằng các giá trị vẫn vừa với số nguyên 32 bit.