Kỹ thuật
Cách chúng tôi làm AI tạo beatmap đủ nhanh để dùng tương tác
Mapset osu! mania đầy đủ trong khoảng 20 giây GPU thay vì một phút trở lên: thời gian đi đâu trong một yêu cầu ManiaGAI, và các quyết định đã cắt giảm nó.
Một công cụ tạo map mà bạn phải đợi hàng phút là một tác vụ chạy theo lô. Bạn gửi bài hát, đi làm việc khác, rồi quay lại xem nó tạo ra gì — và nếu không thích, thử một phong cách khác hay một bộ độ khó khác lại tốn thêm một lần chờ. Một công cụ trả lời trong vài giây mới là công cụ thực thụ: bạn thử, nghe, điều chỉnh rồi thử lại.
Chính khác biệt đó là lý do, với ManiaGAI phiên bản 2, chúng tôi coi độ trễ là một ràng buộc thiết kế trên toàn hệ thống thay vì thứ để tối ưu vào phút cuối. Phiên bản 1 mất một phút hoặc hơn cho một mapset. Phiên bản 2 mất khoảng 20 giây thời gian GPU cho một mapset đầy đủ với một bài hát thông thường — thường từ 13 đến 25 giây, tùy bài hát và các độ khó được yêu cầu. Dưới đây là thời gian đó được dùng vào đâu, và những quyết định đã cắt bỏ phần còn lại.
Giải phẫu một yêu cầu
- Trình duyệt của bạn
- Timing ∥ đặc trưng âm nhạc
- Planner
- Noter
- Kiểm định
- Tải xuống
Một lần chạy production được đo từ đợt ra mắt v2: một bài hát dài 2:50, 5 độ khó, trên GPU NVIDIA T4 — 12,7 giây tổng cộng.
| Giai đoạn | Thời gian |
|---|---|
| Timing + đặc trưng âm nhạc (chạy song song) | 3,8 s |
| Lên kế hoạch (mọi độ khó) | 1,0 s |
| Tạo nốt (cả 5 độ khó) | 6,1 s |
| Toàn bộ lần chạy | 12,7 s |
Thời gian tính toán GPU cho một bài hát trên hệ thống lúc ra mắt v2 (1 tháng 10 năm 2026), không tính thời gian tải lên, xếp hàng hay tải xuống.
1. Xử lý âm thanh trước khi ai đó bấm Tạo
Mọi bài hát tải lên đều phải được giải mã, chuẩn hóa âm lượng và mã hóa lại thành một định dạng thống nhất trước khi mô hình dùng được. Trên server, đó là vài giây công việc mà GPU lẽ ra phải ngồi chờ. Trong ManiaGAI, việc này diễn ra ngay trên trình duyệt của bạn, ngay khi bạn chọn file — trong lúc bạn vẫn đang chọn số phím và độ khó. Khi bạn bấm Tạo, việc này thường đã xong. Nếu chuẩn bị bài hát trên một thiết bị chậm mất hơn 20 giây, server sẽ đảm nhận thay, nên tối ưu này không bao giờ làm ai phải chờ.
2. Chạy timing và hiểu âm nhạc song song
Có hai thứ cần biết về bài hát trước khi bắt đầu lên kế hoạch: lưới timing của nó (từ mô hình mã nguồn mở Beat This cộng với phương pháp khớp lưới riêng của chúng tôi) và các đặc trưng âm nhạc (từ mô hình âm nhạc MERT). Hai thứ này không phụ thuộc vào nhau, nên không phải chờ nhau: GPU chạy Beat This và MERT trong khi phần khớp lưới chạy trên CPU cùng lúc. Trong lần chạy ở trên, toàn bộ giai đoạn hiểu âm nhạc mất 3,8 giây.
3. Tạo mọi độ khó trong một lượt
Một mapset ManiaGAI có tối đa mười độ khó. Tạo lần lượt từng độ khó sẽ nhân thời gian lên theo số độ khó. Thay vào đó, mọi độ khó được yêu cầu đều được lên kế hoạch và tạo cùng nhau, trong một lượt GPU theo lô — chúng dùng chung bài hát và cùng các đặc trưng âm nhạc, chỉ có mục tiêu là khác nhau. Đó là cách việc tạo nốt cho năm độ khó gói gọn trong 6,1 giây ở lần chạy trên.
4. Tinh chỉnh cả chart thay vì viết từng nốt
Mô hình nốt là phi tự hồi quy: nó tạo toàn bộ chart trong một số lượt tinh chỉnh cố định, thay vì từng token một từ đầu đến cuối bài — nên số bước của mô hình là cố định, bất kể chart cuối cùng có bao nhiêu nốt. (Vì sao mô hình hoạt động như vậy là một câu chuyện riêng: bài viết về Planner + Noter.)
5. Khởi động từ snapshot, không phải từ đầu
Việc tạo map chạy trên các GPU worker serverless, nghĩa là không phải lúc nào cũng có worker đang chạy khi một yêu cầu tới. Tải mô hình và khởi động mọi thứ từ con số không sẽ cộng thêm nhiều giây cho yêu cầu đầu tiên đó. Thay vào đó, worker được khôi phục từ một snapshot bộ nhớ chụp sau khi mọi thứ đã được tải và khởi động xong, nên một worker mới sẵn sàng trong khoảng một giây thay vì mất thời gian đó để tải mô hình.
6. Không chờ ở vạch đích
Các bước cuối từng tự thêm độ trễ riêng. Giờ đây file .osz để tải được đóng gói ngay khi các chart sẵn sàng, và map hoàn thành được lưu vào Chart của tôi ngay khi quá trình tạo kết thúc — kể cả khi bạn đã rời trang. Tiến trình trên công cụ tạo map báo đúng giai đoạn thực tế của mỗi lần tạo, nên việc chờ đợi không bao giờ là điều bí ẩn.
Nhanh hơn nữa, với chart y hệt
Ngày 8 tháng 10 năm 2026, chúng tôi phát hành một bản triển khai nhanh hơn của hệ thống tạo map: map giờ được tạo nhanh gấp khoảng hai lần, và các chart giống hệt nhau — cùng đầu vào, cùng đầu ra. Chúng tôi đặt ra một quy tắc cứng cho thay đổi đó: một lần tăng tốc mà làm thay đổi những gì mô hình viết ra là một thay đổi về mô hình, và phải được đánh giá như vậy. Chỉ có thời gian chờ là ngắn lại.
Tốc độ mang lại gì
Tốc độ thay đổi cách ManiaGAI được sử dụng. Nó khiến việc thử phong cách thứ hai hay một bộ độ khó khác chỉ là chuyện vài giây, khiến luồng xem trước rồi mới tải trở nên tự nhiên, và giúp duy trì được gói miễn phí. Đó cũng là lý do chúng tôi tối ưu cho toàn bộ yêu cầu — từ trình duyệt đến lúc tải xuống — thay vì chỉ cho mô hình: người chơi cảm nhận thời gian chờ, chứ không phải thời gian GPU.
Để xem các giai đoạn này nằm ở đâu trong hệ thống, hãy xem trang Công nghệ; còn để biết điều gì đã thay đổi và khi nào, hãy xem nhật ký thay đổi.