4

Từ danh sách ứng viên đến đồ thị tính toán tensor hóa

AI999第4课:现代计算底座与张量化并行演化
00:00

Trong tính toán tiến hóa,tính đa dạnglà tiền đề cho tính hiệu quả của thuật toán: chỉ khi duy trì đủ số lượng ứng viên, áp lực chọn lọc mới không đẩy quần thể vào cực trị địa phương quá sớm. Nhưng tính đa dạng đồng thời kéo theo khối lượng tính toán khổng lồ — một lần chạy thường cần đánh giá hàng chục nghìn, thậm chí hàng triệu ứng viên. Khi các ứng viên được viết dưới dạng mảng đối tượng thông thường, dùng vòng lặp từng phần tử để lần lượt đưa đi đánh giá, phần lớn thời gian tính toán bị tiêu tốn vào việc điều phối từng phần tử và luồng điều khiển của ngôn ngữ chủ, chứ không phải vào phép toán số thực sự. Đây chính lànguyên nhân gốc rễ khiến vòng lặp CPU tuần tự truyền thống kém hiệu quả khi xử lý hàng chục nghìn lượt đánh giá ứng viên.

Từ danh sách ứng viên đến đồ thị tính toán tensor hóaBước nhảy về cách biểu diễnDanh sách ứng viên (xử lý từng phần tử)Mỗi ứng viên là một đối tượng độc lập1Ứng viên x₁2Ứng viên x₂3Ứng viên x₃4Ứng viên x₄Từng ứng viên · vòng lặp CPU tuần tựKém hiệu quả khi đánh giá hàng chục nghìn lầnChi phí nằm ở điều phối từng phần tử và luồng điều khiểnTensor ứng viênGhi toàn bộ thế hệ ứng viên cùng lúc[kích thước quần thể, số chiều lời giải]Một hàng = một lời giải ứng viênĐồ thị tính toán: phép toán tensor hóaChọn lọc và cập nhật trạng thái đi vào đồ thị, được tối ưu biên dịchĐột biếnTác động lên toàn quần thểĐánh giáMột lần được cả thế hệChọn lọcChỉ mục tensorCập nhật trạng tháiNút rút gọnToàn đồ thị được tối ưu biên dịch: hợp nhất toán tử · điều phối song songKích thước đầu ra đánh giá: [kích thước quần thể] hoặc [kích thước quần thể, số mục tiêu]Toàn bộ tính toán: đột biến, đánh giá, chọn lọc, cập nhật trạng thái cùng đi vào đồ thị tính toán trong một lần

Bước nhảy về cách biểu diễn: từ danh sách ứng viên đến đồ thị tính toán tensor hóa

Thay đổi mà EvoX mang lại không phải là tăng tốc cục bộ một toán tử nào đó, mà làsự thay đổi trong cách biểu diễn quá trình tiến hóa: chuyển từ xử lý dạng danh sách từng ứng viên sang tính toán theo lô với tensor là công dân hạng nhất. Tập hợp ứng viên không còn nằm rải rác trong mảng đối tượng, mà cùng với kết quả đánh giá và trạng thái thuật toán được tổ chức thống nhất thành tensor, cho phép chúng tham gia tính toán một cách tổng thể.

  • Tensor ứng viên: viết toàn bộ thế hệ ứng viên thành tensor có kích thước [kích thước quần thể, số chiều lời giải]. Lúc này "một ứng viên" chỉ là một hàng trong tensor, không còn là một đối tượng độc lập của ngôn ngữ chủ.
  • Toán tử theo lô: các thao tác như đột biến tác động trực tiếp lên toàn bộ quần thể, một lần gọi là hoàn tất cập nhật cho tất cả ứng viên, thay vì gọi vòng lặp N lần.
  • Đánh giá theo lô: với dạng evaluate(tensor ứng viên) có được kết quả đánh giá của cả thế hệ trong một lần, đơn vị đo số lượng đánh giá chuyển từ "cái" sang "lô".
  • Đồ thị tính toán: chọn lọc và cập nhật trạng thái không còn chỉ là logic điều khiển tuần tự, mà là các nút trong đồ thị, nhờ đó có được cơ hội tối ưu biên dịch như hợp nhất toán tử, điều phối song song.

Đối chiếu hai cách viết

Cách viết dạng danh sách gần như là: lấy từng ứng viên ra, đánh giá từng cái, so sánh từng cái và cập nhật trạng thái — mỗi bước đều phụ thuộc vào vòng lặp của ngôn ngữ chủ, khó tối ưu tổng thể. Cách viết tensor hóa thì là: tensor ứng viên → đột biến → đánh giá → chọn lọc → cập nhật trạng thái, toàn bộ chuỗi được tạo thành từ các phép toán tensor và biểu diễn thành một đồ thị tính toán, trình biên dịch có thể hợp nhất và điều phối thiết bị trên toàn đồ thị. Lưu ý: logic của thuật toán (phân phối đột biến, áp lực chọn lọc) không bị viết lại, thứ bị viết lại làcách biểu diễn.

Thuật ngữ cốt lõi
Tính toán tensor hóa — lấy tensor làm đơn vị xử lý nhỏ nhất, để đột biến, đánh giá, chọn lọc, cập nhật trạng thái đều tác động lên toàn quần thể dưới dạng theo lô, và cho phép các phép toán theo lô này đi vào đồ thị tính toán để nhận tối ưu biên dịch. Bước nhảy then chốt của trang này có thể ghi nhớ bằng một câu: từ "danh sách ứng viên" đến "đồ thị tính toán tensor hóa".