Bình thường khi làm tính năng AI cho app, cách khỏe nhất là gọi API qua server. App siêu nhẹ, model có nhận diện sai thì update trên server cái rụp là xong.
Nhưng lúc build con WakeBolt (báo thức bắt chụp ảnh đồ vật, squat, đọc quote... để tắt chuông), mình nhận ra chạy server không ổn chút nào.
Thứ nhất, báo thức toàn kêu cùng lúc. 7h sáng hàng ngàn người thi nhau gọi API gửi ảnh, tiền server gánh không nổi. Ngoài ra bắt buộc user phải luôn online khi sử dụng app, nó đôi khi không phù hợp với hoàn cảnh user mới tỉnh dậy.
Thứ hai, bắt user gửi ảnh/video lúc họ vừa ngủ dậy nhếch nhác lên cloud thực sự rất "cấn" về privacy.
Cuối cùng mình chốt hạ: Ép tính năng AI chạy 100% on-device (Core ML/Vision). Ảnh chụp xong xử lý tại chỗ rồi xoá luôn.
Cái được:
- Đỡ mớ tiền server (mượn luôn CPU của user để xử lý 😆).
- Privacy tuyệt đối cho người dùng.
Cái mất:
- Bundle size to hơn.
- Đau nhất là bị user chê "AI nhận diện ngu", nhưng mình "mù" hoàn toàn vì không thu thập data (ảnh lỗi) để debug hay train lại.
Giữa việc tối ưu AI chạy on-device và đẩy lên server, anh em làm app đang nghiêng về bên nào hơn?
p/s: Tất nhiên mình chỉ chỉ bàn đến trường hợp tính năng đó vẫn chấp nhận được khi sử dụng on-device model





