Phát hiện lỗi trên dây chuyền may, đếm kệ trống ở chuỗi cửa hàng tiện lợi, kiểm tra mũ bảo hộ ở công trường, đọc biển số ở bãi giữ xe: các dự án thị giác máy tính ở Việt Nam và Đông Nam Á thường bắt đầu bằng một model YOLO và một kho ảnh đã gán nhãn. Train trên laptop thì chậm, còn mua hẳn một GPU cho dự án ba tuần hiếm khi hợp lý. Bài hướng dẫn train YOLO trên GPU cloud này đi theo một dự án thực tế từ dataset tới model đã xuất, trên GPU thuê của Cloudj, và cho thấy vì sao dung lượng dataset, chứ không phải vị trí người dùng, quyết định bạn nên thuê ở đâu.
Dự án ví dụ
Một công ty tích hợp hệ thống ở TP.HCM đang làm tính năng phát hiện kệ trống cho một chuỗi bán lẻ. Họ có:
- Khoảng 60.000 ảnh đã gán nhãn từ camera cửa hàng, tầm 40 GB dạng JPEG.
- Thiết bị đích ở mỗi cửa hàng: một hộp edge nhỏ sẽ chạy model.
- Hạn chót ba tuần, với nhiều vòng train khi nhãn được cải thiện.
Không ai chờ GPU theo thời gian thực; train là tác vụ batch. Vậy câu hỏi vị trí duy nhất là: 40 GB tới GPU nhanh cỡ nào, và trọng số train xong về lại nhanh cỡ nào?
Bước 1: để dung lượng dataset chọn khu vực
| Tình trạng dataset | Ô Country gợi ý | Lý do |
|---|---|---|
| Dataset lớn trên server hoặc NAS ở Việt Nam | SG, HK | Đường upload từ Việt Nam ngắn hơn; có thể thử VN, nhưng không có gì bảo đảm có máy ở Việt Nam được liệt kê |
| Dataset lớn ở Nhật hoặc Hàn | JP hoặc KR | Upload trong khu vực |
| Dataset đã nằm trên cloud storage ở nơi khác | Tìm rộng hoặc gần nơi lưu trữ | Kéo dữ liệu từ phía máy GPU |
| Dataset nhỏ (vài GB) | Để trống | Chọn theo giá và độ tin cậy |
Hướng dẫn thuê GPU châu Á giải thích các mã châu Á, còn bài chuyển model và dữ liệu giữa các khu vực GPU nói về chiến lược chuyển dataset lớn. Nếu dataset nhỏ, logic trong bài train LoRA trên GPU ở Mỹ vẫn đúng: train batch thì vị trí gần như không quan trọng.
Hàng thay đổi trong ngày. Nếu SG, HK chưa có máy phù hợp, thêm JP, thử lại sau hoặc nới bộ lọc.
Bước 2: chọn card tầm trung
Model phát hiện vật thể YOLO nhỏ hơn nhiều so với model ngôn ngữ. Card consumer tầm trung thường là đủ:
- RTX 4070 Ti Super, 16 GB: ổn cho model nano tới medium ở kích thước ảnh tiêu chuẩn.
- RTX 3090, 24 GB: dư chỗ cho model lớn hơn, batch lớn hơn hoặc độ phân giải cao hơn.
- RTX 4090, 24 GB: mỗi vòng train nhanh hơn khi bạn lặp lại nhiều lần.
Cả ba đều thuê được ở cấp tài khoản khởi đầu. Bài thuê RTX 3090 ở châu Á tập trung vào card này. Giá "từ" theo thời gian thực có trên GPU cloud.
Đừng bỏ qua CPU và ổ đĩa trong danh sách kết quả: việc nạp dữ liệu và augmentation chạy trên CPU, nên máy có quá ít vCPU có thể khiến GPU ngồi chờ. Chọn ổ đĩa đủ cho dataset, cache và vài lượt train; dung lượng không đổi được sau khi triển khai.
Bước 3: triển khai và upload một lần
Mở trang triển khai RTX 3090, nhập SG, HK, xem reliability, max duration và tốc độ tải, chọn template PyTorch + JupyterLab hoặc Ubuntu + CUDA, chọn SSH key rồi triển khai.
Upload dataset bằng rsync, công cụ này tiếp tục được khi kết nối bị ngắt:
rsync -avP -e "ssh -p PORT" ./dataset/ root@HOST:/workspace/dataset/
Với hàng chục nghìn file nhỏ, đóng gói trước thường nhanh hơn:
tar -cf dataset.tar dataset/
rsync -avP -e "ssh -p PORT" dataset.tar root@HOST:/workspace/
Nếu văn phòng dùng đường truyền cáp quang doanh nghiệp của Viettel hay FPT, hãy upload từ đó thay vì từ laptop qua wifi, sẽ đỡ mất thời gian hơn nhiều.
Bước 4: train
Kết nối và cài thư viện train:
ssh -p PORT root@HOST
nvidia-smi
pip install ultralytics
tmux new -s yolo
cd /workspace
yolo detect train data=/workspace/dataset/data.yaml model=yolo11s.pt epochs=100 imgsz=640 batch=-1
Nếu đã upload file tar, hãy giải nén trước bằng tar -xf /workspace/dataset.tar -C /workspace. batch=-1 để công cụ tự chọn batch size vừa với bộ nhớ GPU. Chạy trong tmux giúp quá trình train không dừng khi rớt SSH. Tài liệu Ultralytics mô tả mọi tham số train, từ augmentation tới dừng sớm.
Theo dõi tiến độ từ một phiên khác:
watch -n 5 nvidia-smi
tail -f runs/detect/train/results.csv
Bước 5: xuất model và mang về
Khi train xong, trọng số tốt nhất nằm ở runs/detect/train/weights/best.pt. Xuất sang định dạng dùng được trên thiết bị edge:
yolo export model=runs/detect/train/weights/best.pt format=onnx
Rồi kéo kết quả về:
rsync -avP -e "ssh -p PORT" root@HOST:/workspace/runs/ ./runs/
Nếu thiết bị edge dùng TensorRT, hãy build engine TensorRT ngay trên thiết bị hoặc trên phần cứng tương đương, vì engine gắn với GPU và phiên bản phần mềm lúc build.
Giữa các vòng train
Nhãn được sửa, và bạn sẽ train lại. Có hai cách:
- Destroy rồi triển khai lại cho mỗi vòng. Giữa các vòng không tốn đồng nào, nhưng phải upload dataset lại. Hợp khi các vòng cách nhau vài ngày.
- Stop instance. Ổ đĩa và dataset được giữ, tính phí lưu trữ, nhưng GPU bị nhả và khi bật lại phải chờ GPU rảnh. Hợp khi vòng tiếp theo sắp tới và dataset lớn.
Dù cách nào, hãy giữ trọng số tốt nhất và file cấu hình train ở ngoài máy. Instance và ổ đĩa bị xóa vào ngày "available until", và host không có SLA phần cứng. Tiền thuê trừ theo phút từ số dư tài khoản, nạp bằng chuyển khoản VND.
Giấy phép và dữ liệu
Kiểm tra giấy phép của thư viện train và trọng số pretrained trước khi đưa vào sản phẩm thương mại; một số bản YOLO phổ biến dùng giấy phép copyleft và có điều khoản thương mại riêng. Bảo quản cẩn thận dữ liệu camera vì có thể chứa hình ảnh con người, và tự kiểm tra nghĩa vụ pháp lý của mình.
Câu hỏi thường gặp
GPU tầm trung có đủ để train YOLO không?
Thường là đủ. Card RTX 16 GB hoặc 24 GB xử lý được phần lớn dự án phát hiện vật thể ở kích thước ảnh tiêu chuẩn.
Có nên thuê GPU gần camera cửa hàng không?
Chỉ để rút ngắn thời gian upload dataset. Việc train không cần gần người dùng.
Có chạy YOLO trực tiếp cho camera trên GPU cloud được không?
Được, nhưng đa số dự án bán lẻ và nhà máy chạy inference trên thiết bị edge, chỉ dùng cloud để train.
Cloudj có cài sẵn Ultralytics không?
Không. Bạn cài bằng pip qua SSH, hoặc dùng Docker image công khai của mình.
Bước tiếp theo
Mở trang triển khai RTX 3090, tìm SG, HK, và chạy thử một vòng train ngắn trên một phần dataset trước khi upload toàn bộ.