GPU cho nghiên cứu ML · Thanh toán crypto không KYC
IteraGPU
Phương pháp 02 · Chất lượng, đo lường và chi phí

GPU nào tốn ít chi phí nhất cho cùng một kết quả ML?

Trước tiên hãy so sánh những kết quả đáp ứng cùng một yêu cầu về chất lượng, sau đó mới đến ngân sách cần để đạt được chúng trong lịch trình của bạn. Thông lượng cao hơn chưa đủ: tập dữ liệu phải hoàn chỉnh, đầu ra phải chấp nhận được và bước xuất phải hoàn tất. Hồ sơ này đề xuất một giao thức suy luận, một bảng kết quả trống và một phép tính chi phí gói cước; nó không công bố bất kỳ bảng xếp hạng hiệu năng GPU nào.

01 /

Xác định điều gì được coi là một kết quả đạt yêu cầu

Hãy viết ra quyết định trước khi thử nghiệm: “Cấu hình nào xử lý toàn bộ tài liệu của tôi, đáp ứng chất lượng tối thiểu và hoàn thành trước hạn, với ngân sách cam kết thấp nhất?” Hãy xác định kịch bản: ở đây là một tập dữ liệu được xử lý ngoại tuyến. Một ứng dụng tương tác cũng sẽ cần xác định lưu lượng yêu cầu đến, mức đồng thời và độ trễ cho phép; không thể suy ra xếp hạng của nó chỉ từ phép thử này.

Hãy gọi tập dữ liệu đã kiểm định là một tập hợp đầy đủ các đầu ra vượt qua mọi kiểm tra của bạn. Một tệp được tạo ra chưa phải là một kết quả đạt yêu cầu. Hãy kiểm tra mã định danh, định dạng, độ bao phủ và một chỉ số gắn với mục đích sử dụng của bạn. Hãy ghi rõ ngưỡng và sai số cho phép so với một mốc chuẩn trước khi xem thời gian. Như vậy, hai cấu hình có thể tương đương cho quyết định mà không tạo ra các con số giống hệt nhau đến từng bit.

Sự tách biệt giữa tập dữ liệu, mục tiêu chất lượng và kịch bản này cũng tồn tại trong các nguyên tắc của MLPerf Inference. Giao thức dưới đây là phương pháp làm việc của chúng tôi, cần điều chỉnh cho dự án của bạn; nó không phải là một lần chạy thử hay một chứng nhận MLPerf.

Nguồn kỹ thuật: MLCommons — kịch bản, chỉ số và mục tiêu chất lượng

02 /

Chuẩn bị dữ liệu đầu vào, mốc chuẩn và bản kê

Bạn cần một tập dữ liệu mà bạn có quyền sử dụng, các câu trả lời mốc chuẩn hoặc một quy trình đánh giá, mã suy luận và một môi trường có khả năng chạy mô hình đã chọn. Hãy tách dữ liệu dùng để tinh chỉnh cấu hình khỏi tập dữ liệu cuối cùng dùng để so sánh. Nếu bạn điều chỉnh các ngưỡng sau khi đã xem tập dữ liệu cuối, hãy chuẩn bị một đánh giá độc lập mới để củng cố kết luận.

Hãy gán một mã định danh ổn định cho mỗi mục. Lưu lại một dấu vân tay của tập dữ liệu, thứ tự chạy, bản sửa đổi của mô hình và tokenizer, các phiên bản mã và thư viện phụ thuộc. Bản kê cũng mô tả GPU đã dùng, độ chính xác, lượng tử hóa, biên dịch, backend attention, chính sách padding và độ dài tối đa. Việc cắt ngắn khác nhau sẽ làm thay đổi khối lượng công việc cần so sánh.

Hãy ghi lại driver và backend thực sự hiện diện. Với một biến thể AMD, hãy kiểm tra tổ hợp hệ điều hành, GPU, ROCm và framework trong ma trận chính thức. Một tài liệu đã đọc hoặc tên một loại card không chứng minh rằng môi trường đó đã được cài đặt. Nếu các ngăn xếp phần mềm khác nhau giữa hai lần thử, kết luận sẽ dựa trên các cấu hình hoàn chỉnh đã kiểm thử.

Nguồn kỹ thuật: AMD — ma trận tương thích ROCm

03 /

Ví dụ: phân loại cùng 1.000 văn bản

Đây là một thí nghiệm để bạn xây dựng với dữ liệu của mình, không giả định trước kết quả hiệu năng. Bạn muốn phân loại 1.000 văn bản vào các danh mục của dự án. Hãy dành riêng 600 mục ngắn, 300 mục trung bình và 100 mục dài; xác định các ngưỡng bằng tokenizer đã chọn và giữ phân bố đại diện cho các lớp. Cách chia này là một ví dụ về giao thức, không phải một tập dữ liệu được cung cấp sẵn cũng không phải một khuyến nghị tỷ lệ phổ quát.

Hãy so sánh các batch 1, 4 và 8 với cùng mô hình, cùng độ chính xác, cùng thứ tự và cùng quy tắc padding. Biến duy nhất trong loạt so sánh đầu tiên này là batch. Loạt thứ hai có thể thay đổi độ chính xác hoặc phần cứng, trong khi vẫn giữ cố định rõ ràng các lựa chọn khác. Gom nhóm theo độ dài là một biến thể mới cần được khai báo, vì nó thay đổi cách tổ chức công việc.

Với mỗi lần chạy, hãy xuất 1.000 dự đoán kèm mã định danh của chúng. Bước kiểm tra phải tìm thấy chính xác các mã định danh mong đợi, không trùng lặp cũng không thiếu sót. Hãy giữ lại các dự đoán sai: chúng phục vụ cho việc tính chất lượng. Loại bỏ các ví dụ khó sẽ làm điểm số tăng một cách giả tạo và làm giảm tập dữ liệu thực sự được xử lý.

Hợp đồng chất lượng cần hoàn thiện trước lần đo đầu tiên
Kiểm traQuy tắc của ví dụQuyết định cần ghi nhận
Độ bao phủ1.000 mã định danh mong đợi xuất hiện đúng một lầnBất kỳ thiếu sót hay trùng lặp nào cũng làm tập dữ liệu không hợp lệ
Định dạngMột lớp được phép cho mỗi văn bản; giá trị số hữu hạn nếu được xuấtLược đồ và các lớp được phép
Chất lượng tổng thểMột chỉ số chính, ví dụ macro-F1Ngưỡng tối thiểu và mức dung sai so với tham chiếu
Các trường hợp quan trọngKiểm tra các lớp hoặc độ dài then chốt đối với dự ánCác nhóm con và tiêu chí được cố định trước
Thời hạnDự đoán đã đánh giá và tệp đã nhận trước hạnNgày, giờ và múi giờ kết thúc
04 /

Tách biệt khởi động, khởi động nóng và lượt chạy được đo

Hãy ghi riêng phần tải xuống cần thiết, cài đặt, nạp và biên dịch với phần xử lý đã ổn định. Những phần này có thể được loại khỏi đồng hồ đo của một lượt chạy trong khi vẫn chiếm một phần thời gian thuê. Hãy đặt một quy tắc khởi động nóng giống nhau cho mọi biến thể: các đầu vào được bao phủ, số lượt chạy và cách xử lý việc biên dịch lại. Đừng điều chỉnh quy tắc này sau khi đã thấy biến thể nào được hưởng lợi.

Hãy xác định các ngưỡng của thời gian chính. Với ví dụ ngoại tuyến này, hãy đo việc đọc tập dữ liệu, token hóa, truyền dữ liệu, suy luận và hiện thực hóa các dự đoán trên máy chủ. Sau đó đo riêng thời gian đánh giá và ghi các tệp bàn giao để thiết lập chiến dịch hoàn chỉnh. Một khoảng thời gian chỉ giới hạn ở tính toán GPU không thể so sánh trực tiếp với thời gian xử lý này.

Các phép toán CUDA là bất đồng bộ: đồng hồ đo trên máy chủ phải đợi các phép toán trước đó hoàn tất trước khi bắt đầu và đợi công việc được đo hoàn tất trước khi dừng. Các sự kiện CUDA phù hợp với một phạm vi GPU được xác định đúng đắn. Với một phép toán riêng lẻ, torch.utils.benchmark.Timer đảm nhận việc khởi động nóng và đồng bộ hóa. Hãy giữ nguyên các ranh giới đo lường giữa các biến thể.

Nguồn kỹ thuật: PyTorch 2.14 — thực thi CUDA bất đồng bộ · PyTorch — đo bằng torch.utils.benchmark

05 /

Lặp lại và giữ lại các thất bại

Hãy dự trù năm lượt chạy hoàn chỉnh cho mỗi biến thể trong so sánh đầu tiên này. Hãy đảo thứ tự các lượt chạy, ví dụ 1–4–8 rồi 4–8–1 rồi 8–1–4, để một biến thể không phải luôn luôn chạy trước. Hãy giữ nguyên chính sách về tiến trình, bộ nhớ đệm và khởi động nóng. Năm lượt chạy này mô tả chuỗi nhỏ của bạn; chỉ riêng chúng không chứng minh được sự ổn định trong một khoảng thời gian dài.

Một dòng trong bảng thô đại diện cho một lượt chạy đã thử, kể cả một lần dừng. Nó liên kết biến thể và corpus với các tham số, thời lượng và phán quyết chất lượng. Các trường expected_ids và observed_ids ghi lại số lượng mục; ids_match xác nhận sự bằng nhau của các tập hợp, được kiểm tra trong các tệp dự đoán được lưu riêng. corpus_accepted chứa phán quyết của lượt chạy. Ghi lại lỗi và đường dẫn của các đầu ra trong notes. Nếu thiếu một phép đo, hãy để trống ô đó và nêu lý do. Việc không có GPU không phải là một phép đo bằng không giây hay không byte.

Nếu batch 8 vượt quá bộ nhớ trên các đầu vào dài, hãy giữ lại dòng thất bại và số lượng mục đã hoàn thành. Đừng âm thầm thay thế lượt chạy này bằng một batch nhỏ hơn. Cấu hình chạy lại trở thành một biến thể riêng; thời gian và số lần thử của nó là một phần của bảng tổng kết. Một lần gián đoạn hay lỗi định dạng không bao giờ là một thành công về mặt kinh tế chỉ vì nó diễn ra nhanh.

Thông lượng của một lượt chạy hoàn chỉnh = số mục đã xử lý ÷ thời lượng của phạm vi đã khai báo. Phán quyết chất lượng vẫn là một kiểm tra riêng.
06 /

Đọc thời lượng mà không suy diễn quá mức từ năm lần thử

Trình bày năm thời lượng thô, trung vị, giá trị nhỏ nhất và lớn nhất của chúng, cùng với số lần thành công và thất bại. Trung vị mô tả tâm của các quan sát này; nó không loại bỏ các sự cố. Nếu một lượt chạy bị loại trừ vì một nguyên nhân bên ngoài đã được ghi lại, hãy giữ lại dấu vết của nó và áp dụng cùng một quy tắc loại trừ cho mọi biến thể.

Đừng trình bày một p95 tính trên năm lượt chạy như một ước lượng vững chắc cho các trường hợp chậm. Để nghiên cứu độ trễ của các yêu cầu, hãy thu thập một tập hợp thời gian riêng lẻ phù hợp cùng với kịch bản đến và mức đồng thời. Năm thời lượng corpus và độ trễ của 1.000 yêu cầu không thuộc cùng một tổng thể.

Nếu độ phân tán quan sát được tương đương với khoảng cách giữa các trung vị, thì chuỗi này chưa phân định được các lựa chọn. Hãy thêm các lần lặp lại trong một giao thức chung hoặc xem xét một nguyên nhân cụ thể: tải, dạng đầu vào, biên dịch, hoạt động đồng thời. Tránh chỉ giữ lại lượt chạy tốt nhất của mỗi card.

07 /

Kiểm tra chất lượng sau khi thay đổi độ chính xác

Để so sánh FP32, BF16 hay một phép lượng tử hóa, hãy bắt đầu lại từ cùng các đầu vào và cùng tham chiếu. Đánh giá định dạng, chỉ số chính và các nhóm con đã dự kiến. Một biến thể vượt quá ngưỡng dung sai của bạn có thể thú vị cho một mục tiêu khác; nó không gia nhập phép so sánh ở chất lượng tương đương bằng cách hạ thấp ngưỡng sau đó.

Ghi lại các hạt giống (seed) và tùy chọn tất định đã dùng. PyTorch không đảm bảo khả năng tái lập hoàn toàn giữa các phiên bản, nền tảng hay giữa thực thi CPU và GPU, ngay cả với cùng một seed. Vì vậy hãy nêu rõ bạn muốn tái lập điều gì: đầu ra giống hệt, sai số số học có giới hạn, hay chất lượng nghiệp vụ chấp nhận được. Với một giao thức ngẫu nhiên, hãy dự phòng nhiều seed chung và giữ kết quả của chúng riêng biệt.

Nguồn kỹ thuật: PyTorch 2.14 — phạm vi và giới hạn của khả năng tái lập

08 /

Dùng bộ nhớ như một tiêu chí khả thi

Một lựa chọn phải hoàn thành corpus với các đầu vào dài của nó trước khi chi phí của nó được so sánh. Ghi lại mức đỉnh bộ nhớ theo từng thiết bị và phạm vi của bộ đếm. Với PyTorch, memory_allocated theo dõi các tensor và memory_reserved theo dõi bộ nhớ do bộ cấp phát quản lý: các giá trị này không cộng lại với nhau. Các đỉnh tương ứng có thể xuất hiện ở những thời điểm khác nhau.

Notebook trong thư mục về bộ nhớ giúp phân biệt ước lượng và quan sát. Bài tập của nó không thay thế phép đo trên mô hình của bạn: hãy nạp môi trường của bạn, giữ nguyên các tham số và chạy lại khối lượng công việc của bạn. Một dung lượng được công bố theo từng card và một mức giá theo lô không cho phép suy ra thông lượng, khả năng kết nối liên kết hay việc tự động phân bổ mô hình trên nhiều GPU.

Nguồn kỹ thuật: PyTorch 2.14 — bộ đếm và bộ cấp phát bộ nhớ

09 /

Chọn thời lượng với toàn bộ lịch trình

Thời lượng cần thiết không chỉ là tổng của các kernel GPU. Hãy xây dựng một khoảng thời gian truy cập từ lúc chuẩn bị trên máy thuê đến khi thu hồi các sản phẩm bàn giao: cài đặt, kiểm tra, khởi động làm nóng, so sánh, các lần chạy lại đã dự phòng, đánh giá và xuất. Thêm các khoảng thời gian chờ mà trong đó bạn vẫn cần giữ máy thuê. Khi các tác vụ chồng lấn, hãy lập luận dựa trên lịch trình thực tế thay vì cộng hai lần thời lượng của chúng.

Ví dụ về lịch trình, không giả định về tốc độ: bạn muốn giữ quyền truy cập từ 9 giờ thứ Hai đến 9 giờ thứ Sáu, trong cùng múi giờ và không tính đổi giờ. Khung thời gian này bao trùm 96 giờ. Nó vượt quá 72 giờ của gói 3 ngày và nằm trong 168 giờ của gói 7 ngày. Điều đó không chứng minh rằng các tác vụ của bạn sẽ kết thúc đúng hạn: thời lượng của chúng vẫn cần được đo.

Máy tính cho phép bạn nhập toàn bộ khung thời gian của mình và hiển thị các gói 3, 7 và 30 ngày. Một gói bao trùm lịch trình sẽ trở thành ứng viên. Nếu chiến dịch vượt quá khoảng thời gian đã chọn, hãy sửa chương trình hoặc tính toán rõ ràng các khoảng thời gian bổ sung cần thiết; đừng giả định rằng sẽ tự động được gia hạn.

Các mốc cần ghi vào kế hoạch của bạn
BướcĐiểm kết thúc quan sát đượcThời lượng
Chuẩn bịMôi trường đã tải và bài kiểm tra tối thiểu đã thành côngCần đo hoặc lên kế hoạch
So sánhMọi lượt chạy dự kiến đều có trạng thái được ghi lạiCần đo
Đánh giá và chạy lạiMỗi đầu ra có một phán quyết, mỗi thất bại có một quyết địnhCần đo hoặc lên kế hoạch
Xuất dữ liệuTệp đã được lấy về, mở và kiểm tra tại đíchCần đo
Kỳ vọngViệc rà soát và sự sẵn sàng của đội ngũ được đưa vào lịch trìnhCần lên kế hoạch
10 /

Tính chi phí đã cam kết với các gói của chúng tôi

Ngân sách của một lần thuê là giá của gói cho một lô, nhân với số lô. Chi phí trên mỗi bộ dữ liệu đã xác thực sau đó lấy toàn bộ số tiền này chia cho số bộ dữ liệu hữu ích thực sự được chấp nhận trong phạm vi đã công bố. Nếu không có bộ dữ liệu nào được chấp nhận, tỷ lệ này là không xác định. Còn khoản chi đã cam kết thì vẫn nằm trong bảng tổng kết.

Các mức giá dưới đây lấy từ danh mục của chúng tôi, phiên bản ngày 24 tháng 9 năm 2026. Chúng minh họa quy tắc tính toán, mà không xác định GPU nào hoàn thành tác vụ của bạn nhanh nhất. Một lô B200 đã gồm hai card : nhân giá của nó thêm một lần nữa với hai sẽ tính trùng hai card này. Hai lô RTX 4090 trong 7 ngày do đó tốn 220 USD ; một lô hai B200 trong 7 ngày tốn 2 071 USD.

Một lượt chạy ngắn không biến gói thành hóa đơn tính theo giờ. Máy tính sử dụng tổng giá của gói, ngay cả khi một phần thời gian vẫn chưa được dùng. Đối với ngân sách dự án rộng hơn, hãy ghi riêng các khoản chi khác thực sự áp dụng và lý do của chúng. Đừng trộn lẫn các chi phí được đo ở một biến thể với những mục bị bỏ sót ở biến thể kia.

Chi phí đã cam kết = giá gói mỗi lô × số lô. Chi phí trên mỗi bộ dữ liệu hữu ích đã xác thực = chi phí đã cam kết ÷ số bộ dữ liệu hữu ích đã xác thực, phải là số dương.
Ví dụ giá IteraGPU theo lô, tính bằng USD — danh mục ngày 24 tháng 9 năm 2026
Cấu hình lô3 ngày7 ngày30 ngày
1 × NVIDIA GeForce RTX 4090 24 GB47,14110,00390,00
2 × NVIDIA B200 SXM, 180 GB mỗi card887,572 071,007 391,00

Nguồn kỹ thuật: IteraGPU — các gói trong danh mục

11 /

Đếm các sản phẩm hữu ích, không đếm các lần lặp lại phép đo

Năm lần lặp lại của cùng một benchmark dùng để quan sát độ phân tán. Chúng không trở thành năm bộ dữ liệu sản xuất hữu ích chỉ vì năm tệp đã được ghi. Hãy xác định các sản phẩm bàn giao mong đợi trước chiến dịch và chỉ đếm mỗi sản phẩm được chấp nhận một lần. Nếu công việc thực tế liên quan đến nhiều bộ dữ liệu, mỗi cấu hình phải xử lý cùng các bộ dữ liệu đó và áp dụng cùng một quy tắc chất lượng.

Trong máy tính, hãy để trống số bộ dữ liệu chừng nào các sản phẩm hữu ích chưa thực sự hoàn thành và được xác thực. Ô chất lượng xác nhận việc kiểm tra của chính bạn; công cụ không đọc các dự đoán hay chỉ số của bạn. Chỉ nhập số lượng thực tế đã ghi nhận. Khung thời gian của chiến dịch có thể là một giả định lập kế hoạch, nhưng dự báo năng lực không thay thế được các kết quả đã được chấp nhận.

Bảng tổng kết cuối cùng tập hợp, cho mỗi cấu hình đủ điều kiện, các phán quyết chất lượng, thời lượng thô, khung thời gian chiến dịch, gói đã cam kết và số sản phẩm bàn giao được chấp nhận. Một lựa chọn nhanh có thể hữu ích cho một hạn chót gấp mà không phải là rẻ nhất. Hai lựa chọn vừa trong cùng một lịch trình có thể được phân định bằng chi phí đã cam kết, các thất bại hoặc sự không chắc chắn còn lại.

12 /

Tải giao thức và lưu giữ một bằng chứng có thể tái sử dụng

Hồ sơ IteraGPU Lab v1 tập hợp các tài liệu hỗ trợ cho so sánh này và phép đo bộ nhớ. Hãy bắt đầu với README và giao thức chất lượng, sau đó điền các lượt chạy của bạn vào bảng thô. Các ô hiệu năng vẫn để trống trước khi thực thi; còn biểu phí là dữ liệu danh mục, tách biệt với các phép đo.

Để tính phí hai lô RTX 4090 trong 7 ngày, hãy đặt calcul_forfaits.py và tarifs-forfaits.csv trong cùng một thư mục, mở terminal trong thư mục đó và chạy lệnh bên dưới với Python 3.10 trở lên. Lệnh này hiển thị mức phí 220,00 USD cho hai GPU. Tùy chọn không bắt buộc --accepted-results nhận số nguyên corpus hữu ích riêng biệt thực sự đã hoàn thành và được xác nhận của bạn. Hãy bỏ qua tùy chọn này khi chưa có kết quả đó: lúc này script chỉ tính mức phí, mà không tự bịa ra chi phí trên mỗi kết quả.

Hãy lưu giữ cùng nhau bản kê khai, dấu vân tay đầu vào, dự đoán, phán quyết và bảng các lần thử. Ghi chú quyết định nêu rõ cấu hình được chọn, khối lượng công việc được bao phủ và lý do lựa chọn. Bạn có thể đối chiếu nó với lượt thuê của mình trong sổ IteraGPU và chạy lại chính xác câu hỏi thực nghiệm khi thay đổi mô hình hoặc phiên bản.

Giao thức ngoại tuyến này tự nó không đủ để xác nhận một dịch vụ tương tác, một quá trình huấn luyện đến hội tụ hay một bộ dữ liệu khác. Với những mục đích đó, hãy xác định lại đơn vị hữu ích và các phép kiểm tra trước khi so sánh. Các tệp được cung cấp dùng để chuẩn bị và ghi chép các lần thử của bạn; thư mục này không trình bày bất kỳ so sánh đo lường nào giữa các cấu hình trong danh mục cũng như mức tiết kiệm quan sát được.

shell
python calcul_forfaits.py --gpu rtx-4090 --days 7 --lots 2
CÔNG CỤ / GÓI DỊCH VỤ

Tính ngân sách cho chiến dịch của bạn

Chọn một cấu hình và số lô của bạn. Bảng sử dụng giá từ danh mục của chúng tôi. Sau đó nhập các giả định về thời gian của riêng bạn; không có thời gian tính toán nào được dự đoán.

Tổng cộng 1 GPU · 24 GB mỗi GPU · 1 GPU được bao gồm trong giá của mỗi lô.

Bao gồm chuẩn bị cho việc thuê, tính toán, đánh giá, các gián đoạn dự kiến và xuất dữ liệu. Một khoảng thời gian vừa với gói không đảm bảo việc xử lý thành công.

Một corpus là lô công việc hoàn chỉnh được xác định bởi giao thức của bạn. Chỉ tính các corpus hữu ích đã hoàn thành và xác thực; các lần lặp lại benchmark không tạo thành corpus hữu ích mới. Máy tính không đo lường chất lượng.

Gói NVIDIA GeForce RTX 4090 24GB · 1 lô · USD
Thời lượngTổng của góiKhoảng thời gian đã nhậpUSD / corpus đã xác thực
3 ngày · 72 giờ47,14 USDCần điềnCần đủ chất lượng và số lượng
7 ngày · 168 giờ110,00 USDCần điềnCần đủ chất lượng và số lượng
30 ngày · 720 giờ390,00 USDCần điềnCần đủ chất lượng và số lượng

Chi phí mỗi corpus = tổng gói ÷ số corpus hoàn chỉnh đã xác nhận. Gói được thanh toán toàn bộ; tỷ lệ này không phải là đơn giá theo giờ hay thanh toán theo mức sử dụng.

Nếu khoảng thời gian vượt quá 30 ngày, hãy đặt một lịch mới hoặc nhiều giai đoạn thuê và kiểm tra tình trạng còn trống của chúng. Công cụ tính không giả định tự động gia hạn hay duy trì liên tục năng lực.