Hugging Face: Blog
58

Tin ngành

Hugging Face nâng cấp toàn diện hệ thống Kernels: Tối ưu hóa hiệu suất cho mô hình AI

(giờ Việt Nam)

Tóm tắt AI

Hugging Face vừa công bố những cải tiến quan trọng cho hệ thống Kernels, giúp tăng tốc độ xử lý và tối ưu hóa hiệu năng cho các mô hình AI trên hạ tầng phần cứng hiện đại.

Bản dịch AI

Quay lại các bài viết

Trong bài viết trước (Từ con số 0 đến GPU), chúng tôi đã giới thiệu dự án 🤗 Kernels, với mục tiêu tiêu chuẩn hóa cách đóng gói, phân phối và sử dụng các custom kernel. Chúng tôi muốn dự án này hoạt động trơn tru, bảo mật và thân thiện nhất có thể với Hub.

Trong vài tháng qua, chúng tôi đã nỗ lực hướng tới mục tiêu này. Trong quá trình đó, chúng tôi cũng gần như thiết kế lại hoàn toàn dự án. Bài viết này sẽ tóm tắt những cập nhật quan trọng mà chúng tôi đã triển khai và những gì sắp tới.

Mục lục

Kernels – một loại repository mới

Chúng tôi đã giới thiệu một loại repository mới trên Hub có tên là "kernel". Điều này cho phép chúng tôi phục vụ những người dùng có các yêu cầu đặc thù về tính toán. Ví dụ, người dùng có thể nắm bắt được những bộ tăng tốc (accelerator), hệ điều hành và phiên bản backend nào được hỗ trợ cho một kernel nhất định:

Flash Attention 3 Kernel Page

Bạn có thể duyệt qua tất cả các kernel hiện có trên Hub tại đây: https://huggingface.co/kernels.

Việc đưa các kernel này trở thành thành phần chính thức của Hub cũng mang lại lợi ích cho hệ sinh thái AI. Người dùng giờ đây có thể thấy các xu hướng trên các kernel, model và những ứng dụng sử dụng chúng. Các kernel trở nên dễ dàng được khám phá hơn đối với người dùng.

Bảo mật được cải thiện

Các kernel chạy mã nguồn gốc (native code) với cùng đặc quyền như tiến trình Python tải chúng, vì vậy một kernel độc hại có thể gây ra thiệt hại thực sự. Do đó, bảo mật luôn là ưu tiên hàng đầu đối với dự án Kernels.

Đây là lý do tại sao chúng tôi tập trung sớm vào tính tái lập (reproducibility): bạn có thể tự biên dịch lại một kernel và xác minh rằng nó khớp với mã nguồn công khai. Chúng tôi sử dụng Nix để hiện thực hóa điều này, vì nó giữ cho các bản dựng luôn thuần túy thông qua việc đánh giá khép kín (hermetic evaluation) công thức xây dựng và một sandbox được cách ly mạnh mẽ. Chúng tôi cải thiện hơn nữa tính xác thực nguồn gốc bằng cách nhúng Git SHA1 của mã nguồn vào chính kernel đó.

Trong những tháng gần đây, chúng tôi đã thêm các lớp phòng thủ bổ sung: nhà xuất bản kernel đáng tin cậy (trusted kernel publishers) và ký mã nguồn (code signing).

Nhà xuất bản kernel đáng tin cậy

Với loại repo mới, chúng tôi cũng giới thiệu "trusted publishers". Vì các kernel thực thi mã trên máy với cùng đặc quyền như tiến trình Python mà chúng được sử dụng, kẻ tấn công có thể xâm nhập vào máy bằng cách tải lên một kernel độc hại và dụ dỗ bạn sử dụng kernel đó. Để giúp bạn tránh các kernel độc hại như vậy, gói kernels giờ đây sẽ chỉ tải các kernel từ những nhà xuất bản đáng tin cậy theo mặc định. Nhà xuất bản đáng tin cậy là một tổ chức được cộng đồng tin tưởng và hoạt động với thiện chí.

Chúng tôi vẫn muốn hỗ trợ tải kernel từ các tổ chức hoặc người dùng không phải là nhà xuất bản đáng tin cậy, nhưng bạn phải chọn tham gia (opt in) một cách rõ ràng bằng cách sử dụng đối số trust_remote_code khi tải kernel từ Hub:

Theo mặc định, người dùng không thể xuất bản các repository kernel trên Hub. Họ phải yêu cầu trở thành nhà xuất bản kernel. Người dùng và tổ chức có thể yêu cầu quyền truy cập từ cài đặt tài khoản của họ. Điều này cho phép chúng tôi có thời gian xử lý các yêu cầu này theo từng trường hợp cụ thể.

Ký kernel (Kernel signing)

Một lớp bảo mật bổ sung mà chúng tôi đang thêm vào là ký mã nguồn. Ký mã nguồn bảo vệ chống lại kịch bản kẻ tấn công tải lên một kernel độc hại vào repo kernel từ một nhà xuất bản đáng tin cậy mà thông tin đăng nhập Hub của họ đã bị xâm phạm. Trong ký mã nguồn, một kernel được ký bằng khóa riêng (private key) chỉ nhà phát triển kernel biết và được xác thực bằng khóa công khai (public key) có sẵn rộng rãi. Trong kịch bản Hub bị xâm phạm, kẻ tấn công không thể ký kernel độc hại vì chúng không sở hữu khóa riêng cần thiết để ký.

Để cải thiện bảo mật hơn nữa, chúng tôi sử dụng cosign của Sigstore để ký bằng các khóa riêng tạm thời (ephemeral private keys). Vì các khóa ký này chỉ có hiệu lực trong thời gian giới hạn, kẻ tấn công thường không thể sử dụng khóa riêng ngay cả khi nó bị rò rỉ. Chúng tôi cũng xác minh rằng kernel đã được ký bởi một GitHub workflow đáng tin cậy từ một repository GitHub đáng tin cậy.

Việc ký kernel đã được hỗ trợ bởi kernel-builder và chúng tôi đã cung cấp lệnh kernels verify-signature để xác minh một kernel. Kernels chưa xác minh chữ ký khi tải kernel, vì chúng tôi muốn kiểm tra chức năng mới này kỹ hơn trước khi triển khai hoàn toàn. Các ghi chú sơ bộ về việc thiết lập ký mã nguồn cho kernel của riêng bạn có thể được tìm thấy trong ghi chú phát hành kernels 0.16.0: https://github.com/huggingface/kernels/releases/tag/v0.16.0.

Cải tiến các CLI

Trước đây, một loạt các tiện ích bị đan xen giữa kernels và kernel-builder. Chúng tôi đã thiết lập sự phân tách trách nhiệm tốt hơn giữa CLI của kernels và kernel-builder. Tư duy ở đây là kernels là một thư viện để tải và chuẩn bị kernel cho việc sử dụng. Do đó, nó không nên bao gồm bất cứ thứ gì liên quan đến việc "xây dựng" (building) kernel.

Kết quả là, cả kernels và kernel-builder hiện đã tinh gọn và chuyên biệt hơn nhiều. Hãy tham khảo tài liệu để tìm hiểu thêm về điều này:

Mở rộng hỗ trợ framework và backend

Chúng tôi đã mở rộng hỗ trợ cho các framework, những thay đổi dễ thấy nhất là:

Nền tảng cho phát triển kernel dựa trên tác nhân (agentic kernel development)

kernel-builder và kernels bổ sung cho sự phát triển của việc phát triển kernel dựa trên tác nhân, trong đó một tác nhân (agent) được tận dụng để tạo ra một kernel (đã tối ưu hóa) từ đầu. Cùng với nhau, chúng hỗ trợ một quy trình làm việc mà trong đó các tác nhân có thể tạo khung, xây dựng, đo lường hiệu năng (benchmark) và tối ưu hóa lặp đi lặp lại các kernel.

Phát triển kernel dựa trên tác nhân vẫn còn sơ khai và các vòng lặp phát triển phù hợp sẽ tiếp tục phát triển. Điều đó làm cho các nguyên tắc cơ bản đơn giản, rõ ràng trở nên đặc biệt quan trọng, nơi các công cụ phải dễ dàng kết hợp vào bất kỳ quy trình làm việc hoặc framework tác nhân nào mà người dùng chọn.

kernel-builder giúp thực thi cấu trúc về cách mã nguồn kernel nên được tạo khung và sử dụng để thực hiện các bản dựng có thể tái lập. Điều này cung cấp cho các tác nhân một bố cục dự án có thể dự đoán được và quy trình làm việc có thể lặp lại để hoạt động bên trong. CLI của nó cũng được thiết kế để tối ưu hóa cho tác nhân. Ví dụ, điều này có thể có nghĩa là các lệnh không tương tác và đầu ra dễ hiểu cho tác nhân theo cách lập trình. Để đạt được mục tiêu này, chúng tôi cũng có các kỹ năng dành riêng cho backend để giúp các tác nhân điều hướng các đặc thù của các backend khác nhau. Những kỹ năng này có thể nắm bắt các chuỗi công cụ (toolchain), đường dẫn biên dịch và các cân nhắc về hiệu suất dành riêng cho backend.

Xây dựng thành công một kernel không phải là mục tiêu duy nhất, chúng tôi cần đảm bảo rằng nó mang lại tốc độ thực tế nhanh hơn so với baseline trên phần cứng mục tiêu. Do đó, một bản dựng thành công chỉ là bước xác thực đầu tiên. Thông thường, phần cứng mục tiêu này có thể bao gồm nhiều bộ tăng tốc khác nhau, thậm chí là các dòng khác nhau của cùng một bộ tăng tốc.

Điều này làm cho việc đánh giá kết quả trên các nhà cung cấp phần cứng và các thế hệ phần cứng khác nhau trở nên quan trọng khi cần thiết. Sự tích hợp chặt chẽ của chúng tôi với HF Jobs có thể giúp quá trình đo lường hiệu năng này trở nên dễ dàng. Các tác nhân có thể sử dụng sự tích hợp này để chạy các bộ benchmark, thu thập kết quả hiệu suất và so sánh chúng với một baseline đã xác định.

Bằng cách này, các tác nhân có thể chạy các bài kiểm tra trên các cấu hình phần cứng khác nhau để nhận phản hồi đáng tin cậy về hiệu suất của các kernel được tạo ra và xác định những gì cần làm. Phản hồi đó sau đó có thể thông báo cho vòng lặp tối ưu hóa tiếp theo.

Dưới đây là một số ví dụ về các kernel được tăng cường bởi tác nhân. Những ví dụ này minh họa các loại kernel có thể được phát triển và đánh giá thông qua quy trình làm việc này:

Khác

Thiết lập môi trường

Việc thiết lập môi trường để xây dựng kernel với kernel-builder có thể gây khó khăn. Để giúp người dùng dễ dàng hơn, chúng tôi hiện có một tập lệnh cài đặt để thiết lập môi trường chỉ bằng một cú nhấp chuột. Nếu bạn thích làm việc với các instance tạm thời, hướng dẫn thiết lập Terraform của chúng tôi rất đáng để theo dõi.

Thẻ hệ thống (System card) cho kernel

Sau khi các kernel được xây dựng, chúng tôi tạo một thẻ hệ thống cho mỗi kernel để hiển thị thông tin hữu ích, bao gồm cách sử dụng và các giao diện được cung cấp của nó. Khi kernel được đẩy lên Hub, thẻ hệ thống này trở thành phần thông tin đầu trang cho kernel đó:

System card for a kernel
Hugging FaceKernelsTối ưu hóaHiệu suất AIHạ tầng
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hugging Face: Blog. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.