Chạy inference hàng loạt trên GPU giá rẻ là bài toán khác hẳn với phục vụ người dùng trực tiếp. Khi bạn tạo embedding cho một triệu văn bản, gắn nhãn cho cả kho ảnh sản phẩm, hay chuyển một năm ghi âm tổng đài thành văn bản, không ai ngồi chờ từng kết quả. Khoảng cách tới người dùng hết còn ý nghĩa, và con số duy nhất đáng quan tâm là chi phí cho mỗi mục hoàn thành. Điều đó cho phép bạn tìm ở mọi quốc gia, chọn mức giá thấp nhất phù hợp và thiết kế công việc xoay quanh nó. Bài này hướng dẫn cách làm.
Sự đánh đổi gốc, gần người dùng hay rẻ nhất, được phân tích trong bài GPU gần người dùng hay GPU rẻ nhất.
Việc nào phù hợp
Một công việc hợp với cách làm "không quan tâm vị trí" khi:
- dữ liệu đầu vào tải lên được theo lô, kết quả tải về được theo lô;
- không ai chờ từng kết quả riêng lẻ;
- công việc chia được thành nhiều phần (shard) và chạy tiếp được khi gián đoạn;
- chính sách dữ liệu cho phép xử lý ở bất kỳ nước nào (nếu không, hãy lọc đúng các nước được phép rồi áp dụng phần còn lại của bài trong phạm vi đó).
Ví dụ điển hình: tạo embedding cho tìm kiếm, gắn nhãn hoặc viết mô tả cho ảnh sản phẩm, chuyển giọng nói thành văn bản, dịch tài liệu, phân loại phiếu hỗ trợ khách hàng, chấm điểm dữ liệu bằng mô hình. Riêng việc chuyển giọng nói, xem bài chuyển giọng nói tiếng Việt thành văn bản bằng Whisper trên GPU.
Inference hàng loạt trên GPU giá rẻ: tối ưu chi phí mỗi mục
Với việc chạy hàng loạt, giá theo giờ thấp hơn chưa chắc rẻ hơn. Card nhanh hơn với giá cao hơn có thể xong sớm và tổng chi phí thấp hơn. Hãy tính:
chi phí mỗi mục = (số phút GPU x giá mỗi phút đã khóa
+ tiền lưu trữ trong thời gian chạy
+ số GB tải xuống và tải lên x giá băng thông)
/ số mục đã xử lý
Mọi thành phần bên phải đều nhìn thấy được trước hoặc trong khi chạy. Giá hiển thị lúc triển khai được khóa cho instance đó, tiền tính theo phút, và mỗi máy ghi rõ giá lưu trữ theo GB mỗi tháng và giá băng thông theo TB. Bài ước tính chi phí thuê GPU giải thích từng thành phần.
Bước 1: đo tốc độ trên một mẫu
Trước khi thuê cho toàn bộ công việc, hãy chạy một mẫu đại diện, ví dụ vài nghìn mục, trên từng card ứng viên. Ghi lại số mục mỗi phút với batch size và độ chính xác thật.
Các ứng viên thường gặp cho inference hàng loạt:
| Card | Bộ nhớ | Lý do cân nhắc |
|---|---|---|
| RTX 3090 | 24 GB | Thừa bộ nhớ cho mô hình embedding, mô hình gắn nhãn ảnh và mô hình giọng nói, giá theo giờ vừa phải |
| RTX 4090 | 24 GB | Cùng bộ nhớ, kiến trúc mới hơn; có thể xong sớm đủ để thắng về chi phí mỗi mục |
| A100 PCIe | Bản 40 GB trên danh sách | Batch lớn hơn hoặc mô hình lớn hơn; card datacenter, cần cấp tài khoản cao hơn |
Đừng tin benchmark chung chung cho việc này. Mô hình, batch size và độ dài đầu vào của bạn mới quyết định kết quả. Tính tiền theo phút khiến việc chạy mẫu trên ba loại card rất rẻ.
Bước 2: tìm ở mọi nước, sắp theo giá
Mở trang triển khai RTX 3090 và để trống ô Country. GPU của Cloudj đến từ danh sách máy chủ độc lập ở nhiều quốc gia, và kết quả được sắp theo tổng giá từ thấp đến cao, tối đa 50 máy. Với việc chạy hàng loạt, danh sách đã sắp sẵn này chính là thứ bạn cần.
Sau đó kiểm tra ba thông tin ở các máy đứng đầu:
- Max duration và "available until": toàn bộ công việc, cộng thời gian tải kết quả về, phải xong trước khi instance và ổ đĩa bị xóa.
- Giá băng thông theo TB: xem bước 3.
- Tốc độ tải xuống: đường truyền chậm khiến việc kéo mô hình và tải dữ liệu lên lâu hơn, trong khi GPU ngồi không.
Nếu chính sách giới hạn quốc gia, hãy nhập đúng các mã đó. Nếu card bạn muốn không có, hãy xem card tiếp theo trong bảng tính chi phí mỗi mục; tình trạng máy thay đổi trong ngày.
Bước 3: để mắt tới giá băng thông
Băng thông là khoản hay bị quên. Nó tính theo GB tải xuống và tải lên với giá riêng của từng máy, và giá này khác nhau giữa các máy. Một công việc phải tải lên nhiều file ghi âm hay tải về hàng triệu vector embedding có thể tốn một phần đáng kể ngân sách cho việc truyền dữ liệu.
- Dùng bộ lọc giá băng thông tối đa theo TB cho cả tải xuống và tải lên khi công việc chuyển nhiều dữ liệu.
- Nén đầu vào và đầu ra (
zstd,gzip, hoặc định dạng gọn như Parquet cho embedding). - Kéo mô hình thẳng từ nguồn chính thức xuống instance thay vì tự tải lên.
- Chỉ tải về kết quả cuối, đừng tải file trung gian.
Bước 4: chia nhỏ, đánh dấu, chạy tiếp
Mỗi máy là máy chủ độc lập không có SLA phần cứng. Nếu máy chủ mất kết nối, việc tính tiền tạm dừng nhưng instance không được chuyển đi. Hãy thiết kế để mất một máy chỉ tốn vài phút chứ không mất cả công việc:
- Chia dữ liệu đầu vào thành các shard có đánh số.
- Ghi kết quả của mỗi shard ra file riêng, rồi đánh dấu đã xong.
- Khi khởi động, bỏ qua các shard đã đánh dấu xong.
- Định kỳ chép kết quả đã xong ra khỏi instance (lệnh ở bên dưới).
rsync -avP -e "ssh -p <port>" root@<host>:/workspace/out/ ./out/
Khi đã có cơ chế này, bạn còn có thể chia một công việc lớn ra nhiều máy rẻ ở các nước khác nhau rồi gộp kết quả.
Bước 5: xóa máy ngay khi xong
Khi shard cuối đã tải về và kiểm tra xong, hãy xóa instance. Dừng máy vẫn tính tiền lưu trữ, và một máy chạy hàng loạt đã xong việc không có lý do gì để giữ lại. Khoản cọc giữ lúc triển khai sẽ được trả lại sau khi xóa, có khi sau tối đa 72 giờ trong lúc chờ chốt phí băng thông. Bạn ở Việt Nam nạp số dư bằng chuyển khoản ngân hàng bằng VND.
Cách nghĩ này cũng áp dụng cho việc huấn luyện không cần ở gần người dùng; bài train LoRA trên GPU tại Mỹ là một ví dụ.
Câu hỏi thường gặp
Có nên luôn chọn máy rẻ nhất không?
Hãy chọn chi phí mỗi mục thấp nhất, không phải giá theo giờ thấp nhất. Kiểm tra thời hạn, giá băng thông và tốc độ tải xuống có phù hợp không.
Quốc gia của GPU có ảnh hưởng kết quả không?
Không. Nó chỉ ảnh hưởng thời gian truyền dữ liệu và, nếu có, chính sách dữ liệu của bạn.
Máy biến mất giữa chừng thì sao?
Nếu kết quả được chia shard và chép ra ngoài định kỳ, bạn triển khai máy khác và chạy tiếp từ shard chưa xong.
Giá băng thông có giống nhau trên mọi máy không?
Không. Mỗi máy ghi giá tải xuống và tải lên theo TB riêng.
Tính giá cho công việc của bạn
Mở trang triển khai RTX 3090, để trống ô quốc gia và so các máy đứng đầu với bảng tính chi phí mỗi mục. Giá "từ" theo thời gian thực của mọi mẫu có trên GPU cloud.