Đây có thể là khoảnh khắc AMD đã chờ đợi rất lâu.
Gần đây, Wafer AI đã triển khai trên AMD MI355X Kimi K3. Kết quả là, mô hình trước đây cần 16 card NVIDIA B200 chạy trên hai máy chủ giờ có thể được triển khai trên một máy chủ AMD với 8 card MI355X.

Quan trọng hơn, nó không chỉ đơn thuần là nhét mô hình vào.
Trong bài kiểm tra với đầu vào 1024 Token và đầu ra 400 Token, MI355X đạt tổng thông lượng 952 Token/giây, tốc độ tạo nội dung cho một người dùng đạt 118 Token/giây.
Theo tính toán trên một nút, throughput của nó khoảng 3,8 lần so với giải pháp 16 card B200, đồng thời hiệu quả chi phí cũng vượt trội hơn B200 và B300.
Điều khiến người ta bất ngờ nhất là ROCm lần này lại không hề gây nhiều rắc rối.
Mô hình quá lớn, bộ nhớ đồ họa bắt đầu quan trọng hơn sức mạnh tính toán
Kimi K3 có 2,8 nghìn tỷ tham số, chỉ riêng trọng số mô hình đã cần hơn 1,5 TB bộ nhớ GPU, chưa tính đến KV Cache cần thiết cho ngữ cảnh hàng triệu Token.
Một máy chủ 8 card B200, mỗi card có 192 GB bộ nhớ GPU, tổng dung lượng khoảng 1,5 TB. Điều đó có nghĩa là ngay cả trọng số mô hình cũng khó có thể chứa đầy đủ, huống chi là dành không gian cho KV Cache. Do đó, B200 buộc phải sử dụng hai máy chủ với 16 GPU.
Mỗi thẻ B300 có 288 GB bộ nhớ GPU, đủ để chứa mô hình trong một nút đơn. Thật tình cờ, AMD MI355X cũng có 288 GB bộ nhớ GPU, 8 thẻ MI355X tổng cộng khoảng 2,3 TB, chỉ cần một máy chủ là đủ.
Đây không chỉ đơn thuần là việc sử dụng ít máy hơn. Sau khi mô hình chạy xuyên nút, mỗi lần tạo một Token đều có thể cần đồng bộ dữ liệu qua mạng. Ngay cả khi sử dụng mạng RoCE v2 với tốc độ khoảng 195 Gb/s, giao tiếp xuyên nút vẫn làm chậm quá trình giải mã.
MI355X nhờ vào bộ nhớ GPU lớn hơn, đã giữ toàn bộ mô hình trong một nút.

Từ kết quả cuối cùng, tổng thông lượng đỉnh của 8 MI355X đạt 952 Token/s, tốc độ tạo đầu ra trên mỗi kênh là 118 Token/s.
Để so sánh, tổng thông lượng của việc triển khai hai nút với 16 B200 là 498 Token/s, tương đương khoảng 249 Token/s mỗi nút.
Nói cách khác, thông lượng trên mỗi nút của MI355X khoảng 3,8 lần so với thông lượng trung bình trên mỗi nút của triển khai song nút B200. Về tốc độ tạo đầu ra cho một người dùng, 118 Token/s của MI355X cũng cao hơn 90 Token/s của B200.
B300 vẫn là giải pháp có hiệu năng cao nhất. Tổng thông lượng của nút với 8 card B300 đạt 1568 Token/s, tốc độ tạo đơn lẻ là 172 Token/s, tổng thông lượng khoảng 1,65 lần so với MI355X.

Nhưng giá đã thay đổi kết luận. Wafer được tính theo mức 2,5 USD mỗi card mỗi giờ cho MI355X, 4,25 USD cho B200 và 6 USD cho B300.
Với giả định giá này, MI355X có thể cung cấp khoảng 48 Token/s tốc độ xử lý đỉnh; B200 khoảng 7 Token/s; B300 khoảng 33 Token/s.
B300 nhanh hơn, nhưng MI355X có hiệu quả chi phí trên đơn vị cao hơn. Đối với các trung tâm dữ liệu cần chạy quy mô lớn các mô hình mở, điều này có thể quan trọng hơn việc chỉ cạnh tranh về hiệu năng.
Điều bất ngờ hơn là ROCm có thể sử dụng trực tiếp
Trong thời gian dài, vấn đề lớn nhất của GPU trung tâm dữ liệu của AMD thường không phải là phần cứng, mà là phần mềm.
Cùng một mô hình có thể chạy trực tiếp trên CUDA, nhưng khi chuyển sang ROCm, có thể cần thay đổi khung, bổ sung toán tử, thậm chí viết lại nhân nền tảng.
nhưng Kimi Tình hình của K3 thì khác biệt.
AMD đã cung cấp hỗ trợ đồng bộ gần như ngay từ đầu. Wafer cho biết, mô hình có thể chạy trực tiếp trên MI355X, và các công việc tiếp theo chủ yếu tập trung vào một số vấn đề tương thích và tối ưu hiệu suất.
Một trong những vấn đề xuất hiện trong giai đoạn suy luận giải mã. Kimi K3 không cung cấp tham số mô hình nháp cần thiết cho MTP hoặc EAGLE, do đó Wafer đã sử dụng một mô hình nháp khối ngoại vi.
Chương trình này có thể chạy trực tiếp trên CUDA, nhưng trong môi trường ROCm, yêu cầu thực tế đầu tiên khiến trình lập lịch báo lỗi. Nguyên nhân là do trong nhánh ROCm thiếu định nghĩa một hàm có tên top_k_renorm_prob.
Chức năng này không phức tạp: chọn ra k giá trị cao nhất từ phân phối xác suất, đặt các xác suất còn lại bằng không, sau đó chuẩn hóa lại các xác suất được giữ lại.
Wafer đã sử dụng một hàm PyTorch thông thường để hoàn thiện logic này, không cần viết kernel GPU thủ công hay thiết kế lại hệ thống giải mã suy luận.
Sau khi sửa chữa, ước tính việc giải mã đã tăng hiệu suất đơn luồng khoảng 2,2 lần, hiệu suất đơn luồng ở mức độ đồng thời trung bình tăng khoảng 1,7 lần, và tổng thông lượng đỉnh tăng khoảng 18%.

Quan trọng hơn, hệ thống có thể đạt được đỉnh throughput dưới mức độ đồng thời cao hơn.
Chữ đầu quá chậm, cuối cùng chỉ bổ sung thêm bốn số không
Tất nhiên, thông lượng không phải là tất cả đối với dịch vụ suy luận. Đối với người dùng thực tế, một chỉ số khác ảnh hưởng trực tiếp đến trải nghiệm là TTFT, tức là thời gian chờ từ khi gửi yêu cầu đến khi thấy Token đầu tiên.
Trên nhiệm vụ này, MI355X ban đầu có hiệu suất không tốt. Trước một nhiệm vụ tiền điền lạnh khoảng 172.000 Token, MI355X cần khoảng 51 giây, trong khi B300 chỉ cần khoảng 23 giây.
Trong các mô hình hỗ trợ ngữ cảnh hàng triệu token, nhiệm vụ tiền điền có thể cực kỳ lớn. Nếu khi xử lý ngữ cảnh dài, người dùng phải chờ vài chục giây hoặc lâu hơn mỗi lần, thì dù tốc độ giải mã có cao đến đâu cũng khó bù đắp được vấn đề về trải nghiệm.
Wafer cuối cùng phát hiện ra rằng sự khác biệt về hiệu năng gần như hoàn toàn đến từ một nhân chú ý. Kimi Trong cấu hình song song tensor 8 đường, mỗi GPU sẽ được phân bổ 12 đầu chú ý. Trong khi đó, nhân tiền điền MLA nhanh hơn của AMD AITER chỉ hỗ trợ các hình dạng là bội số của 4, 8 hoặc 16.
12 đầu không khớp, nên hệ thống đã quay lại triển khai Triton chung có tốc độ chậm hơn.
Giải pháp rất đơn giản: thêm bốn đầu chú ý bằng không để hoàn thành 16 đầu, gọi các nhân tốc độ cao hiện có, sau khi tính toán xong thì lấy lại 12 đầu thực sự cần thiết. Không thay đổi cấu trúc mô hình, cũng không viết nhân hợp ngữ mới, chỉ đơn giản thêm bốn số không.
Sau khi tối ưu, tốc độ tiền điền ổn định của lõi AITER MLA đạt khoảng 13.000 token/giây, trong khi đường hồi tiếp Triton trước đây chỉ khoảng 4.000–7.000 token/giây, do đó thời gian tiền điền lạnh đã được rút ngắn khoảng hai đến ba lần.
Việc tối ưu hóa này không thay đổi độ thông lượng giải mã cuối cùng, nhưng sẽ giảm đáng kể thời gian người dùng phải chờ đợi để ký tự đầu tiên xuất hiện.
Điều này cũng cho thấy, khoảng cách phần mềm giữa AMD và NVIDIA trông có vẻ lớn, đôi khi không phải do năng lực nền tảng yếu kém, mà chỉ là các lõi tốc độ cao hiện tại chưa bao phủ được một hình dạng mô hình mới nào đó.
Vẫn còn lợi thế của CUDA, nhưng đã xuất hiện những khe hở
Một lần kiểm tra tất nhiên không thể chứng minh rằng AMD đã bắt kịp NVIDIA toàn diện.
B200 do thiếu bộ nhớ video nên buộc phải chạy chéo nút; hiệu năng tuyệt đối của B300 vẫn dẫn đầu; chuỗi công cụ, hỗ trợ khung và hệ sinh thái nhà phát triển của ROCm cũng vẫn kém hơn CUDA.
Nhưng các mô hình mở đang nhanh chóng bước vào thời đại hàng nghìn tỷ tham số. Khi mô hình lớn đến mức một máy chủ không thể chứa hết, dung lượng bộ nhớ GPU không còn chỉ là con số trên bảng thông số, mà sẽ直接影响 chi phí truyền thông, độ phức tạp trong triển khai và thông lượng cuối cùng.
Chiến lược của AMD nhằm cung cấp nhiều HBM hơn cho cấu hình một card đang trở thành một lợi thế hệ thống thực tế.
Nếu AMD có thể tiếp tục cải thiện độ ổn định của ROCm, mở rộng hỗ trợ các hình dạng lõi tốc độ cao và cung cấp khả năng tương thích ngay trong ngày cho các mô hình mới, thì các trung tâm dữ liệu buộc phải xem xét nghiêm túc những GPU này. Giá thấp hơn, bộ nhớ lớn hơn, hiệu năng đủ dùng, và phần mềm không còn cần phải mất vài tháng để tối ưu.
Bạn nghĩ sao về điều này?
Liên kết tham khảo:
https://x.com/wafer_ai/status/2083628389903315406
https://x.com/ChiragAsarpota/status/2083864019870634151
Bài viết này đến từ tài khoản WeChat “Machine Heart” (ID: almosthuman2014), tác giả: Người quan tâm đến LLM
