Tỉa bớt mô hình
Tối ưu hóa các mô hình machine learning bằng cách tỉa bớt mô hình. Đạt được khả năng suy luận nhanh hơn, giảm sử dụng bộ nhớ và hiệu quả năng lượng cho các triển khai có tài nguyên hạn chế.
Tỉa thưa mô hình (Model pruning) là một kỹ thuật tối ưu hóa mô hình giúp làm cho mạng nơ-ron nhỏ hơn và hiệu quả hơn về mặt tính toán. Ý tưởng cốt lõi là xác định và loại bỏ các tham số (trọng số, nơ-ron hoặc kênh) dư thừa hoặc không quan trọng khỏi một mô hình đã được huấn luyện. Quá trình này làm giảm kích thước của mô hình và có thể tăng tốc đáng kể quá trình suy luận (inference), làm cho nó trở nên lý tưởng để triển khai trên các thiết bị biên (edge devices) với bộ nhớ và sức mạnh xử lý hạn chế. Khái niệm này dựa trên quan sát rằng nhiều mô hình lớn được tham số hóa quá mức, có nghĩa là chúng chứa các thành phần đóng góp rất ít vào dự đoán cuối cùng. Các bài báo mang tính đột phá như Optimal Brain Damage đã sớm thiết lập rằng không phải tất cả các tham số đều được tạo ra như nhau.
Các Loại Tỉa Thưa Mô Hình
Các kỹ thuật tỉa thưa mô hình (Model pruning) thường được phân loại theo độ chi tiết của những gì bị loại bỏ khỏi mạng:
- Tỉa thưa trọng số (phi cấu trúc): Đây là phương pháp chi tiết nhất, trong đó các trọng số mô hình (model weights) riêng lẻ có giá trị dưới một ngưỡng nhất định được đặt thành không. Điều này tạo ra một mô hình "thưa thớt", có thể được nén rất nhiều. Tuy nhiên, nó thường yêu cầu phần cứng hoặc thư viện phần mềm chuyên dụng, như các công cụ của NVIDIA dành cho các mô hình thưa thớt, để đạt được tốc độ đáng kể trong quá trình suy luận.
- Neuron Pruning (Tỉa Thưa Nơ-ron): Trong phương pháp này, toàn bộ các nơ-ron và tất cả các kết nối đến và đi của chúng sẽ bị loại bỏ nếu chúng được coi là không quan trọng. Đây là một hình thức tỉa thưa có cấu trúc hơn so với việc loại bỏ các trọng số riêng lẻ.
- Cắt tỉa Bộ lọc/Kênh (Có cấu trúc): Đặc biệt phù hợp với Mạng nơ-ron tích chập (CNN), phương pháp này loại bỏ toàn bộ các bộ lọc hoặc kênh. Vì nó bảo toàn cấu trúc dày đặc, đều đặn của các lớp mạng, nên cách tiếp cận này thường mang lại hiệu suất trực tiếp trên phần cứng tiêu chuẩn mà không cần các thư viện chuyên dụng. Các công cụ như DeepSparse của Neural Magic được thiết kế để tăng tốc các mô hình thưa thớt này trên CPU.
Sau khi cắt tỉa, các mô hình thường trải qua quá trình tinh chỉnh, bao gồm việc đào tạo lại mạng nhỏ hơn trong một vài epoch để phục hồi bất kỳ độ chính xác nào bị mất trong quá trình loại bỏ tham số. Giả thuyết Vé số (Lottery Ticket Hypothesis) nổi tiếng cho rằng trong một mạng lớn, tồn tại một mạng con nhỏ hơn có thể đạt được hiệu suất tương tự khi được đào tạo từ đầu. Các framework như PyTorch cung cấp các công cụ tích hợp để triển khai, như được trình bày trong Hướng dẫn Cắt tỉa PyTorch chính thức.
Các Ứng dụng Thực tế
Tỉa thưa mô hình (Model pruning) rất quan trọng để triển khai các mô hình AI hiệu quả trong nhiều tình huống:
- Tối ưu hóa phát hiện đối tượng trên thiết bị biên: Các mô hình như Ultralytics YOLO có thể được tỉa bớt để chạy hiệu quả cho các tác vụ phát hiện đối tượng trên phần cứng bị hạn chế về tài nguyên như Raspberry Pi hoặc NVIDIA Jetson. Điều này cho phép các ứng dụng thời gian thực như quản lý giao thông, giám sát thông minh và tích hợp thị giác máy tính trong robot.
- Triển khai Mô hình Ngôn ngữ Lớn (LLM) cục bộ: Pruning (tỉa bớt) được sử dụng để thu nhỏ các mô hình khổng lồ dựa trên kiến trúc Transformer, cho phép chúng chạy trên các thiết bị như điện thoại thông minh cho các tác vụ xử lý ngôn ngữ tự nhiên (NLP). Cách tiếp cận này, đôi khi kết hợp với các kỹ thuật khác như lượng tử hóa, cho phép tạo ra các trợ lý AI mạnh mẽ trên thiết bị và các ứng dụng dịch thuật đồng thời tăng cường quyền riêng tư dữ liệu và giảm độ trễ. Nghiên cứu và các công cụ từ các tổ chức như Hugging Face khám phá việc tỉa bớt LLM.
Tỉa bớt (Pruning) so với các Kỹ thuật Tối ưu hóa khác
Tỉa thưa mô hình (Model pruning) là một trong số các kỹ thuật tối ưu hóa mô hình bổ trợ lẫn nhau:
- Lượng tử hóa mô hình: Kỹ thuật này làm giảm độ chính xác số của trọng số và kích hoạt mô hình (ví dụ: từ số dấu phẩy động 32 bit thành số nguyên 8 bit). Không giống như tỉa bớt, loại bỏ các tham số, lượng tử hóa làm cho các tham số hiện có nhỏ hơn về kích thước. Nó thường được áp dụng sau khi tỉa bớt để tối ưu hóa tối đa, đặc biệt khi nhắm mục tiêu phần cứng có hỗ trợ chuyên dụng như TensorRT.
- Knowledge Distillation: Phương pháp này liên quan đến việc huấn luyện một mô hình "học sinh" nhỏ hơn để bắt chước đầu ra của một mô hình "giáo viên" lớn hơn, đã được huấn luyện trước. Mục tiêu là chuyển kiến thức đã học của giáo viên sang một kiến trúc nhỏ gọn hơn. Điều này khác với tỉa bớt (pruning), giúp làm gọn một mô hình đã được huấn luyện thay vì huấn luyện một mô hình mới.
Cuối cùng, những kỹ thuật này có thể được sử dụng kết hợp để tạo ra các mô hình hiệu quả cao. Sau khi được tối ưu hóa, một mô hình có thể được xuất sang các định dạng tiêu chuẩn như ONNX bằng cách sử dụng các tùy chọn xuất của Ultralytics để triển khai rộng rãi trên các inference engine khác nhau. Các nền tảng như Ultralytics HUB cung cấp các công cụ để quản lý toàn bộ vòng đời của các mô hình thị giác máy tính, từ huấn luyện đến triển khai được tối ưu hóa.