−25%

cho Windows trả theo năm, đến 31/10. Xem các gói

EQVPS
Bắt đầu

Sandbox để đánh giá LLM: chạy 1.000 lời giải do mô hình viết với giá khoảng một cent

Chấm điểm một mô hình trên các bài lập trình nghĩa là phải thực thi hàng nghìn chương trình không ai viết tay. Hãy chạy chúng trong sandbox dùng một lần trên microVM thay vì trên laptop — tính phí theo giây, kèm ghi chú thẳng thắn về thông lượng và giới hạn CPU.

Benchmark lập trình có một bí mật khó nói: để chấm điểm mô hình, bạn phải chạy thứ nó viết. Một lần chạy pass@k trên vài trăm bài với mười lời giải mỗi bài là hàng nghìn chương trình vừa được sinh ra — và bạn sẽ không bao giờ curl | bash dù chỉ một trong số đó nếu nó đến từ người lạ.

Hầu hết mọi người bắt đầu trên laptop với subprocess.run và một timeout. Cách đó ổn cho đến khi một lời giải ghi ra tệp 40 GB, fork tiến trình đến khi máy treo, hoặc lặng lẽ đọc thư mục home của bạn. Giải pháp không phải là một timeout khôn ngoan hơn. Mà là chạy các lời giải ở nơi bạn không bận tâm.

Cách thiết lập hiệu quả

Sandbox là một microVM Firecracker có Python 3.12, Node.js 22 và bash, khởi động trong khoảng một giây và bị xóa khi bạn xong việc. Internet chiều đi hoạt động, chiều vào thì không, và bên trong không có gì của bạn.

Cái bẫy là coi sandbox như một lời gọi hàm. Mỗi sandbox bị tính tối thiểu 60 giây và mất một giây để khởi động, nên mỗi lời giải một sandbox vừa chậm vừa phí. Thay vào đó, hãy đặt harness vào bên trong:

from eqvps import Sandbox

with Sandbox.create(tariff="standard", ttl=4 * 3600) as sb:
    sb.upload("/root/harness.py", open("harness.py").read())
    sb.upload("/root/samples.jsonl", open("slice_03.jsonl").read())
    task = sb.exec("python3 /root/harness.py /root/samples.jsonl > /root/results.jsonl",
                   background=True)
    task.wait(poll_interval=10)
    results = sb.download_text("/root/results.jsonl")

Bên trong, harness.py chạy từng lời giải trong một tiến trình con với timeout ngắn riêng và ghi lại pass, fail hoặc timeout. Một lời giải chạy sai chỉ giết tiến trình con của chính nó, không phải cả lần chạy. Nếu một lời giải làm hỏng được chính sandbox, bạn mất một phần dữ liệu, tạo lại sandbox và tiếp tục.

Tệp tối đa 5 MB mỗi lần truyền, nên hãy chia bộ dữ liệu lớn thành nhiều phần — điều bạn vốn cũng muốn để chạy song song.

Thông lượng, nói thật

Một tài khoản có thể giữ tối đa 20 sandbox, nhưng 2 lệnh được thực thi cùng lúc. Tác vụ nền được tính khi đang chạy. Vì vậy một lần đánh giá nhanh trông giống hai sandbox, mỗi cái miệt mài xử lý phần của mình trong nền, chứ không phải hai mươi sandbox tranh nhau hai suất.

Với các benchmark lập trình thông thường, vậy là quá đủ: phần lớn lời giải chạy xong dưới một giây, và một sandbox xử lý được hàng nghìn lời giải mỗi giờ. Nếu bạn cần đánh giá nhiều mô hình cùng lúc trên một bộ test khổng lồ, bạn sẽ chạm trần. Khi đó, một VPS chạy cơ chế cô lập riêng của bạn là công cụ tốt hơn.

Quy tắc CPU bạn nên biết

Sandbox được thiết kế cho tải theo từng đợt. Sandbox bị giữ trên 90% CPU quá 15 phút sẽ bị coi là lạm dụng — sandbox tạm thời sẽ bị dừng. Các lần đánh giá bình thường, xen kẽ giữa thực thi nhanh và ghi chép kết quả, không đến gần ngưỡng đó. Một benchmark đốt CPU tối đa hàng giờ (biên dịch dự án lớn cho mỗi lời giải, kiểm thử tải tính toán số) thì có. Cho trường hợp đó, hãy thuê VPS theo tháng: gói AI agent cho 4 vCPU và 4 GB với giá $10.

Một lần chạy tốn bao nhiêu

Bạn trả theo giây cho vCPU và RAM của gói, tối thiểu 60 giây, từ số dư trả trước.

Khối lượngGóiThời gianChi phí ước tính
1.000 lời giải Python ngắnsmall (0.5 vCPU, 1 GB)~20 phút$0.011
5.000 lời giải, cho phép numpystandard (1 vCPU, 2 GB)~2 giờ$0.13
Build + test cho mỗi lời giảiplus (2 vCPU, 4 GB)~3 giờ$0.40

Các lời gọi mô hình để sinh ra những lời giải đó sẽ tốn hơn phần thực thi — thường gấp khoảng mười lần.

Khóa và khả năng tái lập

Nếu harness gọi API của mô hình từ bên trong sandbox — chẳng hạn để chấm điểm kiểu LLM-as-judge — hãy truyền khóa dưới dạng biến môi trường của sandbox. Giá trị được lưu mã hóa, không bao giờ ghi vào log, và API chỉ trả về tên biến.

Để tái lập được kết quả, hãy cố định phiên bản gói trong harness và ghi lại gói sandbox cùng với kết quả. Mỗi sandbox khởi động từ cùng một image sạch, loại bỏ biến số "trên laptop tôi chạy được" khỏi các con số của bạn. Thật lòng mà nói, chỉ riêng điều đó đã đáng để chuyển đổi.

Hãy bắt đầu từ trang sandbox và tài liệu sandbox. Tài khoản mới nhận $1 thời gian sandbox — đủ cho lần đánh giá đầu tiên với vài nghìn lời giải trên gói small. Tài liệu tham khảo SDK trình bày tác vụ nền và truyền tệp, còn giới hạn và tính phí sandbox có bảng hạn mức đầy đủ.

Liên quan: sandbox cho AI agent và tác vụ agent đầu tiên của bạn trong sandbox.

Sẵn sàng triển khai? Thanh toán bằng crypto, không KYC — trực tuyến trong khoảng một phút.

Triển khai ngay →

FAQ

Vì sao việc đánh giá lại cần sandbox?

Vì bạn đang thực thi hàng nghìn chương trình do mô hình viết. Phần lớn vô hại, một số lặp vô hạn, vài cái xóa tệp hoặc mở kết nối mạng. Trên máy trạm của bạn, đó là rủi ro cho dữ liệu; trong sandbox, đó chỉ là một lời giải thất bại.

Tôi có nên tạo một sandbox cho mỗi lời giải không?

Thường là không. Tạo sandbox mất khoảng một giây và bị tính tối thiểu 60 giây, nên mỗi lời giải một sandbox sẽ lãng phí cả hai. Hãy chạy trong một sandbox một harness thực thi nhiều lời giải, mỗi lời giải có timeout riêng, và tạo lại sandbox giữa các mô hình hoặc khi có thứ làm hỏng nó.

Tôi có thể chạy nhanh đến mức nào?

Một tài khoản chạy tối đa 2 lệnh cùng lúc trên tối đa 20 sandbox. Cách làm thực tế là vài sandbox, mỗi cái chạy harness của bạn dưới dạng tác vụ nền để xử lý một phần của bộ dữ liệu.

Tôi có thể chạy một benchmark dài hàng giờ không?

Dưới dạng tác vụ nền thì có, cho đến khi vòng đời sandbox kết thúc (24 giờ với sandbox tạm thời). Nhưng sandbox bị giữ ở mức CPU tối đa quá 15 phút sẽ bị coi là lạm dụng. Các đợt đánh giá theo từng đợt thì không sao; tính toán nặng đều đặn hàng giờ nên đặt trên VPS.

Sandbox có gọi được API của mô hình tôi không?

Internet chiều đi được mở, nên có. Hãy truyền khóa API dưới dạng biến môi trường của sandbox — nó được lưu mã hóa và không bao giờ được API trả về — thay vì dán vào mã được sinh ra.

Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên.

Để lại bình luận

Bình luận được kiểm duyệt trước khi hiển thị.