Lãnh đạo tư tưởng

Tránh những nguy hiểm ẩn: Điều hướng những cạm bẫy không rõ ràng trong ML trên iOS

mm
Thêm Unite.AI vào các nguồn ưu tiên của bạn trên Google

Bạn có cần ML?

Học máy là tuyệt vời trong việc phát hiện ra các mẫu. Nếu bạn có thể thu thập một tập dữ liệu sạch cho nhiệm vụ của mình, thì thông thường chỉ là vấn đề thời gian trước khi bạn có thể xây dựng một mô hình ML với hiệu suất siêu phàm. Điều này đặc biệt đúng trong các nhiệm vụ cổ điển như phân loại, hồi quy và phát hiện bất thường.

Khi bạn sẵn sàng giải quyết một số vấn đề kinh doanh của mình với ML, bạn phải xem xét nơi mô hình ML của bạn sẽ chạy. Đối với một số người, việc chạy cơ sở hạ tầng máy chủ có ý nghĩa. Điều này có lợi thế là giữ mô hình ML của bạn riêng tư, vì vậy đối thủ cạnh tranh khó theo dõi. Ngoài ra, máy chủ có thể chạy nhiều loại mô hình khác nhau. Ví dụ, mô hình GPT (được làm nổi tiếng với ChatGPT) hiện tại yêu cầu GPU hiện đại, vì vậy thiết bị tiêu dùng không phải là lựa chọn. Mặt khác, việc duy trì cơ sở hạ tầng của bạn khá tốn kém, và nếu thiết bị tiêu dùng có thể chạy mô hình của bạn, tại sao phải trả thêm? Ngoài ra, cũng có thể có những lo ngại về quyền riêng tư nơi bạn không thể gửi dữ liệu người dùng đến máy chủ từ xa để xử lý.

Tuy nhiên, hãy giả sử rằng việc sử dụng thiết bị iOS của khách hàng để chạy mô hình ML là hợp lý. Vậy điều gì có thể sai?

Giới hạn nền tảng

Giới hạn bộ nhớ

Thiết bị iOS có bộ nhớ video sẵn dùng ít hơn nhiều so với các thiết bị để bàn. Ví dụ, Nvidia RTX 4080 Ti gần đây có 20 GB bộ nhớ sẵn dùng. Mặt khác, iPhone có bộ nhớ video được chia sẻ với RAM còn lại trong cái mà họ gọi là “bộ nhớ hợp nhất”. Để tham khảo, iPhone 14 Pro có 6 GB RAM. Hơn nữa, nếu bạn phân bổ hơn một nửa bộ nhớ, iOS rất có thể sẽ kết thúc ứng dụng để đảm bảo hệ điều hành vẫn phản hồi. Điều này có nghĩa là bạn chỉ có thể dựa vào việc có 2-3 GB bộ nhớ sẵn dùng cho suy luận mạng nơ-ron.

Các nhà nghiên cứu thường đào tạo mô hình của họ để tối ưu hóa độ chính xác hơn là sử dụng bộ nhớ. Tuy nhiên, cũng có nghiên cứu về cách tối ưu hóa cho tốc độ và dấu chân bộ nhớ, vì vậy bạn có thể tìm kiếm các mô hình ít đòi hỏi hơn hoặc đào tạo một mô hình mình.

Hỗ trợ lớp mạng (hoạt động)

Hầu hết ML và mạng nơ-ron đến từ các khuôn khổ học sâu nổi tiếng và sau đó được chuyển đổi thành CoreML với Core ML Tools. CoreML là một công cụ suy luận được viết bởi Apple (AAPL ) có thể chạy nhiều mô hình khác nhau trên thiết bị Apple. Các lớp được tối ưu hóa tốt cho phần cứng và danh sách các lớp được hỗ trợ khá dài, vì vậy đây là một điểm khởi đầu tuyệt vời. Tuy nhiên, cũng có các lựa chọn khác như Tensorflow Lite cũng có sẵn.

Cách tốt nhất để xem những gì có thể với CoreML là xem một số mô hình đã được chuyển đổi sử dụng các trình xem như Netron. Apple liệt kê một số mô hình được hỗ trợ chính thức, nhưng cũng có các mô hình được điều khiển bởi cộng đồng. Danh sách đầy đủ các hoạt động được hỗ trợ luôn thay đổi, vì vậy việc xem mã nguồn của Core ML Tools có thể hữu ích như một điểm khởi đầu. Ví dụ, nếu bạn muốn chuyển đổi mô hình PyTorch, bạn có thể thử tìm lớp cần thiết tại đây.

Ngoài ra, một số kiến trúc mới có thể chứa mã CUDA viết tay cho một số lớp. Trong những tình huống như vậy, bạn không thể mong đợi CoreML cung cấp một lớp được định nghĩa trước. Tuy nhiên, bạn có thể cung cấp thực hiện của riêng bạn nếu bạn có một kỹ sư có kinh nghiệm viết mã GPU.

Tổng thể, lời khuyên tốt nhất ở đây là hãy thử chuyển đổi mô hình của bạn sang CoreML sớm, ngay cả trước khi đào tạo nó. Nếu bạn có một mô hình không được chuyển đổi ngay, có thể sửa đổi định nghĩa mạng nơ-ron trong khuôn khổ DL của bạn hoặc mã nguồn của công cụ chuyển đổi Core ML để tạo ra một mô hình CoreML hợp lệ mà không cần viết một lớp tùy chỉnh cho suy luận CoreML.

Xác thực

Lỗi công cụ suy luận

Không có cách nào để kiểm tra mọi sự kết hợp có thể của các lớp, vì vậy công cụ suy luận sẽ luôn có một số lỗi. Ví dụ, rất phổ biến khi thấy các phép hội tụ sử dụng quá nhiều bộ nhớ với CoreML, có thể chỉ ra một thực hiện bị viết sai với một hạt nhân lớn được đệm bằng không. Một lỗi khác là đầu ra mô hình không chính xác cho một số kiến trúc mô hình.

Trong trường hợp này, thứ tự của các hoạt động có thể là yếu tố. Có thể nhận được kết quả không chính xác tùy thuộc vào việc liệu hoạt động kích hoạt với hội tụ hay kết nối dư thừa đến trước. Cách duy nhất để đảm bảo mọi thứ hoạt động đúng là lấy mô hình của bạn, chạy nó trên thiết bị dự định và so sánh kết quả với phiên bản máy tính để bàn. Đối với thử nghiệm này, hữu ích khi có ít nhất một mô hình nửa đào tạo sẵn có, nếu không thì lỗi số có thể tích lũy cho các mô hình được khởi tạo ngẫu nhiên kém. Mặc dù mô hình đào tạo cuối cùng sẽ hoạt động tốt, nhưng kết quả có thể rất khác nhau giữa thiết bị và máy tính để bàn cho một mô hình được khởi tạo ngẫu nhiên.

Mất độ chính xác

iPhone sử dụng độ chính xác nửa chính xác rộng rãi cho suy luận. Trong khi một số mô hình không có bất kỳ sự suy giảm độ chính xác đáng chú ý nào do số bit ít hơn trong biểu diễn điểm nổi, một số mô hình khác có thể gặp phải. Bạn có thể ước tính mất độ chính xác bằng cách đánh giá mô hình của mình trên máy tính để bàn với độ chính xác nửa và tính toán một số liệu thử nghiệm cho mô hình của bạn. Một phương pháp thậm chí còn tốt hơn là chạy nó trên một thiết bị thực để tìm ra xem mô hình có chính xác như dự định hay không.

Hồ sơ

Các mô hình iPhone khác nhau có khả năng phần cứng khác nhau. Những mô hình mới nhất có đơn vị xử lý Neural Engine được cải tiến có thể nâng cao hiệu suất tổng thể đáng kể. Chúng được tối ưu hóa cho các hoạt động nhất định và CoreML có thể phân phối thông minh công việc giữa CPU, GPU và Neural Engine. GPU của Apple cũng đã được cải tiến theo thời gian, vì vậy điều bình thường là thấy hiệu suất thay đổi trên các mô hình iPhone khác nhau. Đó là một ý tưởng tốt để thử nghiệm mô hình của bạn trên các thiết bị được hỗ trợ tối thiểu để đảm bảo khả năng tương thích tối đa và hiệu suất chấp nhận được cho các thiết bị cũ hơn.

Điều đáng chú ý là CoreML có thể tối ưu hóa một số lớp và tính toán trung gian tại chỗ, điều này có thể cải thiện hiệu suất đáng kể. Một yếu tố khác cần xem xét là đôi khi, một mô hình hoạt động kém hơn trên máy tính để bàn có thể thực sự thực hiện suy luận nhanh hơn trên iOS. Điều này có nghĩa là đáng để dành một chút thời gian để thử nghiệm với các kiến trúc khác nhau.

Để tối ưu hóa thêm, Xcode có một công cụ Instruments tuyệt vời với một mẫu chỉ dành cho mô hình CoreML có thể cung cấp một cái nhìn sâu sắc hơn về những gì đang làm chậm suy luận mô hình của bạn.

Kết luận

Không ai có thể dự đoán tất cả những cạm bẫy có thể khi phát triển mô hình ML cho iOS. Tuy nhiên, có một số sai lầm có thể tránh được nếu bạn biết những gì cần tìm. Hãy bắt đầu chuyển đổi, xác thực và tạo hồ sơ cho mô hình ML của bạn sớm để đảm bảo rằng mô hình của bạn sẽ hoạt động chính xác và phù hợp với yêu cầu kinh doanh của bạn, và hãy làm theo các mẹo được nêu ở trên để đảm bảo thành công càng sớm càng tốt.

Konstantin Semianov, là CTO của Neatsy.AI, ứng dụng đầu tiên trên thế giới phát hiện các vấn đề sức khỏe về xương và chân, sử dụng AI & AR, chỉ với camera iPhone. Trước khi đến với Neatsy.AI, ông đã làm việc như một kỹ sư R&D tại Prisma Labs, nhà tạo ra ứng dụng Lensa.