Mã lỗi: E0200

Danh mục: Thời gian chạy: Lõi dừng đột ngột

Lỗi này cho biết một lõi TPU đã ngừng thực thi các chỉ dẫn quá sớm. Đây là trạng thái lỗi nghiêm trọng, trong đó phần cứng buộc phải dừng do lỗi không thể khắc phục, vi phạm các ràng buộc về phần cứng hoặc gián đoạn có chủ ý do các câu lệnh khẳng định thời gian chạy do trình biên dịch tạo ra kích hoạt.

Thông báo lỗi mẫu:

INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 ...

XLA backends: TPU

Tổng quan

XLA biên dịch các chương trình JAX thành một chuỗi các chỉ dẫn hợp ngữ cấp thấp. Trong thời gian chạy, thiết bị TPU sẽ thực thi các chỉ dẫn này theo trình tự. Lỗi "Core Halted Unexpectedly" (Lõi dừng đột ngột) xảy ra khi phần cứng TPU gặp phải một điều kiện không thể khôi phục khiến quá trình thực thi tiếp theo không thể diễn ra, buộc lõi chuyển sang trạng thái "HALTED" (DỪNG) nghiêm trọng.

Vì lỗi này có thể bắt nguồn từ lỗi phần cứng thực tế, lỗi trình biên dịch hoặc vấn đề về mã người dùng (đặc biệt là trong các nhân tuỳ chỉnh), nên bạn phải phân tích cẩn thận các thông báo nhật ký để xác định nguyên nhân cụ thể.

Gỡ lỗi

Để giải quyết lỗi này, trước tiên, bạn phải xác định xem trường hợp cụ thể nào trong số 3 trường hợp đã gây ra tình trạng dừng đột ngột. Kiểm tra nhật ký để tìm các chữ ký văn bản cụ thể được mô tả bên dưới.

Trường hợp 1: Cơ sở hạ tầng bị lỗi (phần cứng/mạng/nguồn điện)

Chữ ký: Nhật ký nêu rõ observed errors are: [Hardware] hoặc observed errors are: [Network] hoặc observed errors are: [Power].

Điều này cho thấy cơ sở hạ tầng vật lý gặp sự cố không liên quan đến phần mềm hoặc logic mô hình của bạn. Chip TPU, cấu trúc liên kết mạng kết nối các chip hoặc nguồn điện đã bị lỗi.

  • Thử lại lệnh: Nếu vấn đề là do điện áp giảm tạm thời hoặc mạng không ổn định, thì bạn chỉ cần thử lại là có thể khắc phục được.
  • Xác định và loại bỏ các nút không hoạt động: Nếu lỗi vẫn tiếp diễn trên cùng một tác vụ hoặc máy chủ cụ thể, thì có thể phần cứng bị lỗi. Sử dụng các công cụ quản lý cụm để "xả"/"cách ly" nút bị ảnh hưởng và khởi động lại công việc trên các nút hoạt động bình thường.

Trường hợp 2: Vi phạm các hạn chế về phần cứng

Chữ ký: Trạng thái nhật ký observed errors are: [User].

Điều này cho biết trình biên dịch XLA đã tạo ra một chỉ dẫn vi phạm một ràng buộc phần cứng không thể vi phạm (ví dụ: một chỉ dẫn cố gắng truy cập vào một địa chỉ bộ nhớ ngoài giới hạn trên bộ nhớ HBM hoặc Scratchpad). Mặc dù được gắn nhãn là "Người dùng", nhưng lỗi này hiếm khi do mã người dùng cấp cao gây ra.

  • Báo cáo lỗi XLA: Đây có thể là một lỗi trình biên dịch, trình biên dịch không bao giờ được phát ra các chỉ dẫn vi phạm thông số kỹ thuật phần cứng. Vui lòng gửi báo cáo lỗi.

Tình huống 3: Lỗi khẳng định do trình biên dịch XLA tạo

Chữ ký: Thông báo lỗi chứa thông tin cụ thể về câu khẳng định do trình biên dịch tạo đang gặp lỗi. Hãy tìm các từ khoá sau:

  • BoundsCheck, scheckne, scheckeq, schecklt, scheckge, scheckbetween

Điều này cho biết một câu khẳng định do trình biên dịch tạo trong chương trình đã biên dịch không thành công trong quá trình thực thi. Phân tích thông báo lỗi cụ thể để xác định loại phụ.

Trường hợp 3.A: Nhóm ra mắt không khớp

Thông báo lỗi mẫu:

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 (from TensorCoreSequencer:1:0x309): scheckne: An unexpected leader shows up in the launch group with a different launch id than the current group leader.

Nguyên nhân: Lỗi này thường xảy ra trong môi trường TPU có nhiều máy chủ. Điều này cho biết các lõi TPU (dự kiến sẽ thực thi cùng một chương trình theo cách đồng bộ hoá (trong "nhóm khởi động")) đã bị mất đồng bộ hoá. Cụ thể, một lõi TPU đã tham gia vào một nhóm đồng bộ hoá có mã nhận dạng chương trình khác với trưởng nhóm hiện tại, cho thấy các chương trình không nhất quán trên các máy chủ.

  • Xác minh cờ XLA: Đảm bảo tất cả các máy chủ lưu trữ đều sử dụng chính xác cùng một XLA_FLAGS.
  • Kiểm tra các chương trình JAX nhất quán: Kiểm tra để đảm bảo tất cả các máy chủ đang thực thi các chương trình JAX giống hệt nhau. Xác minh hình ảnh Docker, phiên bản libtpu, v.v.

Tình huống 3.B: Lỗi kiểm tra ranh giới

Thông báo lỗi mẫu:

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:23:0x292 (from TensorCoreSequencer:23:0xd74a): BoundsCheck 92 [deref of %s931] for %937 = dma.hbm_to_vmem [thread:$0]  /*hbm=*/%s931, /*size_in_granules=*/16384, /*vmem=*/%s935, /*dst_syncflagno=*/%s860, /*src_stride=*/512, /*dst_stride=*/128, /*steps_per_stride=*/8

Nguyên nhân: Chương trình đã cố gắng truy cập vào bộ nhớ bên ngoài các giới hạn được phân bổ. Thông báo lỗi thường bao gồm thông tin chi tiết về loại truy cập bộ nhớ (ví dụ: dma.hbm_to_vmem) và cách tính địa chỉ.

  • Gỡ lỗi các nhân tuỳ chỉnh: Nếu bạn đang sử dụng Pallas, hãy kiểm tra các phép tính chỉ mục. Sử dụng pl.debug_print hoặc checkify để xác thực chỉ mục tensor.
  • Kiểm tra phân đoạn: Đảm bảo chú thích phân đoạn nhất quán với hình dạng của tensor.

Tình huống 3.C: Đồng bộ hoá Mosaic/Pallas

Thông báo lỗi mẫu:

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:21:0xae5 (from TensorCoreSequencer:21:0x54c5): Semaphore (scratch argument 1) has a nonzero value upon exit from a Mosaic kernel. Make sure every DMA is awaited, and every semaphore signal is paired with a wait.

Nguyên nhân: Lỗi này dành riêng cho mã do trình biên dịch Mosaic tạo (được Pallas JAX dùng). Điều này cho biết có vấn đề về việc đồng bộ hoá trong một nhân tuỳ chỉnh. TPU sử dụng các semaphore để quản lý các phần phụ thuộc (ví dụ: đảm bảo DMA hoàn tất trước khi sử dụng). Lỗi này cho thấy một tín hiệu trên một semaphore không được chờ đúng cách.

  • Kiểm tra quá trình đồng bộ hoá: Đảm bảo rằng mọi dma_start đều có dma_wait tương ứng.
  • Kiểm tra semaphore: Xác minh rằng các tín hiệu và lệnh chờ semaphore được ghép nối chặt chẽ.

Vấn đề chưa được phân loại

Nếu nhật ký lỗi của bạn không khớp với Trường hợp 1, 2 hoặc 3 (tức là không có "observed errors", không có thẻ "scheck" và không có thông báo cụ thể về ranh giới/semaphore):